void CData::LevelMetricTypeAsync( const std::string& type, const std::string name, const std::string& level, int day, int month, int year, RequestDelegate targetDelegate ) { std::string cleanName(name); std::string cleanLevel(level); CleanString(cleanName); CleanString(cleanLevel); char date[60]; sprintf_s(date,59,"%d", gPlaytomic->GameId()); std::string url(kDataLevelUrl1); url += gPlaytomic->GetGameGuid() + kDataLevelUrl2 + type + kDataLevelUrl3; url += date; url += kDataLevelUrl4 + cleanName ; url += kDataLevelUrl5 + cleanLevel ; sprintf_s(date,59,"%d%s%d%s%d", day, kDataLevelUrl7, month, kDataLevelUrl8, year); url += kDataLevelUrl6;url += date; GetDataAsync(url, targetDelegate); }
CPlaytomicResponsePtr CData::LevelMetricType( const std::string& type, const std::string name, const std::string& level, int day, int month, int year ) { std::string cleanName(name); std::string cleanLevel(level); CleanString(cleanName); CleanString(cleanLevel); char date[60]; sprintf_s(date,59,"%d", gPlaytomic->GameId()); std::string url(kDataLevelUrl1); url += gPlaytomic->GetGameGuid() + kDataLevelUrl2 + type + kDataLevelUrl3; url += date; url += kDataLevelUrl4 + cleanName ; url += kDataLevelUrl5 + cleanLevel ; sprintf_s(date,59,"%d%s%d%s%d", day, kDataLevelUrl7, month, kDataLevelUrl8, year); url += kDataLevelUrl6;url += date; return GetData(url); }
void generateLevel(const std::string &level) { cleanLevel(); Json::Value root; // will contains the root value after parsing. curLevel = new Level(level, &root); if(!loadJSONLevel(level, root)) { printf("Error parsing JSON file for level %s!\n", level.c_str()); generateLevel("worldmap"); return; // TODO: Load from a default? } Json::Value tileset = root["tileset"]; Json::Value customEntities = root["entities"]; char line[201] = ""; std::string filename = "levels/"+level+".lvl"; if(DEBUG) printf("Reading file %s\n", filename.c_str()); FILE *fp = fopen(filename.c_str(), "r"); if(!fp) { printf("ERROR: Level %s not found!\n", filename.c_str()); generateLevel("worldmap"); return; } char blockC[] = "-"; int x=0, y=0, biggestX=0, biggestY=0; Entity *ent; for(y=0; fgets(line, sizeof(line), fp); y++) { if(DEBUG) printf("Read line: %s", line); for(x=0; line[x]; x++) { if(line[x] <= 32) continue; blockC[0] = line[x]; if(!!tileset[blockC]) { if(DEBUG) printf("Spawning block(%d,%d) type(%d,%c)\n", x, y, line[x], line[x]); ent = constructEntity(tileset[blockC], x, y); posLookup[x][y] = ent; // TODO: Remove from list, ensure consistency across block movements setEntityProperties(ent, tileset[blockC]); if(x > biggestX) biggestX = x; if(y > biggestY) biggestY = y; } else { printf("Unknown Block: '%c' (%d)\n", line[x], line[x]); } } memset(line, '\0', sizeof(line)); } curLevel->w = max((biggestX+1)*BLOCK_SIZE, WIDTH); curLevel->h = max((biggestY+1)*BLOCK_SIZE, HEIGHT); char sPos[20]; for(Json::ValueIterator iter = customEntities.begin(); iter != customEntities.end(); iter++ ) { strncpy(sPos, iter.memberName(), sizeof(sPos)-1); x = atoi(strtok(sPos+1, ",")); y = atoi(strtok(NULL, ")")); if((ent = posLookup[x][y]) == NULL) { printf("Level setup error: Entity(%d,%d) not found!\n", x, y); continue; } if(DEBUG) printf("Applying Entity(%d,%d) specifics...\n", x, y); setEntityProperties(ent, *iter); } compileBackground(renderer); }
int main(int argc, char *argv[]) { static SDL_Window *window; if(initWindow(&window, &renderer, argc, argv)) return 1; initVariables(WIDTH, HEIGHT); initTextures(); initFonts(); initInput(); //initHUD(); generateLevel(FIRSTLEVEL); hud = new Hud(); /*==============*/ /* Test Stuff */ /*==============*/ /*PhysicsEntity *goomba = new PhysicsEntity(getTexture("goomba"), 500, 50); goomba->patrolling = 1; Interactable *healthUp = new Interactable(getTexture("concrete"), 800, 500); healthUp->target = ply; healthUp->action = HEALTH_UP; Interactable *scrapUp = new Interactable(getTexture("sand"), 850, 500); scrapUp->target = ply; scrapUp->action = SCRAP_UP;*/ /*=================*/ /*End of Test Stuff*/ /*=================*/ int lastFrame = curtime_u() - 1; double dt; while(!quit) { if(DEBUG) fpsCounter(); // Calculate dt int curFrame = curtime_u(); if(lastFrame > curFrame) { dt = ((1000000 - lastFrame) + curFrame) / 1000000.0; } else { dt = (curFrame - lastFrame) / 1000000.0; } if(dt > 0.05) { dt = 0.05; // Clamp dt so objects don't have collision issues } lastFrame = curFrame; // =================== // Update if(nextlevel != "") { printf("Switching to level %s\n", nextlevel.c_str()); generateLevel(nextlevel); nextlevel = ""; } TimerRun(); for(int enti=0; enti<entsC; enti++) { if(ents[enti] == NULL) continue; ents[enti]->Update(dt); if(ents[enti]->isKilled) delete ents[enti]; } // ==================== // Drawing for(int rli=0; rli<RL_MAX; rli++) { if(rli == RL_BACKGROUND) { drawBackground(renderer, dt); continue; // Done in drawBackground } Drawable** layer = renderLayers[rli]; for(int enti=0; enti<renderLayersC[rli]; enti++) { if(layer[enti] == NULL) continue; layer[enti]->Draw(dt); } } // Flip render buffer SDL_RenderPresent(renderer); // Frame limiting, not needed if we're using vsync //SDL_Delay((1000 / 66) - (curtime_u() - lastFrame)/1000); } printf("\nShutting down...\n"); cleanLevel(); // Destroy old textures for(std::map<std::string, TextureData>::iterator it = blockTDs.begin(); it != blockTDs.end(); ++it) { SDL_DestroyTexture(it->second.texture); } blockTDs.clear(); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); Mix_CloseAudio(); Mix_Quit(); IMG_Quit(); SDL_Quit(); return 0; }