void mps_global_advance(void) { mps_global_style++; mps_global_style %= MPS_GLOBAL_STYLES; if (mps_style == MPS_GLOBAL) { mps_update(); } }
int adjust_money(int value) { total_money += value; print_total_money(); mps_update(); update_pbar (PMONEY, total_money, 0); refresh_pbars(); /* This could be more specific */ return total_money; }
int adjust_money(int value) { total_money += value; print_total_money(); mps_update(); update_pbar(PMONEY, total_money, 0); refresh_pbars(); /* This could be more specific */ // is not triggered in fresh game or during initial setup // because there money == 0 if( (total_money < 0) && ((total_money - value) > 0) ) { ok_dial_box("warning.mes", BAD, _("You just spent all your money.")); } return total_money; }
int mps_set(int x, int y, int style) { int same_square = 0; mps_style = style; switch(style) { case MPS_MAP: case MPS_ENV: if (mps_x == x && mps_y == y) { same_square = 1; } mps_x = x; mps_y = y; break; default: mps_x = 0; mps_y = 0; } mps_update(); mps_refresh(); return same_square; }
int bulldoze_item (int x, int y) { int g, size; if (MP_TYPE(x,y) == CST_USED) { /* This is considered "improper" input. Silently ignore. */ #ifdef DEBUG fprintf(stderr," try to improperly bulldoze_item CST_USED\n"); #endif return -1; } size = MP_SIZE(x,y); g = MP_GROUP(x,y); people_pool += MP_INFO(x,y).population; if (g == GROUP_DESERT) { /* Nothing to do. */ return -1; } else if (g == GROUP_SHANTY) { remove_a_shanty(x, y); adjust_money(-GROUP_SHANTY_BUL_COST); numof_shanties--; } else if (g == GROUP_FIRE) { if (MP_INFO(x,y).int_2 >= FIRE_LENGTH) return -1; /* Can't bulldoze ? */ MP_INFO(x,y).int_2 = FIRE_LENGTH + 1; MP_TYPE(x,y) = CST_FIRE_DONE1; MP_GROUP(x,y) = GROUP_BURNT; adjust_money(-GROUP_BURNT_BUL_COST); } else { adjust_money(-main_groups[g].bul_cost); if (g == GROUP_COMMUNE) numof_communes--; if (g == GROUP_MARKET) remove_a_market (x, y); if (g == GROUP_SUBSTATION || g == GROUP_WINDMILL) remove_a_substation (x, y); if (g == GROUP_OREMINE) { int i, j; for (j = 0; j < 4; j++) for (i = 0; i < 4; i++) if (MP_INFO(x + i,y + j).ore_reserve < ORE_RESERVE / 2) do_bulldoze_area (CST_WATER, x + i, y + j); } else { /* keep compatibility for saving pre_waterwell loaded game */ if (use_waterwell) do_bulldoze_area (CST_DESERT, x, y); else do_bulldoze_area (CST_GREEN, x, y); } } /* Tell mps about it, in case its selected */ mps_update(); return size; /* No longer used... */ }
int bulldoze_item(int x, int y) { int g, size = 1; bool construction_found = false; if (!world(x, y)->is_visible()) { /* This is considered "improper" input. Silently ignore. */ #ifdef DEBUG fprintf(stderr, " try to improperly bulldoze_item CST_USED\n"); #endif return -1; } if (world(x, y)->reportingConstruction ) { construction_found = true; size = world(x, y)->reportingConstruction->constructionGroup->size; g = world(x, y)->reportingConstruction->constructionGroup->group; } else { size = 1; //all non-constructions are 1// MP_SIZE(x, y); g = world(x, y)->group; //size = main_groups[g].size; } if (g == GROUP_DESERT) { /* Nothing to do. */ return -1; } else if (g == GROUP_SHANTY) { ConstructionManager::executeRequest ( new BurnDownRequest(world(x,y)->reportingConstruction) ); adjust_money(-GROUP_SHANTY_BUL_COST); } else if (g == GROUP_FIRE) { return -1; /* Can't bulldoze ? */ } else { if (!construction_found) { adjust_money(-world(x,y)->getTileConstructionGroup()->bul_cost);} else { adjust_money(-world(x, y)->reportingConstruction->constructionGroup->bul_cost);} if (g == GROUP_OREMINE) { ConstructionManager::executeRequest ( new OreMineDeletionRequest(world(x, y)->reportingConstruction)); } else { do_bulldoze_area(x, y);} } /* Tell mps about it, in case its selected */ mps_update(); return size; /* No longer used... */ }
MainState Game::run() { SDL_Event event; running = true; Uint32 fpsTicks = SDL_GetTicks(); Uint32 lastticks = fpsTicks; Desktop* desktop = dynamic_cast<Desktop*> (gui.get()); if(!desktop) { throw std::runtime_error("Toplevel component is not a Desktop");} gui->resize(getConfig()->videoX, getConfig()->videoY); int frame = 0; while(running) { getGameView()->scroll(); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_VIDEORESIZE: initVideo(event.resize.w, event.resize.h); gui->resize(event.resize.w, event.resize.h); getConfig()->videoX = event.resize.w; getConfig()->videoY = event.resize.h; break; case SDL_KEYUP: { Event gui_event(event); if( gui_event.keysym.sym == SDLK_ESCAPE ){ getButtonPanel()->selectQueryTool(); break; } if( gui_event.keysym.sym == SDLK_b ){ getButtonPanel()->toggleBulldozeTool(); break; } /* //FIXME hack for monitoring constructionCount if( gui_event.keysym.sym == SDLK_c ){ std::cout << "ConstructionCount.size() = " << constructionCount.size() << std::endl; int i, j; for (i = 0, j = 0; i < constructionCount.size(); i++) {constructionCount[i]?j++:j;} std::cout << "for a total of " << j << " active constructions" << std::endl; break; } */ if( gui_event.keysym.sym == SDLK_p ){ static int i = 0; while(i < constructionCount.size() && !constructionCount[i]) {i++;} if (i < constructionCount.size()) { main_screen_originx = constructionCount[i]->x; main_screen_originy = constructionCount[i]->y; getGameView()->readOrigin(true); mps_set( main_screen_originx, main_screen_originy, MPS_MAP); mps_update(); mps_refresh(); i++; } else { i = 0; } break; } if( gui_event.keysym.sym == SDLK_F1 ){ helpWindow->showTopic("help"); break; } if( gui_event.keysym.sym == SDLK_F12 ){ quickSave(); break; } if( gui_event.keysym.sym == SDLK_F9 ){ quickLoad(); break; } #ifdef DEBUG if( gui_event.keysym.sym == SDLK_F5 ){ testAllHelpFiles(); break; } #endif int need_break=true; switch(gui_event.keysym.sym) { case SDLK_BACKQUOTE: getMiniMap()->mapViewChangeDisplayMode(MiniMap::NORMAL); break; case SDLK_1: getMiniMap()->mapViewChangeDisplayMode(MiniMap::STARVE); break; case SDLK_2: getMiniMap()->mapViewChangeDisplayMode(MiniMap::UB40); break; case SDLK_3: getMiniMap()->mapViewChangeDisplayMode(MiniMap::POWER); break; case SDLK_4: getMiniMap()->mapViewChangeDisplayMode(MiniMap::FIRE); break; case SDLK_5: getMiniMap()->mapViewChangeDisplayMode(MiniMap::CRICKET); break; case SDLK_6: getMiniMap()->mapViewChangeDisplayMode(MiniMap::HEALTH); break; case SDLK_7: getMiniMap()->mapViewChangeDisplayMode(MiniMap::TRAFFIC); break; case SDLK_8: getMiniMap()->mapViewChangeDisplayMode(MiniMap::POLLUTION); break; case SDLK_9: getMiniMap()->mapViewChangeDisplayMode(MiniMap::COAL); break; case SDLK_0: getMiniMap()->mapViewChangeDisplayMode(MiniMap::COMMODITIES); break; default: need_break=false; } if (need_break) break; gui->event(gui_event); break; } case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: case SDL_KEYDOWN: { Event gui_event(event); gui->event(gui_event); break; } case SDL_ACTIVEEVENT: if( event.active.gain == 1 ){ gui->resize( gui->getWidth(), gui->getHeight() ); } break; case SDL_VIDEOEXPOSE: gui->resize( gui->getWidth(), gui->getHeight() ); break; case SDL_QUIT: saveCityNG( "9_currentGameNG.scn" ); running = false; quitState = QUIT; break; default: break; } } // create update Event Uint32 ticks = SDL_GetTicks(); float elapsedTime = ((float) (ticks - lastticks)) / 1000.0; gui->event(Event(elapsedTime)); lastticks = ticks; helpWindow->update(); if(desktop->needsRedraw()) { desktop->draw(*painter); flipScreenBuffer(); } frame++; // Slow down cpu consumption in pause mode if(ticks - fpsTicks > 1000 && lincitySpeed) { #ifdef DEBUG_FPS printf("FPS: %d.\n", (frame*1000) / (ticks - fpsTicks)); #endif getEconomyGraph()->newFPS( frame ); frame = 0; fpsTicks = ticks; } else if(!lincitySpeed) { frame = 0;} /* SDL_Delay is done in execute_timestep */ execute_timestep (); } return quitState; }