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(); }
/** Loads configuration */ static orxINLINE orxSTATUS LoadConfig() { orxVIEWPORT *pstViewport; orxSTATUS eResult = orxSTATUS_FAILURE; /* Deletes our scene */ if(pstScene) { orxObject_Delete(pstScene); pstScene = orxNULL; } /* For all the viewports */ while((pstViewport = orxVIEWPORT(orxStructure_GetFirst(orxSTRUCTURE_ID_VIEWPORT))) != orxNULL) { /* Deletes it */ orxViewport_Delete(pstViewport); } /* Clears all config data */ orxConfig_Clear(); /* Loads main config and selects tutorial section */ orxConfig_Load(orxConfig_GetMainFileName()); orxConfig_SelectSection("Tutorial"); /* Is current ID valid? */ if(ss32ConfigID < orxConfig_GetListCounter("ConfigList")) { const orxSTRING zConfigFile; /* Gets config file */ zConfigFile = orxConfig_GetListString("ConfigList", ss32ConfigID); /* Can load it? */ if((eResult = orxConfig_Load(zConfigFile)) != orxSTATUS_FAILURE) { orxS32 i; /* Pushes tutorial section */ orxConfig_PushSection("Tutorial"); /* For all defined viewports */ for(i = 0; i < orxConfig_GetListCounter("ViewportList"); i++) { /* Creates it */ orxViewport_CreateFromConfig(orxConfig_GetListString("ViewportList", i)); } /* Creates our scene */ pstScene = orxObject_CreateFromConfig("Scene"); } } /* Done! */ return eResult; }
/** 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; }
/** Inits the bounce demo */ static orxSTATUS orxBounce_Init() { orxU32 i; orxSTATUS eResult; /* Loads config file and selects its section */ orxConfig_Load("Bounce.ini"); orxConfig_SelectSection("Bounce"); /* Loads input */ orxInput_Load(orxNULL); /* Creates ball spawner */ spoBallSpawner = orxSpawner_CreateFromConfig("BallSpawner"); /* Valid? */ if(spoBallSpawner != orxNULL) { orxOBJECT *pstParticleSource; orxCLOCK *pstClock; /* Creates particle source */ pstParticleSource = orxObject_CreateFromConfig("ParticleSource"); /* Valid? */ if(pstParticleSource != orxNULL) { /* Sets its parent */ orxObject_SetParent(pstParticleSource, spoBallSpawner); } /* Updates cursor */ orxMouse_ShowCursor(orxConfig_GetBool("ShowCursor")); /* Creates walls */ spstWalls = orxObject_CreateFromConfig("Walls"); /* Inits trail */ for(i = 0; i < TRAIL_POINT_NUMBER; i++) { orxMouse_GetPosition(&savTrailPointList[i]); } /* Creates all viewports */ for(i = 0; i < (orxU32)orxConfig_GetListCounter("ViewportList"); i++) { orxViewport_CreateFromConfig(orxConfig_GetListString("ViewportList", i)); } /* Gets rendering clock */ pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE); /* Registers callback */ eResult = orxClock_Register(pstClock, &orxBounce_Update, orxNULL, orxMODULE_ID_MAIN, orxCLOCK_PRIORITY_NORMAL); /* Registers update trail timer */ eResult = ((eResult != orxSTATUS_FAILURE) && (orxClock_Register(pstClock, &orxBounce_UpdateTrail, orxNULL, orxMODULE_ID_MAIN, orxCLOCK_PRIORITY_LOW) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; /* Registers event handler */ eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_PHYSICS, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_INPUT, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_SHADER, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_SOUND, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_DISPLAY, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_TIMELINE, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_RENDER, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE; } else { /* Failure */ eResult = orxSTATUS_FAILURE; } /* Done! */ return eResult; }