void loadMap(std::string mapName){ bool scanMap = true; int i = 0; int c = 0; std::stringstream ss; std::vector<std::vector<std::string>> tileList; tileList.push_back(); orxConfig_push(mapName.c_str()); while(scanMap){ ss.str(""); ss << c; orxSTRING tileName = orxConfig_GetListString(ss.str().c_str(), i); if(orxString_Compare(tileName, "End") == 0){ tileList.push_back(); c++; orxSTRING firstTileName = orxConfig_GetListString(ss.str().c_str(), 0); if(orxString_Compare(firstTileName, "End") == 0){ scanMap = false; } } else{ tileList[c].push_back(tileName); } ++i; } orxConfig_pop(); }
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; } } } }
static const orxSTRING orxFASTCALL orxResource_APK_Locate(const orxSTRING _zStorage, const orxSTRING _zName, orxBOOL _bRequireExistence) { const orxSTRING zResult = orxNULL; AAsset *poAsset; /* Default storage? */ if(orxString_Compare(_zStorage, orxRESOURCE_KZ_DEFAULT_STORAGE) == 0) { /* Uses name as path */ orxString_NPrint(s_acFileLocationBuffer, orxRESOURCE_KU32_BUFFER_SIZE - 1, "%s", _zName); } else { /* Composes full name */ orxString_NPrint(s_acFileLocationBuffer, orxRESOURCE_KU32_BUFFER_SIZE - 1, "%s%c%s", _zStorage, orxCHAR_DIRECTORY_SEPARATOR_LINUX, _zName); } /* Exist? */ poAsset = AAssetManager_open(sstAndroid.poAssetManager, s_acFileLocationBuffer, AASSET_MODE_RANDOM); if(poAsset != NULL) { /* Updates result */ zResult = s_acFileLocationBuffer; AAsset_close(poAsset); } /* Done! */ return zResult; }
static orxBOOL orxFASTCALL SaveFilter(const orxSTRING _zSectionName, const orxSTRING _zKeyName, const orxSTRING _zFileName, orxBOOL _bUseEncryption) { orxBOOL bResult = orxTRUE; // Udpates result bResult = !orxString_Compare(_zSectionName, sstFontGen.zFontName) ? orxTRUE : orxFALSE; // Done! return bResult; }
FFCheckBox::FFCheckBox(FFBaseUiScene* parent, FFVector3& position, orxCHAR* name, CHECKCHANGE oncheckchange) :FFBaseControl(parent,position,name) { _OnCheckChange = oncheckchange != NULL ? oncheckchange : NULL; _state = CHB_NORMAL; _mainObject = orxObject_CreateFromConfig(CHECKBOX_SECTION); if(_mainObject) { orxObject_SetPosition(_mainObject,_position); for(orxOBJECT* obj = orxObject_GetOwnedChild(_mainObject); obj != orxNULL; obj = orxObject_GetOwnedSibling(obj)) { const orxSTRING name = orxObject_GetName(obj); if(!orxString_Compare(name,CHECKBOX_CAPTION_SECTION)) { _captionObject = obj; orxObject_SetTextString(_captionObject,_caption); } } } }
/** Gets the handle of a plugin given its name * @param[in] _zPluginName The plugin name * @return Its orxHANDLE / orxHANDLE_UNDEFINED */ orxHANDLE orxFASTCALL orxPlugin_GetHandle(const orxSTRING _zPluginName) { orxHANDLE hPluginHandle = orxHANDLE_UNDEFINED; #ifdef __orxPLUGIN_DYNAMIC__ orxPLUGIN_INFO *pstPluginInfo; /* Checks */ orxASSERT(sstPlugin.u32Flags & orxPLUGIN_KU32_STATIC_FLAG_READY); orxASSERT(_zPluginName != orxNULL); /* Search all plugin info */ for(pstPluginInfo = (orxPLUGIN_INFO *)orxBank_GetNext(sstPlugin.pstPluginBank, orxNULL); pstPluginInfo != orxNULL; pstPluginInfo = (orxPLUGIN_INFO *)orxBank_GetNext(sstPlugin.pstPluginBank, pstPluginInfo)) { /* Found? */ if(orxString_Compare(_zPluginName, pstPluginInfo->zPluginName) == 0) { /* Gets its handle */ hPluginHandle = pstPluginInfo->hPluginHandle; break; } } #else /* __orxPLUGIN_DYNAMIC__ */ /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_PLUGIN, "Ignoring function call: this version of orx has been compiled without dynamic plugin support."); #endif /* __orxPLUGIN_DYNAMIC__ */ /* Done! */ return hPluginHandle; }
/** Adds a track */ static orxINLINE orxTIMELINE_TRACK *orxTimeLine_CreateTrack(const orxSTRING _zTrackID) { orxTIMELINE_TRACK *pstResult = orxNULL; /* Pushes section */ if((orxConfig_HasSection(_zTrackID) != orxFALSE) && (orxConfig_PushSection(_zTrackID) != orxSTATUS_FAILURE)) { orxU32 u32KeyCounter; /* Gets number of keys */ u32KeyCounter = orxConfig_GetKeyCounter(); /* Valid? */ if(u32KeyCounter > 0) { orxU32 u32EventCounter = 0, i; #ifdef __orxMSVC__ orxFLOAT *afTimeList = (orxFLOAT *)alloca(u32KeyCounter * sizeof(orxFLOAT)); #else /* __orxMSVC__ */ orxFLOAT afTimeList[u32KeyCounter]; #endif /* __orxMSVC__ */ /* For all time entries */ for(i = 0; i < u32KeyCounter; i++) { /* Inits it */ afTimeList[i] = orxFLOAT_MAX; } /* For all config keys */ for(i = 0; i < u32KeyCounter; i++) { const orxSTRING zKey; orxFLOAT fTime; /* Gets it */ zKey = orxConfig_GetKey(i); /* Is a valid time stamp? */ if((orxString_ToFloat(zKey, &fTime, orxNULL) != orxSTATUS_FAILURE) && (fTime >= orxFLOAT_0)) { /* Stores it */ afTimeList[i] = fTime; /* Updates event counter */ u32EventCounter += orxConfig_GetListCounter(zKey); } else { /* Not keep in cache, immediate nor loop? */ if((orxString_Compare(orxTIMELINE_KZ_CONFIG_KEEP_IN_CACHE, zKey) != 0) && (orxString_Compare(orxTIMELINE_KZ_CONFIG_IMMEDIATE, zKey) != 0) && (orxString_Compare(orxTIMELINE_KZ_CONFIG_LOOP, zKey) != 0)) { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "TimeLine track [%s]: ignoring invalid key (%s).", _zTrackID, zKey); } } } /* Allocates track */ pstResult = (orxTIMELINE_TRACK *)orxMemory_Allocate(sizeof(orxTIMELINE_TRACK) + (u32EventCounter * sizeof(orxTIMELINE_TRACK_EVENT)), orxMEMORY_TYPE_MAIN); /* Valid? */ if(pstResult != orxNULL) { /* Stores its ID */ pstResult->u32ID = orxString_GetID(orxConfig_GetCurrentSection()); /* Adds it to reference table */ if(orxHashTable_Set(sstTimeLine.pstTrackTable, pstResult->u32ID, pstResult) != orxSTATUS_FAILURE) { orxU32 u32EventIndex, u32Flags = orxTIMELINE_TRACK_KU32_FLAG_NONE; /* For all events */ for(u32EventIndex = 0; u32EventIndex < u32EventCounter;) { const orxSTRING zKey; orxFLOAT fTime; orxU32 u32KeyIndex, u32ListCounter; /* Finds time to add next */ for(fTime = orxFLOAT_MAX, u32KeyIndex = orxU32_UNDEFINED, i = 0; i < u32KeyCounter; i++) { /* Is sooner? */ if(afTimeList[i] < fTime) { /* Stores it */ fTime = afTimeList[i]; u32KeyIndex = i; } } /* Checks */ orxASSERT(u32KeyIndex != orxU32_UNDEFINED); /* Gets corresponding key */ zKey = orxConfig_GetKey(u32KeyIndex); /* For all events */ for(i = 0, u32ListCounter = orxConfig_GetListCounter(zKey); i < u32ListCounter; i++, u32EventIndex++) { /* Checks */ orxASSERT(u32EventIndex < u32EventCounter); /* Stores event */ pstResult->astEventList[u32EventIndex].fTimeStamp = fTime; pstResult->astEventList[u32EventIndex].zEventText = orxString_Store(orxConfig_GetListString(zKey, i)); } /* Clears time entry */ afTimeList[u32KeyIndex] = orxFLOAT_MAX; } /* Stores its reference */ pstResult->zReference = orxString_GetFromID(pstResult->u32ID); /* Updates track counters */ pstResult->u32RefCounter = 1; pstResult->u32EventCounter = u32EventCounter; /* Should keep in cache? */ if(orxConfig_GetBool(orxTIMELINE_KZ_CONFIG_KEEP_IN_CACHE) != orxFALSE) { /* Increases its reference counter to keep it in cache table */ pstResult->u32RefCounter++; /* Updates flags */ u32Flags |= orxTIMELINE_TRACK_KU32_FLAG_CACHED; } /* Should loop? */ if(orxConfig_GetBool(orxTIMELINE_KZ_CONFIG_LOOP) != orxFALSE) { /* Updates flags */ u32Flags |= orxTIMELINE_TRACK_KU32_FLAG_LOOP; } /* Is immediate? */ if(orxConfig_GetBool(orxTIMELINE_KZ_CONFIG_IMMEDIATE) != orxFALSE) { /* Updates flags */ u32Flags |= orxTIMELINE_TRACK_KU32_FLAG_IMMEDIATE; } /* Stores flags */ pstResult->u32Flags = u32Flags; } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "Failed to add track to hashtable."); /* Deletes it */ orxMemory_Free(pstResult); /* Updates result */ pstResult = orxNULL; } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "Couldn't create TimeLine track [%s]: memory allocation failure.", _zTrackID); } } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "Couldn't create TimeLine track [%s]: config section is empty.", _zTrackID); } /* Pops previous section */ orxConfig_PopSection(); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_OBJECT, "Couldn't create TimeLine track [%s]: config section not found.", _zTrackID); } /* Done! */ return pstResult; }
/** Bounce event handler * @param[in] _pstEvent Sent event * @return orxSTATUS_SUCCESS if handled / orxSTATUS_FAILURE otherwise */ static orxSTATUS orxFASTCALL orxBounce_EventHandler(const orxEVENT *_pstEvent) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Profiles */ orxPROFILER_PUSH_MARKER("Bounce_EventHandler"); /* Checks */ orxASSERT((_pstEvent->eType == orxEVENT_TYPE_PHYSICS) || (_pstEvent->eType == orxEVENT_TYPE_INPUT) || (_pstEvent->eType == orxEVENT_TYPE_SHADER) || (_pstEvent->eType == orxEVENT_TYPE_SOUND) || (_pstEvent->eType == orxEVENT_TYPE_DISPLAY) || (_pstEvent->eType == orxEVENT_TYPE_TIMELINE) || (_pstEvent->eType == orxEVENT_TYPE_RENDER)); /* Depending on event type */ switch(_pstEvent->eType) { /* Input */ case orxEVENT_TYPE_INPUT: { /* Not a set selection and console not enabled? */ if((_pstEvent->eID != orxINPUT_EVENT_SELECT_SET) && (orxConsole_IsEnabled() == orxFALSE)) { orxINPUT_EVENT_PAYLOAD *pstPayload; /* Gets event payload */ pstPayload = (orxINPUT_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Has a multi-input info? */ if(pstPayload->aeType[1] != orxINPUT_TYPE_NONE) { /* Logs info */ orxLOG("[%s::%s] is %s (%s/v=%g + %s/v=%g)", pstPayload->zSetName, pstPayload->zInputName, (_pstEvent->eID == orxINPUT_EVENT_ON) ? "ON " : "OFF", orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0], pstPayload->aeMode[0]), pstPayload->afValue[0], orxInput_GetBindingName(pstPayload->aeType[1], pstPayload->aeID[1], pstPayload->aeMode[1]), pstPayload->afValue[1]); } else { /* Logs info */ orxLOG("[%s::%s] is %s (%s/v=%g)", pstPayload->zSetName, pstPayload->zInputName, (_pstEvent->eID == orxINPUT_EVENT_ON) ? "ON " : "OFF", orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0], pstPayload->aeMode[0]), pstPayload->afValue[0]); } } break; } /* Physics */ case orxEVENT_TYPE_PHYSICS: { /* Colliding? */ if(_pstEvent->eID == orxPHYSICS_EVENT_CONTACT_ADD) { /* Adds bump FX on both objects */ orxObject_AddUniqueFX(orxOBJECT(_pstEvent->hSender), "Bump"); orxObject_AddUniqueFX(orxOBJECT(_pstEvent->hRecipient), "Bump"); } break; } /* Shader */ case orxEVENT_TYPE_SHADER: { orxSHADER_EVENT_PAYLOAD *pstPayload; /* Profiles */ orxPROFILER_PUSH_MARKER("Bounce_EventHandler_Shader"); /* Checks */ orxASSERT(_pstEvent->eID == orxSHADER_EVENT_SET_PARAM); /* Gets its payload */ pstPayload = (orxSHADER_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Enabled? */ if(!orxString_Compare(pstPayload->zParamName, "enabled")) { /* Updates its value */ pstPayload->fValue = (sbShaderEnabled != orxFALSE) ? orxFLOAT_1 : orxFLOAT_0; } /* Phase? */ else if(!orxString_Compare(pstPayload->zParamName, "phase")) { /* Updates its value */ pstPayload->fValue = sfShaderPhase; } else if(!orxString_Compare(pstPayload->zParamName, "color")) { orxVector_Copy(&pstPayload->vValue, &svColor); } /* Frequency? */ else if(!orxString_Compare(pstPayload->zParamName, "frequency")) { /* Updates its value */ pstPayload->fValue = sfShaderFrequency; } /* Amplitude? */ else if(!orxString_Compare(pstPayload->zParamName, "amplitude")) { /* Updates its value */ pstPayload->fValue = sfShaderAmplitude; } /* Profiles */ orxPROFILER_POP_MARKER(); break; } /* Sound */ case orxEVENT_TYPE_SOUND: { /* Recording packet? */ if(_pstEvent->eID == orxSOUND_EVENT_RECORDING_PACKET) { orxSOUND_EVENT_PAYLOAD *pstPayload; /* Gets event payload */ pstPayload = (orxSOUND_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Is recording input active? */ if(orxInput_IsActive("Record") != orxFALSE) { orxU32 i; /* For all samples */ for(i = 0; i < pstPayload->stStream.stPacket.u32SampleNumber / 2; i++) { /* Shorten the packets by half */ pstPayload->stStream.stPacket.as16SampleList[i] = pstPayload->stStream.stPacket.as16SampleList[i * 2]; } /* Updates sample number */ pstPayload->stStream.stPacket.u32SampleNumber = pstPayload->stStream.stPacket.u32SampleNumber / 2; /* Asks for writing it */ pstPayload->stStream.stPacket.bDiscard = orxFALSE; } else { /* Asks for not writing it */ pstPayload->stStream.stPacket.bDiscard = orxTRUE; } } break; } /* Display */ case orxEVENT_TYPE_DISPLAY: { /* New video mode? */ if(_pstEvent->eID == orxDISPLAY_EVENT_SET_VIDEO_MODE) { orxDISPLAY_EVENT_PAYLOAD *pstPayload; orxCHAR acBuffer[1024]; /* Gets payload */ pstPayload = (orxDISPLAY_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Updates title string */ orxConfig_PushSection("Bounce"); orxString_NPrint(acBuffer, sizeof(acBuffer) - 1, "%s (%dx%d)", orxConfig_GetString("Title"), pstPayload->stVideoMode.u32Width, pstPayload->stVideoMode.u32Height); acBuffer[sizeof(acBuffer) - 1] = orxCHAR_NULL; orxConfig_PopSection(); /* Updates display module config content */ orxConfig_PushSection(orxDISPLAY_KZ_CONFIG_SECTION); orxConfig_SetString(orxDISPLAY_KZ_CONFIG_TITLE, acBuffer); orxConfig_PopSection(); /* Updates window */ orxDisplay_SetVideoMode(orxNULL); } break; } /* TimeLine */ case orxEVENT_TYPE_TIMELINE: { /* New event triggered? */ if(_pstEvent->eID == orxTIMELINE_EVENT_TRIGGER) { orxTIMELINE_EVENT_PAYLOAD *pstPayload; /* Gets event payload */ pstPayload = (orxTIMELINE_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Logs info */ orxLOG("[%s::%s::%s] has been triggered", orxObject_GetName(orxOBJECT(_pstEvent->hSender)), pstPayload->zTrackName, pstPayload->zEvent); } break; } /* Render */ case orxEVENT_TYPE_RENDER: { /* Object start? */ if(_pstEvent->eID == orxRENDER_EVENT_OBJECT_START) { /* Is walls? */ if(orxOBJECT(_pstEvent->hSender) == spstWalls) { /* Pushes config section */ orxConfig_PushSection("Bounce"); /* Should display trail */ if(orxConfig_GetBool("DisplayTrail")) { /* Draws trail */ orxBounce_DisplayTrail(orxTexture_GetBitmap(orxTEXTURE(orxGraphic_GetData(orxOBJECT_GET_STRUCTURE(orxOBJECT(_pstEvent->hSender), GRAPHIC))))); } /* Pops config section */ orxConfig_PopSection(); /* Updates result */ eResult = orxSTATUS_FAILURE; } } break; } default: { break; } } /* Profiles */ orxPROFILER_POP_MARKER(); /* Done! */ return eResult; }