diff --git a/include/parts.h b/include/parts.h index c1d52ad..6a43539 100644 --- a/include/parts.h +++ b/include/parts.h @@ -26,6 +26,8 @@ struct string; bool PE_Init(void); void PE_Update(int passed_time, bool message_window_show); void PE_UpdateParts(int passed_time, bool is_skip, bool message_window_show); +void PE_SetDelegateIndex(int parts_no, int delegate_index); +int PE_GetDelegateIndex(int parts_no); bool PE_SetPartsCG(int parts_no, struct string *cg_name, int sprite_deform, int state); bool PE_SetPartsCG_by_index(int parts_no, int cg_no, int sprite_deform, int state); bool PE_SetPartsCGSurfaceArea(int parts_no, int x, int y, int w, int h, int state); diff --git a/src/hll/GUIEngine.c b/src/hll/GUIEngine.c index 2b81059..fb37f43 100644 --- a/src/hll/GUIEngine.c +++ b/src/hll/GUIEngine.c @@ -505,7 +505,7 @@ HLL_LIBRARY(GUIEngine, HLL_EXPORT(Release, PE_ReleaseParts), HLL_EXPORT(ReleaseAll, PE_ReleaseAllParts), HLL_EXPORT(ReleaseAllWithoutSystem, PE_ReleaseAllPartsWithoutSystem), - HLL_TODO_EXPORT(SetDelegateIndex, GUIEngine_SetDelegateIndex), + HLL_EXPORT(SetDelegateIndex, PE_SetDelegateIndex), HLL_EXPORT(GetFreeNumber, PE_GetFreeNumber), HLL_EXPORT(IsExist, PE_IsExist), HLL_TODO_EXPORT(PushController, GUIEngine_PushController), @@ -522,7 +522,7 @@ HLL_LIBRARY(GUIEngine, HLL_TODO_EXPORT(PopMessage, GUIEngine_PopMessage), HLL_TODO_EXPORT(GetMessagePartsNumber, GUIEngine_GetMessagePartsNumber), HLL_TODO_EXPORT(GetMessageDelegateIndex, GUIEngine_GetMessageDelegateIndex), - HLL_TODO_EXPORT(GetDelegateIndex, GUIEngine_GetDelegateIndex), + HLL_EXPORT(GetDelegateIndex, PE_GetDelegateIndex), HLL_EXPORT(GetMessageType, GUIEngine_GetMessageType), HLL_TODO_EXPORT(GetMessageVariableCount, GUIEngine_GetMessageVariableCount), HLL_TODO_EXPORT(GetMessageVariableType, GUIEngine_GetMessageVariableType), diff --git a/src/parts/parts.c b/src/parts/parts.c index 8a3bbec..d47f7ab 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -32,6 +32,7 @@ static struct hash_table *parts_table = NULL; static void parts_init(struct parts *parts) { memset(parts, 0, sizeof(struct parts)); + parts->delegate_index = -1; parts->on_cursor_sound = -1; parts->on_click_sound = -1; parts->origin_mode = 1; @@ -47,7 +48,6 @@ static void parts_init(struct parts *parts) parts->rotation.z = 0.0; TAILQ_INIT(&parts->children); TAILQ_INIT(&parts->motion); - gfx_font_init(); } static struct parts *parts_alloc(void) @@ -70,6 +70,14 @@ static void parts_list_insert(struct parts_list *list, struct parts *parts) parts_engine_dirty(); } +struct parts *parts_try_get(int parts_no) +{ + struct ht_slot *slot = ht_put_int(parts_table, parts_no, NULL); + if (slot->value) + return slot->value; + return NULL; +} + struct parts *parts_get(int parts_no) { struct ht_slot *slot = ht_put_int(parts_table, parts_no, NULL); @@ -537,6 +545,7 @@ bool PE_Init(void) { parts_table = ht_create(1024); parts_render_init(); + gfx_font_init(); return true; } @@ -555,6 +564,17 @@ void PE_UpdateParts(int passed_time, possibly_unused bool is_skip, possibly_unus parts_engine_dirty(); } +void PE_SetDelegateIndex(int parts_no, int delegate_index) +{ + parts_get(parts_no)->delegate_index = delegate_index; +} + +int PE_GetDelegateIndex(int parts_no) +{ + struct parts *parts = parts_try_get(parts_no); + return parts ? parts->delegate_index : -1; +} + bool PE_SetPartsCG(int parts_no, struct string *cg_name, possibly_unused int sprite_deform, int state) { if (!parts_state_valid(--state)) { diff --git a/src/parts/parts_internal.h b/src/parts/parts_internal.h index cc81ea9..ad4d729 100644 --- a/src/parts/parts_internal.h +++ b/src/parts/parts_internal.h @@ -178,6 +178,7 @@ struct parts { TAILQ_ENTRY(parts) parts_list_entry; struct parts_list children; int no; + int delegate_index; int sprite_deform; bool clickable; int on_cursor_sound; @@ -200,6 +201,7 @@ struct parts { // parts.c extern struct parts_list parts_list; +struct parts *parts_try_get(int parts_no); struct parts *parts_get(int parts_no); struct parts_cg *parts_get_cg(struct parts *parts, int state); struct parts_text *parts_get_text(struct parts *parts, int state);