diff --git a/include/parts.h b/include/parts.h index 3e515d4..2ceef31 100644 --- a/include/parts.h +++ b/include/parts.h @@ -108,6 +108,8 @@ void PE_SetPartsAlphaClipperPartsNumber(int parts_no, int alpha_clipper_parts_no void PE_SetPartsPixelDecide(int PartsNumber, bool pixel_decide); bool PE_SetThumbnailReductionSize(int reduction_size); bool PE_SetThumbnailMode(bool Mode); +void PE_SetComponentType(int parts_no, int type, int state); +int PE_GetComponentType(int parts_no, int state); void PE_SetInputState(int parts_no, int state); int PE_GetInputState(int parts_no); bool PE_SetPartsRectangleDetectionSize(int parts_no, int w, int h, int state); diff --git a/src/hll/PartsEngine.c b/src/hll/PartsEngine.c index 408aa87..31de638 100644 --- a/src/hll/PartsEngine.c +++ b/src/hll/PartsEngine.c @@ -347,8 +347,8 @@ HLL_LIBRARY(PartsEngine, HLL_EXPORT(SetDelegateIndex, PE_SetDelegateIndex), HLL_TODO_EXPORT(SetFocus, PartsEngine_SetFocus), HLL_TODO_EXPORT(IsFocus, PartsEngine_IsFocus), - HLL_TODO_EXPORT(SetComponentType, PartsEngine_SetComponentType), - HLL_TODO_EXPORT(GetComponentType, PartsEngine_GetComponentType), + HLL_EXPORT(SetComponentType, PE_SetComponentType), + HLL_EXPORT(GetComponentType, PE_GetComponentType), HLL_EXPORT(SetComponentPos, PartsEngine_SetComponentPos), HLL_EXPORT(SetComponentPosZ, PE_SetZ), HLL_EXPORT(GetComponentPosX, PartsEngine_Parts_GetComponentPosX), diff --git a/src/parts/parts.c b/src/parts/parts.c index f121378..bce023a 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -1903,6 +1903,55 @@ int PE_GetInputState(int parts_no) return parts_get(parts_no)->state + 1; } +void PE_SetComponentType(int parts_no, int type, int state) +{ + if (!parts_state_valid(--state)) + return; + struct parts *parts = parts_get(parts_no); + enum parts_type pt = PARTS_UNINITIALIZED; + switch (type) { + case 11: pt = PARTS_CG; break; + case 12: pt = PARTS_ANIMATION; break; + case 13: pt = PARTS_TEXT; break; + case 14: pt = PARTS_HGAUGE; break; + case 15: pt = PARTS_VGAUGE; break; + case 16: pt = PARTS_NUMERAL; break; + case 18: pt = PARTS_CONSTRUCTION_PROCESS; break; + case 20: pt = PARTS_FLAT; break; + case 22: pt = PARTS_MOVIE; break; + default: + VM_ERROR("unknown component type %d", type); + } + if (parts->states[state].type != pt) + parts_state_reset(&parts->states[state], pt); +} + +int PE_GetComponentType(int parts_no, int state) +{ + if (!parts_state_valid(--state)) + return -1; + struct parts *parts = parts_try_get(parts_no); + if (!parts) + return -1; + + switch (parts->states[state].type) { + case PARTS_UNINITIALIZED: // defaluts to CG + case PARTS_CG: + return 11; + case PARTS_ANIMATION: return 12; + case PARTS_TEXT: return 13; + case PARTS_HGAUGE: return 14; + case PARTS_VGAUGE: return 15; + case PARTS_NUMERAL: return 16; + case PARTS_CONSTRUCTION_PROCESS: return 18; + case PARTS_FLAT: return 20; + case PARTS_MOVIE: return 22; + case PARTS_FLASH: + break; + } + VM_ERROR("unsupported component type %d", parts->states[state].type); +} + bool PE_SetPartsRectangleDetectionSize(int parts_no, int w, int h, int state) { UNIMPLEMENTED("(%d, %d, %d, %d)", parts_no, w, h, state);