void EnemyBug::OnCreate () { // Set initial movement direction m_direction = SOUTH; // Get movement speed from config value m_movementSpeed = orxConfig_GetFloat ("MovementSpeed"); // Get direction change interval from config value m_directionChangeInterval = orxConfig_GetFloat ("DirectionChangeInterval"); }
void FFLineMoveStrategy::ReadConfiguration() { if(orxConfig_HasSection(LINE_MOVE_SECTION) == orxSTATUS_SUCCESS) { orxConfig_PushSection(LINE_MOVE_SECTION); orxVECTOR t; orxConfig_GetVector(START_POSITION_VALUE,&t); _startPosition = t; orxConfig_GetVector(FINISH_POSITION_VALUE,&t); _finishPosition = t; _speed = orxConfig_GetFloat(SPEED_MOVE_VALUE); const orxCHAR* axis = orxConfig_GetString(MOVE_AXIS_VALUE); if(orxString_Compare(axis,AXIS_X) == 0) _direction = MD_X; else if(orxString_Compare(axis,AXIS_Y) == 0) _direction = MD_Y; else if(orxString_Compare(axis,AXIS_XY) == 0) _direction = MD_XY; const orxCHAR* repeat = orxConfig_GetString(REPEAT_VALUE); if(orxString_Compare(repeat,REPEAT_TOLEFT) == 0) _repeat = RD_TOLEFT; else if(orxString_Compare(repeat,REPEAT_TORIGHT) == 0) _repeat = RD_TORIGHT; else if(orxString_Compare(repeat,REPEAT_HBOTH) == 0) { _repeat = RD_BOTH; if(_startPosition._x > _finishPosition._x) _helperDir = RD_TOLEFT; else { //orxVECTOR temp = _finishPosition; //_finishPosition =_startPosition; //_startPosition = temp; _helperDir = RD_TORIGHT; } } else if(orxString_Compare(repeat,REPEAT_TODOWN) == 0) _repeat = RD_TODOWN; else if(orxString_Compare(repeat,REPEAT_TOUP) == 0) _repeat = RD_TOUP; else if(orxString_Compare(repeat,REPEAT_VBOTH) == 0) { _repeat = RD_BOTH; if(_startPosition._y > _finishPosition._y) _helperDir = RD_TOUP; else { /*orxVECTOR temp = _finishPosition; _finishPosition =_startPosition; _startPosition = temp;*/ _helperDir = RD_TODOWN; } } } }
/** Updates trail */ static void orxFASTCALL orxBounce_UpdateTrail(const orxCLOCK_INFO *_pstClockInfo, void *_pContext) { orxU32 i; orxVECTOR vMousePos; /* Gets mouse position */ orxMouse_GetPosition(&vMousePos); /* Updates trail timer */ sfTrailTimer -= _pstClockInfo->fDT; /* Should add new segment? */ if(sfTrailTimer <= orxFLOAT_0) { /* Pushes bounce section */ orxConfig_PushSection("Bounce"); /* Resets trail timer */ sfTrailTimer = orxConfig_GetFloat("TrailTimer"); /* Adds it to the trail */ orxVector_Copy(&savTrailPointList[su32TrailIndex], &vMousePos); /* Gets its speed */ orxConfig_GetVector("TrailSpeed", &savTrailSpeedList[su32TrailIndex]); /* Pops config section */ orxConfig_PopSection(); /* Updates trail index */ su32TrailIndex = (su32TrailIndex + 1) % TRAIL_POINT_NUMBER; } else { /* Keeps last created point on pos */ orxVector_Copy(&savTrailPointList[(su32TrailIndex == 0) ? TRAIL_POINT_NUMBER - 1 : su32TrailIndex - 1], &vMousePos); } /* For all segments */ for(i = 0; i < TRAIL_POINT_NUMBER; i++) { orxVECTOR vTemp; /* Updates its position */ orxVector_Add(&savTrailPointList[i], &savTrailPointList[i], orxVector_Mulf(&vTemp, &savTrailSpeedList[i], _pstClockInfo->fDT)); } }
/** Creates a camera from config * @param[in] _zConfigID Config ID * @ return orxCAMERA / orxNULL */ orxCAMERA *orxFASTCALL orxCamera_CreateFromConfig(const orxSTRING _zConfigID) { orxCAMERA *pstResult; /* Checks */ orxASSERT(sstCamera.u32Flags & orxCAMERA_KU32_STATIC_FLAG_READY); /* Search for camera */ pstResult = orxCamera_Get(_zConfigID); /* Not already created? */ if(pstResult == orxNULL) { /* Pushes section */ if((orxConfig_HasSection(_zConfigID) != orxFALSE) && (orxConfig_PushSection(_zConfigID) != orxSTATUS_FAILURE)) { /* Creates 2D default camera */ pstResult = orxCamera_Create(orxCAMERA_KU32_FLAG_2D); /* Valid? */ if(pstResult != orxNULL) { orxVECTOR vPosition; orxFLOAT fNear, fFar, fWidth, fHeight; /* Gets frustum info */ fNear = orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_FRUSTUM_NEAR); fFar = orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_FRUSTUM_FAR); fWidth = orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_FRUSTUM_WIDTH); fHeight = orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_FRUSTUM_HEIGHT); /* Applies it */ orxCamera_SetFrustum(pstResult, fWidth, fHeight, fNear, fFar); /* Has zoom? */ if(orxConfig_HasValue(orxCAMERA_KZ_CONFIG_ZOOM) != orxFALSE) { orxFLOAT fZoom; /* Gets config zoom */ fZoom = orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_ZOOM); /* Valid? */ if(fZoom > orxFLOAT_0) { /* Applies it */ orxCamera_SetZoom(pstResult, fZoom); } } /* Has a position? */ if(orxConfig_GetVector(orxCAMERA_KZ_CONFIG_POSITION, &vPosition) != orxNULL) { /* Updates camera position */ orxCamera_SetPosition(pstResult, &vPosition); } /* Updates object rotation */ orxCamera_SetRotation(pstResult, orxMATH_KF_DEG_TO_RAD * orxConfig_GetFloat(orxCAMERA_KZ_CONFIG_ROTATION)); /* Stores its reference key */ pstResult->zReference = orxConfig_GetCurrentSection(); /* Protects it */ orxConfig_ProtectSection(pstResult->zReference, orxTRUE); /* Adds it to reference table */ orxHashTable_Add(sstCamera.pstReferenceTable, orxString_ToCRC(pstResult->zReference), pstResult); /* Updates status flags */ orxStructure_SetFlags(pstResult, orxCAMERA_KU32_FLAG_REFERENCED, orxCAMERA_KU32_FLAG_NONE); } /* Pops previous section */ orxConfig_PopSection(); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_RENDER, "Cannot find config section named (%s).", _zConfigID); /* Updates result */ pstResult = orxNULL; } } /* Done! */ return pstResult; }
void Hero::OnCreate () { // Get movement speed from config value m_movementSpeed = orxConfig_GetFloat ("MovementSpeed"); }
extern "C" void orxAndroid_PumpEvents() { int ident; int events; while ((ident=ALooper_pollAll(isInteractible() || sstAndroid.bDestroyRequested == orxTRUE ? 0 : -1, NULL, &events, NULL)) >= 0) { if(ident == LOOPER_ID_MAIN) { int8_t cmd = app_read_cmd(); if(cmd == APP_CMD_PAUSE) { LOGI("APP_CMD_PAUSE"); sstAndroid.bPaused = orxTRUE; orxEvent_SendShort(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_BACKGROUND); } if(cmd == APP_CMD_RESUME) { LOGI("APP_CMD_RESUME"); sstAndroid.bPaused = orxFALSE; orxEvent_SendShort(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_FOREGROUND); } if(cmd == APP_CMD_SURFACE_DESTROYED) { LOGI("APP_CMD_SURFACE_DESTROYED"); pthread_cond_broadcast(&sstAndroid.cond); sstAndroid.fSurfaceScale = orxFLOAT_0; orxEVENT_SEND(orxANDROID_EVENT_TYPE_SURFACE, orxANDROID_EVENT_SURFACE_DESTROYED, orxNULL, orxNULL, orxNULL); pthread_mutex_lock(&sstAndroid.mutex); if(sstAndroid.window != NULL) { ANativeWindow_release(sstAndroid.window); sstAndroid.window = NULL; } pthread_cond_broadcast(&sstAndroid.cond); pthread_mutex_unlock(&sstAndroid.mutex); } if(cmd == APP_CMD_SURFACE_CHANGED) { LOGI("APP_CMD_SURFACE_CHANGED"); orxANDROID_SURFACE_CHANGED_EVENT stSurfaceChangedEvent; stSurfaceChangedEvent.u32Width = sstAndroid.u32SurfaceWidth; stSurfaceChangedEvent.u32Height = sstAndroid.u32SurfaceHeight; sstAndroid.fSurfaceScale = orxFLOAT_0; orxEVENT_SEND(orxANDROID_EVENT_TYPE_SURFACE, orxANDROID_EVENT_SURFACE_CHANGED, orxNULL, orxNULL, &stSurfaceChangedEvent); } if(cmd == APP_CMD_SURFACE_CREATED) { LOGI("APP_CMD_SURFACE_CREATED"); pthread_mutex_lock(&sstAndroid.mutex); sstAndroid.window = sstAndroid.pendingWindow; pthread_cond_broadcast(&sstAndroid.cond); pthread_mutex_unlock(&sstAndroid.mutex); orxEVENT_SEND(orxANDROID_EVENT_TYPE_SURFACE, orxANDROID_EVENT_SURFACE_CREATED, orxNULL, orxNULL, orxNULL); } if(cmd == APP_CMD_QUIT) { LOGI("APP_CMD_QUIT"); sstAndroid.bDestroyRequested = orxTRUE; orxEvent_SendShort(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_CLOSE); } if(cmd == APP_CMD_FOCUS_GAINED) { LOGI("APP_CMD_FOCUS_GAINED"); sstAndroid.bHasFocus = orxTRUE; orxEvent_SendShort(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_FOCUS_GAINED); } if(cmd == APP_CMD_FOCUS_LOST) { LOGI("APP_CMD_FOCUS_LOST"); sstAndroid.bHasFocus = orxFALSE; orxEvent_SendShort(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_FOCUS_LOST); } } if(ident == LOOPER_ID_SENSOR) { orxEvent_SendShort(orxANDROID_EVENT_TYPE_ACCELERATE, 0); } if(ident == LOOPER_ID_KEY_EVENT) { orxANDROID_KEY_EVENT stKeyEvent; if (read(sstAndroid.pipeKeyEvent[0], &stKeyEvent, sizeof(stKeyEvent)) == sizeof(stKeyEvent)) { orxEVENT_SEND(orxANDROID_EVENT_TYPE_KEYBOARD, 0, orxNULL, orxNULL, &stKeyEvent); } else { LOGE("No data on command pipe!"); } } if(ident == LOOPER_ID_TOUCH_EVENT) { orxANDROID_TOUCH_EVENT stTouchEvent; if (read(sstAndroid.pipeTouchEvent[0], &stTouchEvent, sizeof(stTouchEvent)) == sizeof(stTouchEvent)) { orxSYSTEM_EVENT_PAYLOAD stPayload; if(sstAndroid.fSurfaceScale == orxFLOAT_0) { orxConfig_PushSection(KZ_CONFIG_ANDROID); sstAndroid.fSurfaceScale = orxConfig_GetFloat(KZ_CONFIG_SURFACE_SCALE); orxConfig_PopSection(); } /* Inits event's payload */ orxMemory_Zero(&stPayload, sizeof(orxSYSTEM_EVENT_PAYLOAD)); stPayload.stTouch.fPressure = orxFLOAT_0; stPayload.stTouch.fX = sstAndroid.fSurfaceScale * stTouchEvent.fX; stPayload.stTouch.fY = sstAndroid.fSurfaceScale * stTouchEvent.fY; stPayload.stTouch.u32ID = stTouchEvent.u32ID; switch(stTouchEvent.u32Action) { case 0: // MotionEvent.ACTION_DOWN case 5: // MotionEvent.ACTION_POINTER_DOWN orxEVENT_SEND(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_TOUCH_BEGIN, orxNULL, orxNULL, &stPayload); break; case 1: // MotionEvent.ACTION_UP case 6: // MotionEvent.ACTION_POINTER_UP orxEVENT_SEND(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_TOUCH_END, orxNULL, orxNULL, &stPayload); break; case 2: // MotionEvent.ACTION_MOVE orxEVENT_SEND(orxEVENT_TYPE_SYSTEM, orxSYSTEM_EVENT_TOUCH_MOVE, orxNULL, orxNULL, &stPayload); break; } } else { LOGE("No data on command pipe!"); } } if(ident == LOOPER_ID_JOYSTICK_EVENT) { orxANDROID_JOYSTICK_EVENT stJoystickEvent; if (read(sstAndroid.pipeJoystickEvent[0], &stJoystickEvent, sizeof(stJoystickEvent)) == sizeof(stJoystickEvent)) { orxEVENT_SEND(orxANDROID_EVENT_TYPE_JOYSTICK, 0, orxNULL, orxNULL, &stJoystickEvent); } else { LOGE("No data on command pipe!"); } } } }
/** Creates a graphic from config * @param[in] _zConfigID Config ID * @ return orxGRAPHIC / orxNULL */ orxGRAPHIC *orxFASTCALL orxGraphic_CreateFromConfig(const orxSTRING _zConfigID) { orxGRAPHIC *pstResult; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxASSERT((_zConfigID != orxNULL) && (_zConfigID != orxSTRING_EMPTY)); /* Pushes section */ if((orxConfig_HasSection(_zConfigID) != orxFALSE) && (orxConfig_PushSection(_zConfigID) != orxSTATUS_FAILURE)) { /* Creates graphic */ pstResult = orxGraphic_Create(); /* Valid? */ if(pstResult != orxNULL) { const orxSTRING zName; orxU32 u32Flags = orxGRAPHIC_KU32_FLAG_NONE; /* Gets texture name */ zName = orxConfig_GetString(orxGRAPHIC_KZ_CONFIG_TEXTURE_NAME); /* Valid? */ if((zName != orxNULL) && (zName != orxSTRING_EMPTY)) { orxTEXTURE *pstTexture; /* Creates texture */ pstTexture = orxTexture_CreateFromFile(zName); /* Valid? */ if(pstTexture != orxNULL) { /* Links it */ if(orxGraphic_SetData(pstResult, (orxSTRUCTURE *)pstTexture) != orxSTATUS_FAILURE) { orxVECTOR vTextureSize; /* Updates its owner */ orxStructure_SetOwner(pstTexture, pstResult); /* Inits default 2D flags */ u32Flags = orxGRAPHIC_KU32_FLAG_INTERNAL | orxGRAPHIC_KU32_FLAG_2D; /* Has size? */ if(orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_TEXTURE_SIZE, &vTextureSize) != orxNULL) { orxVECTOR vTextureOrigin; /* Has origin? */ if(orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_TEXTURE_ORIGIN, &vTextureOrigin) != orxNULL) { /* Stores them */ pstResult->fLeft = vTextureOrigin.fX; pstResult->fTop = vTextureOrigin.fY; pstResult->fWidth = vTextureSize.fX; pstResult->fHeight = vTextureSize.fY; } /* Has corner? */ else if(orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_TEXTURE_CORNER, &vTextureOrigin) != orxNULL) { /* Stores them */ pstResult->fLeft = vTextureOrigin.fX; pstResult->fTop = vTextureOrigin.fY; pstResult->fWidth = vTextureSize.fX; pstResult->fHeight = vTextureSize.fY; } else { /* Updates size */ orxGraphic_UpdateSize(pstResult); } } else { /* Updates size */ orxGraphic_UpdateSize(pstResult); } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Couldn't link texture (%s) data to graphic (%s).", zName, _zConfigID); /* Deletes structures */ orxTexture_Delete(pstTexture); } } } /* Still no data? */ if(pstResult->pstData == orxNULL) { /* Gets text name */ zName = orxConfig_GetString(orxGRAPHIC_KZ_CONFIG_TEXT_NAME); /* Valid? */ if((zName != orxNULL) && (zName != orxSTRING_EMPTY)) { orxTEXT *pstText; /* Creates text */ pstText = orxText_CreateFromConfig(zName); /* Valid? */ if(pstText != orxNULL) { /* Links it */ if(orxGraphic_SetData(pstResult, (orxSTRUCTURE *)pstText) != orxSTATUS_FAILURE) { /* Sets its owner */ orxStructure_SetOwner(pstText, pstResult); /* Inits default text flags */ u32Flags = orxGRAPHIC_KU32_FLAG_INTERNAL | orxGRAPHIC_KU32_FLAG_TEXT; /* Updates size */ orxGraphic_UpdateSize(pstResult); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Couldn't link text (%s) data to graphic (%s).", zName, _zConfigID); /* Deletes structures */ orxText_Delete(pstText); } } } } /* Has data? */ if(pstResult->pstData != orxNULL) { const orxSTRING zFlipping; orxVECTOR vPivot; /* Gets pivot value */ if(orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_PIVOT, &vPivot) != orxNULL) { /* Updates it */ orxGraphic_SetPivot(pstResult, &vPivot); } /* Has relative pivot point? */ else if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_PIVOT) != orxFALSE) { orxCHAR acBuffer[64]; orxSTRING zRelativePos; orxU32 u32AlignmentFlags = orxGRAPHIC_KU32_FLAG_ALIGN_CENTER; /* Gets lower case value */ acBuffer[sizeof(acBuffer) - 1] = orxCHAR_NULL; zRelativePos = orxString_LowerCase(orxString_NCopy(acBuffer, orxConfig_GetString(orxGRAPHIC_KZ_CONFIG_PIVOT), sizeof(acBuffer) - 1)); /* Left? */ if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_LEFT_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_LEFT; } /* Right? */ else if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_RIGHT_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_RIGHT; } /* Top? */ if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_TOP_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_TOP; } /* Bottom? */ else if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_BOTTOM_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_BOTTOM; } /* Truncate? */ if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_TRUNCATE_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_TRUNCATE; } /* Round? */ else if(orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_ROUND_PIVOT) != orxNULL) { /* Updates alignment flags */ u32AlignmentFlags |= orxGRAPHIC_KU32_FLAG_ALIGN_ROUND; } /* Valid? */ if((u32AlignmentFlags != orxGRAPHIC_KU32_FLAG_ALIGN_CENTER) || (orxString_SearchString(zRelativePos, orxGRAPHIC_KZ_CENTERED_PIVOT) != orxNULL)) { /* Applies it */ orxGraphic_SetRelativePivot(pstResult, u32AlignmentFlags); } } /* Gets flipping value */ zFlipping = orxConfig_GetString(orxGRAPHIC_KZ_CONFIG_FLIP); /* X flipping? */ if(orxString_ICompare(zFlipping, orxGRAPHIC_KZ_X) == 0) { /* Updates frame flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_FLIP_X; } /* Y flipping? */ else if(orxString_ICompare(zFlipping, orxGRAPHIC_KZ_Y) == 0) { /* Updates frame flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_FLIP_Y; } /* Both flipping? */ else if(orxString_ICompare(zFlipping, orxGRAPHIC_KZ_BOTH) == 0) { /* Updates frame flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_FLIP_X | orxGRAPHIC_KU32_FLAG_FLIP_Y; } /* Has color? */ if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_COLOR) != orxFALSE) { orxVECTOR vColor; /* Gets its value */ orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_COLOR, &vColor); /* Normalizes and applies it */ orxVector_Mulf(&(pstResult->stColor.vRGB), &vColor, orxCOLOR_NORMALIZER); /* Updates status */ orxStructure_SetFlags(pstResult, orxGRAPHIC_KU32_FLAG_HAS_COLOR, orxGRAPHIC_KU32_FLAG_NONE); } /* Has RGB values? */ else if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_RGB) != orxFALSE) { /* Gets its value */ orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_RGB, &(pstResult->stColor.vRGB)); /* Updates status */ orxStructure_SetFlags(pstResult, orxGRAPHIC_KU32_FLAG_HAS_COLOR, orxGRAPHIC_KU32_FLAG_NONE); } /* Has HSL values? */ else if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_HSL) != orxFALSE) { /* Gets its value */ orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_HSL, &(pstResult->stColor.vHSL)); /* Stores its RGB equivalent */ orxColor_FromHSLToRGB(&(pstResult->stColor), &(pstResult->stColor)); /* Updates status */ orxStructure_SetFlags(pstResult, orxGRAPHIC_KU32_FLAG_HAS_COLOR, orxGRAPHIC_KU32_FLAG_NONE); } /* Has HSV values? */ else if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_HSV) != orxFALSE) { /* Gets its value */ orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_HSV, &(pstResult->stColor.vHSV)); /* Stores its RGB equivalent */ orxColor_FromHSVToRGB(&(pstResult->stColor), &(pstResult->stColor)); /* Updates status */ orxStructure_SetFlags(pstResult, orxGRAPHIC_KU32_FLAG_HAS_COLOR, orxGRAPHIC_KU32_FLAG_NONE); } /* Has alpha? */ if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_ALPHA) != orxFALSE) { /* Applies it */ orxColor_SetAlpha(&(pstResult->stColor), orxConfig_GetFloat(orxGRAPHIC_KZ_CONFIG_ALPHA)); /* Updates status */ orxStructure_SetFlags(pstResult, orxGRAPHIC_KU32_FLAG_HAS_COLOR, orxGRAPHIC_KU32_FLAG_NONE); } /* Should repeat? */ if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_REPEAT) != orxFALSE) { orxVECTOR vRepeat; /* Gets its value */ orxConfig_GetVector(orxGRAPHIC_KZ_CONFIG_REPEAT, &vRepeat); /* Stores it */ orxGraphic_SetRepeat(pstResult, vRepeat.fX, vRepeat.fY); } /* Has smoothing value? */ if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_SMOOTHING) != orxFALSE) { /* Updates flags */ u32Flags |= (orxConfig_GetBool(orxGRAPHIC_KZ_CONFIG_SMOOTHING) != orxFALSE) ? orxGRAPHIC_KU32_FLAG_SMOOTHING_ON : orxGRAPHIC_KU32_FLAG_SMOOTHING_OFF; } /* Has blend mode? */ if(orxConfig_HasValue(orxGRAPHIC_KZ_CONFIG_BLEND_MODE) != orxFALSE) { const orxSTRING zBlendMode; orxDISPLAY_BLEND_MODE eBlendMode; /* Gets blend mode value */ zBlendMode = orxConfig_GetString(orxGRAPHIC_KZ_CONFIG_BLEND_MODE); eBlendMode = orxDisplay_GetBlendModeFromString(zBlendMode); /* Depending on blend mode */ switch(eBlendMode) { case orxDISPLAY_BLEND_MODE_ALPHA: { /* Updates flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_BLEND_MODE_ALPHA; break; } case orxDISPLAY_BLEND_MODE_MULTIPLY: { /* Updates flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_BLEND_MODE_MULTIPLY; break; } case orxDISPLAY_BLEND_MODE_ADD: { /* Updates flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_BLEND_MODE_ADD; break; } case orxDISPLAY_BLEND_MODE_PREMUL: { /* Updates flags */ u32Flags |= orxGRAPHIC_KU32_FLAG_BLEND_MODE_PREMUL; break; } default: { } } } else { /* Defaults to alpha */ u32Flags |= orxGRAPHIC_KU32_FLAG_BLEND_MODE_ALPHA; } /* Stores its reference key */ pstResult->zReference = orxConfig_GetCurrentSection(); /* Protects it */ orxConfig_ProtectSection(pstResult->zReference, orxTRUE); /* Updates status flags */ orxStructure_SetFlags(pstResult, u32Flags, orxGRAPHIC_KU32_FLAG_NONE); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Couldn't get text or texture for graphic (%s).", _zConfigID); /* Deletes structures */ orxGraphic_Delete(pstResult); /* Updates result */ pstResult = orxNULL; } } /* Pops previous section */ orxConfig_PopSection(); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Couldn't find config section named (%s).", _zConfigID); /* Updates result */ pstResult = orxNULL; } /* Done! */ return pstResult; }
/** Update callback */ static void orxFASTCALL orxBounce_Update(const orxCLOCK_INFO *_pstClockInfo, void *_pstContext) { orxVECTOR vMousePos; /* Profiles */ orxPROFILER_PUSH_MARKER("Bounce_Update"); if((sbRecord == orxFALSE) && (orxInput_IsActive("Record") != orxFALSE)) { /* Starts recording with default settings */ orxSound_StartRecording("orxSoundRecording.wav", orxFALSE, 0, 0); /* Updates status */ sbRecord = orxTRUE; } if(orxInput_IsActive("ToggleTrail") && (orxInput_HasNewStatus("ToggleTrail"))) { /* Toggles trail rendering */ orxConfig_PushSection("Bounce"); orxConfig_SetBool("DisplayTrail", !orxConfig_GetBool("DisplayTrail")); orxConfig_PopSection(); } if(orxInput_IsActive("ToggleProfiler") && orxInput_HasNewStatus("ToggleProfiler")) { /* Toggles profiler rendering */ orxConfig_PushSection(orxRENDER_KZ_CONFIG_SECTION); orxConfig_SetBool(orxRENDER_KZ_CONFIG_SHOW_PROFILER, !orxConfig_GetBool(orxRENDER_KZ_CONFIG_SHOW_PROFILER)); orxConfig_PopSection(); } if(orxInput_IsActive("PreviousResolution") && orxInput_HasNewStatus("PreviousResolution")) { /* Updates video mode index */ su32VideoModeIndex = (su32VideoModeIndex == 0) ? orxDisplay_GetVideoModeCounter() - 1 : su32VideoModeIndex - 1; /* Applies it */ orxBounce_ApplyCurrentVideoMode(); } else if(orxInput_IsActive("NextResolution") && orxInput_HasNewStatus("NextResolution")) { /* Updates video mode index */ su32VideoModeIndex = (su32VideoModeIndex >= orxDisplay_GetVideoModeCounter() - 1) ? 0 : su32VideoModeIndex + 1; /* Applies it */ orxBounce_ApplyCurrentVideoMode(); } if(orxInput_IsActive("ToggleFullScreen") && orxInput_HasNewStatus("ToggleFullScreen")) { /* Toggles full screen display */ orxDisplay_SetFullScreen(!orxDisplay_IsFullScreen()); } /* Pushes config section */ orxConfig_PushSection("Bounce"); /* Updates shader values */ sfShaderPhase += orxConfig_GetFloat("ShaderPhaseSpeed") * _pstClockInfo->fDT; sfShaderFrequency = orxConfig_GetFloat("ShaderMaxFrequency") * orxMath_Sin(orxConfig_GetFloat("ShaderFrequencySpeed") * _pstClockInfo->fTime); sfShaderAmplitude = orxConfig_GetFloat("ShaderMaxAmplitude") * orxMath_Sin(orxConfig_GetFloat("ShaderAmplitudeSpeed") * _pstClockInfo->fTime); /* Updates color time */ sfColorTime -= _pstClockInfo->fDT; /* Should update color */ if(sfColorTime <= orxFLOAT_0) { orxConfig_PushSection("BounceShader"); orxConfig_GetVector("color", &svColor); orxConfig_PopSection(); sfColorTime += orx2F(3.0f); } /* Gets mouse world position */ orxRender_GetWorldPosition(&vMousePos, orxNULL, orxMouse_GetPosition(&vMousePos)); /* Updates position */ vMousePos.fZ += orx2F(0.5f); /* Has ball spawner? */ if(spoBallSpawner != orxNULL) { /* Updates its position */ orxSpawner_SetPosition(spoBallSpawner, &vMousePos); } /* Spawning */ if(orxInput_IsActive("Spawn")) { /* Spawns one ball */ orxSpawner_Spawn(spoBallSpawner, 1); } /* Picking? */ else if(orxInput_IsActive("Pick")) { orxOBJECT *pstObject; /* Updates mouse position */ vMousePos.fZ -= orx2F(0.1f); /* Picks object under mouse */ pstObject = orxObject_Pick(&vMousePos, orxU32_UNDEFINED); /* Found? */ if(pstObject) { /* Adds FX */ orxObject_AddUniqueFX(pstObject, "Pick"); } } /* Pops config section */ orxConfig_PopSection(); /* Toggle shader? */ if(orxInput_IsActive("ToggleShader") && (orxInput_HasNewStatus("ToggleShader"))) { /* Toggles shader status */ sbShaderEnabled = !sbShaderEnabled; } /* Profiles */ orxPROFILER_POP_MARKER(); }
/** Creates a clock from config * @param[in] _zConfigID Config ID * @ return orxCLOCK / orxNULL */ orxCLOCK *orxFASTCALL orxClock_CreateFromConfig(const orxSTRING _zConfigID) { orxCLOCK *pstResult; /* Checks */ orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY); /* Search for clock */ pstResult = orxClock_Get(_zConfigID); /* Found? */ if(pstResult != orxNULL) { /* Increases counter */ orxStructure_IncreaseCounter(pstResult); } else { /* Pushes section */ if((orxConfig_HasSection(_zConfigID) != orxFALSE) && (orxConfig_PushSection(_zConfigID) != orxSTATUS_FAILURE)) { orxFLOAT fFrequency; /* Gets its frequency */ fFrequency = orxConfig_GetFloat(orxCLOCK_KZ_CONFIG_FREQUENCY); /* Creates clock */ pstResult = orxClock_Create((fFrequency > orxFLOAT_0) ? orxFLOAT_1 / fFrequency : orxFLOAT_0, orxCLOCK_TYPE_USER); /* Valid? */ if(pstResult != orxNULL) { /* Has a modifier? */ if(orxConfig_HasValue(orxCLOCK_KZ_CONFIG_MODIFIER_TYPE) != orxFALSE) { orxFLOAT fModifierValue; /* Gets its value */ fModifierValue = orxConfig_GetFloat(orxCLOCK_KZ_CONFIG_MODIFIER_VALUE); /* Valid? */ if(fModifierValue > orxFLOAT_0) { const orxSTRING zModifierType; orxCLOCK_MOD_TYPE eModifierType; /* Gets modifier type */ zModifierType = orxConfig_GetString(orxCLOCK_KZ_CONFIG_MODIFIER_TYPE); /* Capped? */ if(orxString_ICompare(zModifierType, orxCLOCK_KZ_MODIFIER_CAPPED) == 0) { /* Updates modifier value */ fModifierValue = orxFLOAT_1 / fModifierValue; /* Updates modifier type */ eModifierType = orxCLOCK_MOD_TYPE_MAXED; } /* Fixed? */ else if(orxString_ICompare(zModifierType, orxCLOCK_KZ_MODIFIER_FIXED) == 0) { /* Updates modifier value */ fModifierValue = orxFLOAT_1 / fModifierValue; /* Updates modifier type */ eModifierType = orxCLOCK_MOD_TYPE_FIXED; } /* Multiply? */ else if(orxString_ICompare(zModifierType, orxCLOCK_KZ_MODIFIER_MULTIPLY) == 0) { /* Updates modifier type */ eModifierType = orxCLOCK_MOD_TYPE_MULTIPLY; } /* None */ else { /* Updates modifier type */ eModifierType = orxCLOCK_MOD_TYPE_NONE; } /* Updates clock */ orxClock_SetModifier(pstResult, eModifierType, fModifierValue); } } /* Stores its reference key */ pstResult->zReference = orxConfig_GetCurrentSection(); /* Protects it */ orxConfig_ProtectSection(pstResult->zReference, orxTRUE); /* Adds it to reference table */ orxHashTable_Add(sstClock.pstReferenceTable, orxString_ToCRC(pstResult->zReference), pstResult); /* Updates status flags */ orxStructure_SetFlags(pstResult, orxCLOCK_KU32_FLAG_REFERENCED, orxCLOCK_KU32_FLAG_NONE); } /* Pops previous section */ orxConfig_PopSection(); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_RENDER, "Cannot find config section named (%s).", _zConfigID); /* Updates result */ pstResult = orxNULL; } } /* Done! */ return pstResult; }
/** Inits clock module * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxClock_Init() { orxSTATUS eResult = orxSTATUS_FAILURE; /* Not already Initialized? */ if(!(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY)) { /* Registers structure type */ eResult = orxSTRUCTURE_REGISTER(CLOCK, orxSTRUCTURE_STORAGE_TYPE_LINKLIST, orxMEMORY_TYPE_MAIN, orxCLOCK_KU32_BANK_SIZE, orxNULL); /* Successful? */ if(eResult != orxSTATUS_FAILURE) { /* Cleans control structure */ orxMemory_Zero(&sstClock, sizeof(orxCLOCK_STATIC)); /* Creates timer bank */ sstClock.pstTimerBank = orxBank_Create(orxCLOCK_KU32_TIMER_BANK_SIZE, sizeof(orxCLOCK_TIMER_STORAGE), orxBANK_KU32_FLAG_NONE, orxMEMORY_TYPE_MAIN); /* Valid? */ if(sstClock.pstTimerBank != orxNULL) { /* Creates reference table */ sstClock.pstReferenceTable = orxHashTable_Create(orxCLOCK_KU32_REFERENCE_TABLE_SIZE, orxHASHTABLE_KU32_FLAG_NONE, orxMEMORY_TYPE_MAIN); /* Valid? */ if(sstClock.pstReferenceTable != orxNULL) { orxCLOCK *pstClock; /* No mod type by default */ sstClock.eModType = orxCLOCK_MOD_TYPE_NONE; /* Gets init time */ sstClock.dTime = orxSystem_GetTime(); /* Inits Flags */ sstClock.u32Flags = orxCLOCK_KU32_STATIC_FLAG_READY; /* Gets main clock tick size */ orxConfig_PushSection(orxCLOCK_KZ_CONFIG_SECTION); sstClock.fMainClockTickSize = (orxConfig_HasValue(orxCLOCK_KZ_CONFIG_MAIN_CLOCK_FREQUENCY) && orxConfig_GetFloat(orxCLOCK_KZ_CONFIG_MAIN_CLOCK_FREQUENCY) > orxFLOAT_0) ? (orxFLOAT_1 / orxConfig_GetFloat(orxCLOCK_KZ_CONFIG_MAIN_CLOCK_FREQUENCY)) : orxFLOAT_0; orxConfig_PopSection(); /* Creates default full speed core clock */ pstClock = orxClock_Create(sstClock.fMainClockTickSize, orxCLOCK_TYPE_CORE); /* Success? */ if(pstClock != orxNULL) { /* Sets it as its own owner */ orxStructure_SetOwner(pstClock, pstClock); /* Updates result */ eResult = orxSTATUS_SUCCESS; } else { /* Updates result */ eResult = orxSTATUS_FAILURE; } } else { /* Deletes timer bank */ orxBank_Delete(sstClock.pstTimerBank); sstClock.pstTimerBank = orxNULL; /* Updates result */ eResult = orxSTATUS_FAILURE; } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_CLOCK, "Failed creating clock bank."); /* Clock bank not created */ eResult = orxSTATUS_FAILURE; } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "Failed to register link list structure."); } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_CLOCK, "Tried to initialize clock module when it was already initialized."); /* Already initialized */ eResult = orxSTATUS_SUCCESS; } /* Done! */ return eResult; }