00001 #include "core.h" 00002 00003 #include "common_vars_gui.h" 00004 #include "common_gui_funcs.h" 00005 #include "common_vars_game.h" 00006 00007 void GameCore::act_on_state() { 00008 switch(game_state) { 00009 case GSTATE_PREGAME: 00010 _make_main_menu(NULL); 00011 break; 00012 case GSTATE_GAMEOK: 00013 game_state = GSTATE_INGAME; 00014 _clear_total_menu(); 00015 _register_glutfuncs_game(); 00016 break; 00017 case GSTATE_GAMEOVER: 00018 game_state = GSTATE_PREGAME; 00019 _register_glutfuncs_menuonly(); 00020 _make_main_menu(NULL); 00021 break; 00022 default: 00023 fprintf(stderr, "unknown state %i when act_on_state() called\n", 00024 game_state); 00025 break; 00026 } 00027 } 00028 00029 GameCore::GameCore(ssgRoot* r) { 00030 sceneref = r; 00031 user = NULL; 00032 game_state = GSTATE_PREGAME; 00033 core_is_single = true; 00034 if (loc_core != NULL) { 00035 fprintf(stderr, "WTF? already a core present at %p, probably setup as local...\n", 00036 loc_core); 00037 } 00038 else { 00039 loc_core = this; 00040 } 00041 act_on_state(); 00042 } 00043 00044 00045 void GameCore::regenerate() { 00046 } 00047 00048 bool GameCore::saveGame(char* fname, bool over) { 00049 FILE* f; 00050 f = fopen(fname, "w"); 00051 if (user->save(f)) { 00052 fclose(f); 00053 return false; 00054 } 00055 else { 00056 fclose(f); 00057 } 00058 return true; 00059 } 00060 00061 bool GameCore::loadGame(char* fname) { 00062 if (user != NULL) 00063 delete user; 00064 user = new userData(fname); 00065 regenerate(); 00066 dirty_game = false; 00067 loc_player = user; 00068 game_state = GSTATE_GAMEOK; 00069 return true; 00070 } 00071 00072 00073 GameCore::~GameCore() { 00074 if (core_is_single) { 00075 fprintf(stderr, "clearing total menu\n"); 00076 _clear_total_menu(); 00077 if (overlay_menu != NULL) 00078 delete overlay_menu; 00079 fprintf(stderr, "deleted overlay\n"); 00080 overlay_menu = NULL; 00081 } 00082 }