/** Gets graphic size * @param[in] _pstGraphic Concerned graphic * @param[out] _pvSize Object's size * @return orxVECTOR / orxNULL */ orxVECTOR *orxFASTCALL orxGraphic_GetSize(const orxGRAPHIC *_pstGraphic, orxVECTOR *_pvSize) { orxVECTOR *pvResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); orxASSERT(_pvSize != orxNULL); /* Valid 2D or text data? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D | orxGRAPHIC_KU32_FLAG_TEXT) != orxFALSE) { /* Gets its size */ orxVector_Set(_pvSize, _pstGraphic->fWidth, _pstGraphic->fHeight, orxFLOAT_0); /* Updates result */ pvResult = _pvSize; } else { /* No size */ orxVector_SetAll(_pvSize, orx2F(-1.0f)); /* Updates result */ pvResult = orxNULL; } /* Done! */ return pvResult; }
/** Gets graphic pivot * @param[in] _pstGraphic Concerned graphic * @param[out] _pvPivot Graphic pivot * @return orxPIVOT / orxNULL */ orxVECTOR *orxFASTCALL orxGraphic_GetPivot(const orxGRAPHIC *_pstGraphic, orxVECTOR *_pvPivot) { orxVECTOR *pvResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); orxASSERT(_pvPivot != orxNULL); /* Has pivot? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_HAS_PIVOT) != orxFALSE) { /* Copies it */ orxVector_Copy(_pvPivot, &(_pstGraphic->vPivot)); /* Updates result */ pvResult = _pvPivot; } else { /* Clears it */ orxVector_Copy(_pvPivot, &orxVECTOR_0); /* Updates result */ pvResult = orxNULL; } /* Done! */ return pvResult; }
/** Restarts a clock * @param[in] _pstClock Concerned clock * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxClock_Restart(orxCLOCK *_pstClock) { orxSTATUS eResult; /* Checks */ orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstClock); /* Not locked? */ if(!orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_UPDATE_LOCK)) { /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_CLOCK, orxCLOCK_EVENT_RESTART, _pstClock, orxNULL, orxNULL); /* Restarts clock */ _pstClock->stClockInfo.fTime = _pstClock->stClockInfo.fDT = _pstClock->fPartialDT = orxFLOAT_0; /* Updates result */ eResult = orxSTATUS_SUCCESS; } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_CLOCK, "Couldn't restart this clock <%P> as it's currenlty locked/in use.", _pstClock); /* Updates result */ eResult = orxSTATUS_FAILURE; } /* Done! */ return eResult; }
/** Gets graphic color * @param[in] _pstGraphic Concerned graphic * @param[out] _pstColor Object's color * @return orxCOLOR / orxNULL */ orxCOLOR *orxFASTCALL orxGraphic_GetColor(const orxGRAPHIC *_pstGraphic, orxCOLOR *_pstColor) { orxCOLOR *pstResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); orxASSERT(_pstColor != orxNULL); /* Has color? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_HAS_COLOR)) { /* Copies color */ orxColor_Copy(_pstColor, &(_pstGraphic->stColor)); /* Updates result */ pstResult = _pstColor; } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Color not set on graphic."); /* Clears result */ pstResult = orxNULL; } /* Done! */ return pstResult; }
/** Gets graphic flipping * @param[in] _pstGraphic Concerned graphic * @param[in] _pbFlipX X axis flipping * @param[in] _pbFlipY Y axis flipping * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxGraphic_GetFlip(const orxGRAPHIC *_pstGraphic, orxBOOL *_pbFlipX, orxBOOL *_pbFlipY) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); orxASSERT(_pbFlipX != orxNULL); orxASSERT(_pbFlipY != orxNULL); /* Updates flipping mode */ *_pbFlipX = orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_FLIP_X) ? orxTRUE : orxFALSE; *_pbFlipY = orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_FLIP_Y) ? orxTRUE : orxFALSE; /* Done! */ return eResult; }
/** Gets graphic smoothing * @param[in] _pstGraphic Concerned graphic * @return Smoothing type (enabled, default or none) */ orxDISPLAY_SMOOTHING orxFASTCALL orxGraphic_GetSmoothing(const orxGRAPHIC *_pstGraphic) { orxDISPLAY_SMOOTHING eResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Updates result */ eResult = orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_SMOOTHING_ON) ? orxDISPLAY_SMOOTHING_ON : orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_SMOOTHING_OFF) ? orxDISPLAY_SMOOTHING_OFF : orxDISPLAY_SMOOTHING_DEFAULT; /* Done! */ return eResult; }
/** Is FXPointer enabled? * @param[in] _pstFXPointer Concerned FXPointer * @return orxTRUE if enabled, orxFALSE otherwise */ orxBOOL orxFASTCALL orxFXPointer_IsEnabled(const orxFXPOINTER *_pstFXPointer) { /* Checks */ orxASSERT(sstFXPointer.u32Flags & orxFXPOINTER_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstFXPointer); /* Done! */ return(orxStructure_TestFlags(_pstFXPointer, orxFXPOINTER_KU32_FLAG_ENABLED)); }
/** Is TimeLine enabled? * @param[in] _pstTimeLine Concerned TimeLine * @return orxTRUE if enabled, orxFALSE otherwise */ orxBOOL orxFASTCALL orxTimeLine_IsEnabled(const orxTIMELINE *_pstTimeLine) { /* Checks */ orxASSERT(sstTimeLine.u32Flags & orxTIMELINE_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstTimeLine); /* Done! */ return(orxStructure_TestFlags(_pstTimeLine, orxTIMELINE_KU32_FLAG_ENABLED)); }
/** Is a clock paused? * @param[in] _pstClock Concerned clock * @return orxTRUE if paused, orxFALSE otherwise */ orxBOOL orxFASTCALL orxClock_IsPaused(const orxCLOCK *_pstClock) { /* Checks */ orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstClock); /* Tests flags */ return(orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_PAUSED) ? orxTRUE : orxFALSE); }
/** Sets text font * @param[in] _pstText Concerned text * @param[in] _pstFont Font / orxNULL to use default * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxText_SetFont(orxTEXT *_pstText, orxFONT *_pstFont) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstText.u32Flags & orxTEXT_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstText); /* Different? */ if(_pstText->pstFont != _pstFont) { /* Has current font? */ if(_pstText->pstFont != orxNULL) { /* Updates structure reference counter */ orxStructure_DecreaseCounter(_pstText->pstFont); /* Internally handled? */ if(orxStructure_TestFlags(_pstText, orxTEXT_KU32_FLAG_INTERNAL)) { /* Removes its owner */ orxStructure_SetOwner(_pstText->pstFont, orxNULL); /* Deletes it */ orxFont_Delete(_pstText->pstFont); /* Updates flags */ orxStructure_SetFlags(_pstText, orxTEXT_KU32_FLAG_NONE, orxTEXT_KU32_FLAG_INTERNAL); } /* Cleans it */ _pstText->pstFont = orxNULL; } /* Has new font? */ if(_pstFont != orxNULL) { /* Stores it */ _pstText->pstFont = _pstFont; /* Updates its reference counter */ orxStructure_IncreaseCounter(_pstFont); } /* Updates text's size */ orxText_UpdateSize(_pstText); } /* Done! */ return eResult; }
/** Gets clock config name * @param[in] _pstClock Concerned clock * @return orxSTRING / orxSTRING_EMPTY */ const orxSTRING orxFASTCALL orxClock_GetName(const orxCLOCK *_pstClock) { const orxSTRING zResult; /* Checks */ orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY); orxASSERT(_pstClock); /* Updates result */ zResult = (orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_REFERENCED)) ? _pstClock->zReference : orxSTRING_EMPTY; /* Done! */ return zResult; }
/** Graphic has color accessor * @param[in] _pstGraphic Concerned graphic * @return orxTRUE / orxFALSE */ orxBOOL orxFASTCALL orxGraphic_HasColor(const orxGRAPHIC *_pstGraphic) { orxBOOL bResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Updates result */ bResult = orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_HAS_COLOR); /* Done! */ return bResult; }
/** Deletes a camera * @param[in] _pstCamera Camera to delete * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxCamera_Delete(orxCAMERA *_pstCamera) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstCamera.u32Flags & orxCAMERA_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstCamera); /* Not referenced? */ if(orxStructure_GetRefCounter(_pstCamera) == 0) { /* Removes frame reference */ orxStructure_DecreaseCounter(_pstCamera->pstFrame); /* Deletes frame*/ orxFrame_Delete(_pstCamera->pstFrame); /* Is referenced? */ if(orxStructure_TestFlags(_pstCamera, orxCAMERA_KU32_FLAG_REFERENCED) != orxFALSE) { /* Removes it from reference table */ orxHashTable_Remove(sstCamera.pstReferenceTable, orxString_ToCRC(_pstCamera->zReference)); } /* Has reference? */ if(_pstCamera->zReference != orxNULL) { /* Unprotects it */ orxConfig_ProtectSection(_pstCamera->zReference, orxFALSE); } /* Deletes structure */ orxStructure_Delete(_pstCamera); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_RENDER, "Cannot delete camera while it is still referenced."); /* Referenced by others */ eResult = orxSTATUS_FAILURE; } /* Done! */ return eResult; }
/** Event handler * @param[in] _pstEvent Sent event * @return orxSTATUS_SUCCESS if handled / orxSTATUS_FAILURE otherwise */ static orxSTATUS orxFASTCALL orxGraphic_EventHandler(const orxEVENT *_pstEvent) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(_pstEvent->eType == orxEVENT_TYPE_LOCALE); /* Depending on event ID */ switch(_pstEvent->eID) { /* Select language event */ case orxLOCALE_EVENT_SELECT_LANGUAGE: { orxGRAPHIC *pstGraphic; /* For all graphics */ for(pstGraphic = orxGRAPHIC(orxStructure_GetFirst(orxSTRUCTURE_ID_GRAPHIC)); pstGraphic != orxNULL; pstGraphic = orxGRAPHIC(orxStructure_GetNext(pstGraphic))) { /* Is data a text? */ if(orxStructure_TestFlags(pstGraphic, orxGRAPHIC_KU32_FLAG_TEXT)) { /* Updates graphic's size */ orxGraphic_UpdateSize(pstGraphic); } } break; } default: { break; } } /* Done! */ return eResult; }
/** Updates graphic size (recompute) * @param[in] _pstGraphic Concerned graphic * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxGraphic_UpdateSize(orxGRAPHIC *_pstGraphic) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Is data a texture? */ if(orxTEXTURE(_pstGraphic->pstData) != orxNULL) { /* Updates coordinates */ orxTexture_GetSize(orxTEXTURE(_pstGraphic->pstData), &(_pstGraphic->fWidth), &(_pstGraphic->fHeight)); } /* Is data a text? */ else if(orxTEXT(_pstGraphic->pstData) != orxNULL) { /* Inits full coordinates */ orxText_GetSize(orxTEXT(_pstGraphic->pstData), &(_pstGraphic->fWidth), &(_pstGraphic->fHeight)); } else { /* Failure */ eResult = orxSTATUS_FAILURE; } /* Valid and has a relative pivot? */ if((eResult != orxSTATUS_FAILURE) && (orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_RELATIVE_PIVOT))) { /* Updates relative pivot */ orxGraphic_SetRelativePivot(_pstGraphic, orxStructure_GetFlags(_pstGraphic, orxGRAPHIC_KU32_MASK_ALIGN)); } /* Done! */ return eResult; }
/** Updates the TimeLine (Callback for generic structure update calling) * @param[in] _pstStructure Generic Structure or the concerned Body * @param[in] _pstCaller Structure of the caller * @param[in] _pstClockInfo Clock info used for time updates * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ static orxSTATUS orxFASTCALL orxTimeLine_Update(orxSTRUCTURE *_pstStructure, const orxSTRUCTURE *_pstCaller, const orxCLOCK_INFO *_pstClockInfo) { orxTIMELINE *pstTimeLine; orxSTATUS eResult = orxSTATUS_SUCCESS; /* Profiles */ orxPROFILER_PUSH_MARKER("orxTimeLine_Update"); /* Checks */ orxASSERT(sstTimeLine.u32Flags & orxTIMELINE_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstStructure); orxSTRUCTURE_ASSERT(_pstCaller); /* Gets TimeLine */ pstTimeLine = orxTIMELINE(_pstStructure); /* Is enabled? */ if(orxTimeLine_IsEnabled(pstTimeLine) != orxFALSE) { orxU32 i; /* Cleans its flags */ orxStructure_SetFlags(pstTimeLine, orxTIMELINE_KU32_FLAG_NONE, orxTIMELINE_KU32_FLAG_DIRTY); /* Has clock info? */ if(_pstClockInfo != orxNULL) { /* Computes its new time cursor */ pstTimeLine->fTime += _pstClockInfo->fDT; } /* For all tracks */ for(i = 0; i < orxTIMELINE_KU32_TRACK_NUMBER; i++) { orxTIMELINE_TRACK *pstTrack; /* Is timeline dirty? */ if(orxStructure_TestFlags(pstTimeLine, orxTIMELINE_KU32_FLAG_DIRTY)) { orxU32 j; /* For all previous tracks */ for(j = 0; j < i; j++) { /* Is defined? */ if(pstTimeLine->astTrackList[j].pstTrack != orxNULL) { /* Hasn't been updated? */ if(!orxFLAG_TEST(pstTimeLine->astTrackList[j].u32Flags, orxTIMELINE_HOLDER_KU32_FLAG_UPDATED)) { /* Selects it */ i = j; break; } } } } /* Gets track */ pstTrack = pstTimeLine->astTrackList[i].pstTrack; /* Valid and not already updated? */ if((pstTrack != orxNULL) && (!orxFLAG_TEST(pstTimeLine->astTrackList[i].u32Flags, orxTIMELINE_HOLDER_KU32_FLAG_UPDATED))) { orxFLOAT fTrackLocalTime; /* Gets track local time */ fTrackLocalTime = pstTimeLine->fTime - pstTimeLine->astTrackList[i].fStartTime; /* Has time come? */ if(fTrackLocalTime >= orxFLOAT_0) { orxTIMELINE_EVENT_PAYLOAD stPayload; orxU32 u32EventIndex; /* Is the first time? */ if(!orxFLAG_TEST(pstTimeLine->astTrackList[i].u32Flags, orxTIMELINE_HOLDER_KU32_FLAG_PLAYED)) { /* Inits event payload */ orxMemory_Zero(&stPayload, sizeof(orxTIMELINE_EVENT_PAYLOAD)); stPayload.pstTimeLine = pstTimeLine; stPayload.zTrackName = pstTrack->zReference; /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_TIMELINE, orxTIMELINE_EVENT_TRACK_START, _pstCaller, _pstCaller, &stPayload); } /* Updates its status */ orxFLAG_SET(pstTimeLine->astTrackList[i].u32Flags, orxTIMELINE_HOLDER_KU32_FLAG_PLAYED | orxTIMELINE_HOLDER_KU32_FLAG_UPDATED, orxTIMELINE_HOLDER_KU32_FLAG_NONE); /* Inits event payload */ orxMemory_Zero(&stPayload, sizeof(orxTIMELINE_EVENT_PAYLOAD)); stPayload.pstTimeLine = pstTimeLine; stPayload.zTrackName = pstTrack->zReference; /* For all recently past events */ for(u32EventIndex = pstTimeLine->astTrackList[i].u32NextEventIndex; (u32EventIndex < pstTrack->u32EventCounter) && (fTrackLocalTime >= pstTrack->astEventList[u32EventIndex].fTimeStamp); u32EventIndex++) { /* Updates payload */ stPayload.zEvent = pstTrack->astEventList[u32EventIndex].zEventText; stPayload.fTimeStamp = pstTrack->astEventList[u32EventIndex].fTimeStamp; /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_TIMELINE, orxTIMELINE_EVENT_TRIGGER, _pstCaller, _pstCaller, &stPayload); } /* Is over? */ if(u32EventIndex >= pstTrack->u32EventCounter) { orxTIMELINE_TRACK *pstTrack; /* Gets track */ pstTrack = pstTimeLine->astTrackList[i].pstTrack; /* Inits event payload */ orxMemory_Zero(&stPayload, sizeof(orxTIMELINE_EVENT_PAYLOAD)); stPayload.pstTimeLine = pstTimeLine; stPayload.zTrackName = pstTrack->zReference; /* Is a looping track? */ if(orxFLAG_TEST(pstTrack->u32Flags, orxTIMELINE_TRACK_KU32_FLAG_LOOP)) { /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_TIMELINE, orxTIMELINE_EVENT_LOOP, _pstCaller, _pstCaller, &stPayload); /* Resets track */ pstTimeLine->astTrackList[i].u32NextEventIndex = 0; pstTimeLine->astTrackList[i].fStartTime = pstTimeLine->fTime; } else { /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_TIMELINE, orxTIMELINE_EVENT_TRACK_STOP, _pstCaller, _pstCaller, &stPayload); /* Removes its reference */ pstTimeLine->astTrackList[i].pstTrack = orxNULL; /* Sends event */ orxEVENT_SEND(orxEVENT_TYPE_TIMELINE, orxTIMELINE_EVENT_TRACK_REMOVE, _pstCaller, _pstCaller, &stPayload); /* Deletes it */ orxTimeLine_DeleteTrack(pstTrack); } } else { /* Updates next event index */ pstTimeLine->astTrackList[i].u32NextEventIndex = u32EventIndex; } } } } /* For all tracks */ for(i = 0; i < orxTIMELINE_KU32_TRACK_NUMBER; i++) { /* Clears its update flag */ orxFLAG_SET(pstTimeLine->astTrackList[i].u32Flags, orxTIMELINE_HOLDER_KU32_FLAG_NONE, orxTIMELINE_HOLDER_KU32_FLAG_UPDATED); } } /* Profiles */ orxPROFILER_POP_MARKER(); /* Done! */ return eResult; }
/** Deletes a clock * @param[in] _pstClock Concerned clock * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxClock_Delete(orxCLOCK *_pstClock) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstClock); /* Decreases counter */ orxStructure_DecreaseCounter(_pstClock); /* Not referenced? */ if(orxStructure_GetRefCounter(_pstClock) == 0) { /* Not locked? */ if(!orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_UPDATE_LOCK)) { orxCLOCK_TIMER_STORAGE *pstTimerStorage; /* For all stored timers */ for(pstTimerStorage = (orxCLOCK_TIMER_STORAGE *)orxLinkList_GetFirst(&(_pstClock->stTimerList)); pstTimerStorage != orxNULL; pstTimerStorage = (orxCLOCK_TIMER_STORAGE *)orxLinkList_GetFirst(&(_pstClock->stTimerList))) { /* Removes it */ orxLinkList_Remove(&(pstTimerStorage->stNode)); /* Deletes it */ orxBank_Free(sstClock.pstTimerBank, pstTimerStorage); } /* Deletes function bank */ orxBank_Delete(_pstClock->pstFunctionBank); /* Is referenced? */ if(orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_REFERENCED)) { /* Removes it from reference table */ orxHashTable_Remove(sstClock.pstReferenceTable, orxString_ToCRC(_pstClock->zReference)); } /* Has reference? */ if(_pstClock->zReference != orxNULL) { /* Unprotects it */ orxConfig_ProtectSection(_pstClock->zReference, orxFALSE); } /* Deletes clock */ orxStructure_Delete(_pstClock); } else { /* Increases counter */ orxStructure_IncreaseCounter(_pstClock); /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_CLOCK, "Can't delete clock <%s> as it's currently locked for processing!", orxStructure_TestFlags(_pstClock, orxCLOCK_KU32_FLAG_REFERENCED) ? _pstClock->zReference : orxSTRING_EMPTY); /* Updates result */ eResult = orxSTATUS_FAILURE; } } else { /* Referenced by others */ eResult = orxSTATUS_FAILURE; } /* Done! */ return eResult; }
/** Sets graphic data * @param[in] _pstGraphic Graphic concerned * @param[in] _pstData Data structure to set / orxNULL * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxGraphic_SetData(orxGRAPHIC *_pstGraphic, orxSTRUCTURE *_pstData) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Had previous data? */ if(_pstGraphic->pstData != orxNULL) { /* Updates structure reference counter */ orxStructure_DecreaseCounter(_pstGraphic->pstData); /* Internally handled? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_INTERNAL)) { /* Removes its owner */ orxStructure_SetOwner(_pstGraphic->pstData, orxNULL); /* 2D data? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D)) { /* Deletes it */ orxTexture_Delete(orxTEXTURE(_pstGraphic->pstData)); } /* Text data? */ else if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_TEXT)) { /* Deletes it */ orxText_Delete(orxTEXT(_pstGraphic->pstData)); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Non-2d (texture/text) graphics not supported yet."); /* Updates result */ eResult = orxSTATUS_FAILURE; } /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_FLAG_INTERNAL); } /* Cleans reference */ _pstGraphic->pstData = orxNULL; } /* Valid & sets new data? */ if((eResult != orxSTATUS_FAILURE) && (_pstData != orxNULL)) { /* Stores it */ _pstGraphic->pstData = _pstData; /* Updates structure reference counter */ orxStructure_IncreaseCounter(_pstData); /* Is data a texture? */ if(orxTEXTURE(_pstData) != orxNULL) { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D, orxGRAPHIC_KU32_MASK_TYPE); } /* Is data a text? */ else if(orxTEXT(_pstData) != orxNULL) { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_TEXT, orxGRAPHIC_KU32_MASK_TYPE); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Data given is not a texture nor a text."); /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_MASK_TYPE); /* Updates result */ eResult = orxSTATUS_FAILURE; } } else { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_MASK_TYPE); } /* Done! */ return eResult; }