Advertisement
Guest User

Untitled

a guest
Mar 1st, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.94 KB | None | 0 0
  1. #include "..\..\Engine\Engine\Engine.h"
  2. #include "Options.h"
  3. #include "misc.h"
  4. #include "Editor.h"
  5. #include "Animator.h"
  6. #include "ParticleEditor.h"
  7. using namespace std;
  8.  
  9. Math math;
  10. Options options;
  11. ParticleEditor ped;
  12. GameWorld* world = NULL;
  13. MapLoader* loader = NULL;
  14. Editor *editor = NULL;
  15. Animator *animator = NULL;
  16. bool console_state = false;
  17. GUI_Element* gui_test = NULL;
  18.  
  19. //////////////////// INIT //
  20. ////////////////////////////
  21.  
  22. bool game_preload()
  23. {
  24. //load game settings - ako ne uspije koriste se default vrijednosti
  25. options.log = g_engine->GetLog();
  26. options.Load();
  27. g_engine->setFullscreen(options.fullscreen);
  28. g_engine->v_sync = options.vsync;
  29. g_engine->SetScreenW(options.screen_w);
  30. g_engine->SetScreenH(options.screen_h);
  31. if(options.lockframerate==0) g_engine->framerate_lock = false;
  32. else
  33. {
  34. g_engine->framerate_lock = true;
  35. g_engine->framerate_set = options.lockframerate;
  36. }
  37. g_engine->setAppTitle("Game");
  38. g_engine->setColorDepth(32);
  39. return true;
  40. }
  41.  
  42. void Menu(std::string path)
  43. {
  44. g_engine->gui->ClearAll();
  45. XML_ParserGUI xml_parsergui;
  46. GUI_Element* tmp = xml_parsergui.BuildGUI(path);
  47. if(tmp)
  48. {
  49. g_engine->gui->AddLayout(tmp);
  50. ((GUI_Layout*)tmp)->setPosition(g_engine->GetScreenW()/2-tmp->getWidth()/2,g_engine->GetScreenH()/2-tmp->getHeight()/2);
  51. ((GUI_Layout*)tmp)->Refresh();
  52. }
  53. else
  54. {
  55. g_engine->GetLog()->Write("#ERROR#MENU: Failed to create menu \"" + path + "\"!");
  56. g_engine->gui->AddNotification("Failed to create menu \"" + path + "\"!");
  57. }
  58. loader->state = GAME;
  59. g_engine->setState(GAME);
  60. g_engine->setGameState(MENU);
  61. }
  62.  
  63. bool game_init(HWND)
  64. {
  65. g_engine->GetLog()->Write("ENGINE: Loading game assets...");
  66. g_engine->GetLog()->Save();
  67.  
  68. //GAME ASSETS
  69. if(!g_engine->LoadGameAssets("Data/game_assets.txt")) return false;
  70.  
  71. //WORLD
  72. world = new GameWorld();
  73. world->Init(g_engine->GetLog(),g_engine->audio,g_engine->texture_m,g_engine->font_m,g_engine->skeleton_m,g_engine->animation_m);
  74. world->graphics = g_engine->ar_graphics;
  75. world->input = g_engine->input->GetInputState();
  76. world->screen_w = g_engine->GetScreenW();
  77. world->screen_h = g_engine->GetScreenH();
  78. world->ms = new MapSave(g_engine->texture_m,g_engine->animation_m,g_engine->pm);
  79.  
  80. //MAP LOADER
  81. loader = new MapLoader();
  82. loader->Init(g_engine->GetLog(),new MapSave(g_engine->texture_m,g_engine->animation_m,g_engine->pm),world);
  83. loader->animations = g_engine->animation_m;
  84. loader->skeletons = g_engine->skeleton_m;
  85. loader->textures = g_engine->texture_m;
  86. loader->audio = g_engine->audio;
  87. loader->screen_w = g_engine->GetScreenW();
  88. loader->screen_h = g_engine->GetScreenH();
  89. if(!loader->MapList_Load()) return false;
  90. if(!loader->MapList_Save()) return false;
  91.  
  92. //OPTIONS
  93. options.log = g_engine->GetLog();
  94. options.gui = g_engine->gui;
  95. g_engine->audio->setVolumeSound((float)options.volume_sound/100);
  96. g_engine->audio->setVolumeStream((float)options.volume_music/100);
  97.  
  98. //EDITOR
  99. editor = new Editor(g_engine->input->GetInputState(),g_engine->gui,g_engine->font_m,(float)g_engine->GetScreenW(),(float)g_engine->GetScreenH());
  100. editor->log = g_engine->GetLog();
  101. editor->ar_graphics = g_engine->ar_graphics;
  102. editor->pm = g_engine->pm;
  103. editor->world = world;
  104. editor->loader = loader;
  105. editor->animations = g_engine->animation_m;
  106. editor->skeletons = g_engine->skeleton_m;
  107. editor->textures = g_engine->texture_m;
  108. editor->audio = g_engine->audio;
  109. if(!editor->Init()) return false;
  110.  
  111. //MODELER
  112. animator = new Animator(g_engine->input->GetInputState(),g_engine->gui,g_engine->font_m,g_engine->animation_m,g_engine->skeleton_m,(float)g_engine->GetScreenW(),(float)g_engine->GetScreenH());
  113. animator->log = g_engine->GetLog();
  114.  
  115. //particle editor
  116. ped.log = g_engine->GetLog();
  117. ped.gui = g_engine->gui;
  118. ped.pm = g_engine->pm;
  119. ped.texture_m = g_engine->texture_m;
  120. ped.screen_w = (float)g_engine->GetScreenW();
  121. ped.screen_h = (float)g_engine->GetScreenH();
  122. ParticleEmitter* pem = new ParticleEmitter();
  123. ped.pem = pem;
  124. ped.pem->x = ped.screen_w/2;
  125. ped.pem->y = ped.screen_h/2;
  126. ped.pem->e_texture = g_engine->gui->tx_default;
  127. for(int i=0;i<100;i++) ped.pem->AddParticle();
  128.  
  129. //MENU
  130. Menu("Gui/menu_main.xml");
  131.  
  132. return true;
  133. }
  134.  
  135. ////////// UPDATE //
  136. //////////////////////
  137.  
  138. void game_update()
  139. {
  140. int screen_w = g_engine->GetScreenW();
  141. int screen_h = g_engine->GetScreenH();
  142.  
  143. if(g_engine->getState()==EDITOR) editor->Update(g_engine->getRenderType(),g_engine->getDeltaFix());
  144. else if(g_engine->getState()==ANIMATOR) animator->Update();
  145. else if(g_engine->getState()==PARTICLES) ped.Update(g_engine->getDeltaFix());
  146. else if(g_engine->getState()==GAME) world->Update(g_engine->getGameState(),g_engine->getRenderType(),g_engine->getPaused(),g_engine->getDeltaFix());
  147.  
  148. //gui, hud i konzola
  149. g_engine->ar_graphics->ogl_2d.Render2D(0,0,screen_w,screen_h,1);
  150. glEnable(GL_BLEND);
  151. glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  152. if(g_engine->getState()==GAME && world->players[0]->p_player)
  153. {
  154. world->players[0]->hud->Draw(
  155. world->players[0]->p_player->energy,
  156. world->players[0]->armor,
  157. world->players[0]->player_weapon,
  158. g_engine->getDeltaFix());
  159. }
  160. g_engine->gui->DrawGUI();
  161. g_engine->gui->DrawCursor();
  162.  
  163. if(console_state)
  164. {
  165. g_engine->ar_graphics->ogl_2d.DrawTexture(
  166. g_engine->gui->tx_default->GetTexture(),
  167. 0,0,(float)screen_w,(float)screen_h,
  168. 0,0,g_engine->gui->tx_default->GetWidth(),g_engine->gui->tx_default->GetHeight(),
  169. 1,1,0,false,0xaa000000,0,0);
  170. ShowConsole();
  171. }
  172. }
  173.  
  174. void game_spriteUpdate(Sprite* b)
  175. {
  176. world->SpriteUpdate(b);
  177. }
  178.  
  179. bool B2D_SpriteCollision(Sprite* a, Sprite* b)
  180. {
  181. return world->SpriteCollision(a,b);
  182. }
  183.  
  184. void game_spriteErase(Sprite* a)
  185. {
  186. world->SpriteErase(a);
  187. }
  188.  
  189. void game_end(){}
  190.  
  191. void game_spritePostRender(Sprite *a)
  192. {
  193. if(g_engine->getState()==EDITOR || g_engine->getState()==GAME) editor->SpritePostRender(a);
  194. }
  195.  
  196. //////////////////// GUI CONTROLS //
  197. //////////////////////////////////////
  198.  
  199. void GUI_MousePress(GUI_Element* b, int bttn)
  200. {
  201. if(g_engine->getState()==ANIMATOR) {animator->GUI_MousePress(b,bttn);return;}
  202. if(g_engine->getState()==EDITOR) {editor->GUI_MousePress(b,bttn);return;}
  203. else if(g_engine->getState()==OPTIONS) {options.GUI_MousePress(b,bttn);return;}
  204. }
  205.  
  206. void GUI_MouseRelease(GUI_Element* b, int bttn)
  207. {
  208. if(g_engine->getState()==PARTICLES)
  209. {
  210. ped.GUI_MouseRelease(b,bttn);
  211. return;
  212. }
  213. else if(g_engine->getState()==ANIMATOR)
  214. {
  215. if(b->getID()=="menubarA_close") {animator->End();Menu("Gui/menu_main.xml");}
  216. else animator->GUI_MouseRelease(b,bttn);
  217. return;
  218. }
  219. else if(g_engine->getState()==EDITOR)
  220. {
  221. if(b->getID()=="menubarE_close") {editor->End();Menu("Gui/menu_main.xml");}
  222. else editor->GUI_MouseRelease(b,bttn);
  223. return;
  224. }
  225. else if(g_engine->getState()==OPTIONS)
  226. {
  227. if(b->getID()=="options_close") {options.Save();options.root = NULL;Menu("Gui/menu_main.xml");}
  228. else options.GUI_MouseRelease(b,bttn);
  229. return;
  230. }
  231. else if(g_engine->getState()==GAME)
  232. {
  233. if(g_engine->getGameState()==MENU)
  234. {
  235. //main
  236. if(b->getID()=="mm_newgame") Menu("Gui/menu_newgame.xml");
  237. else if(b->getID()=="mm_options")
  238. {
  239. g_engine->gui->ClearAll();
  240. g_engine->setState(OPTIONS);
  241. options.Menu_LoadLayout();
  242. }
  243. else if(b->getID()=="mm_quit") g_engine->Close();
  244. //new game
  245. else if(b->getID()=="mm_campaign")
  246. {
  247. g_engine->gui->ClearAll();
  248. g_engine->setState(GAME);
  249. g_engine->setGameState(PLAY);
  250. world->mapm->DeleteAll();
  251. world->mapm->mapc = -1;
  252. loader->LoadCampaign("Data/Maps/campaign.txt",1,world->mapm,g_engine->GetScreenW(),g_engine->GetScreenH());
  253. world->mapm->mapc = 0;
  254. }
  255. else if(b->getID()=="mm_custom") editor->Map_LoadButtons(loader->map_list,b->getX()+b->getWidth(),b->getY(),"load");
  256. else if(b->getID()=="map_edit")
  257. {
  258. g_engine->gui->ClearAll();
  259. g_engine->setState(GAME);
  260. g_engine->setGameState(PLAY);
  261. world->mapm->DeleteAll();
  262. world->mapm->mapc = -1;
  263. loader->LoadMap(((GUI_Button*)b)->getText(),1,world->mapm,g_engine->GetScreenW(),g_engine->GetScreenH());
  264. world->mapm->mapc = 0;
  265. }
  266. else if(b->getID()=="mm_easy") world->difficulty = 0;
  267. else if(b->getID()=="mm_normal") world->difficulty = 1;
  268. else if(b->getID()=="mm_hard") world->difficulty = 2;
  269. else if(b->getID()=="mm_back") Menu("Gui/menu_main.xml");
  270. return;
  271. }
  272. }
  273. }
  274.  
  275. void GUI_EdittextEnter(GUI_Textbox* b)
  276. {
  277. if(g_engine->getState()==PARTICLES) ped.GUI_EdittextEnter(b);
  278. else if(g_engine->getState()==ANIMATOR) animator->GUI_EdittextEnter(b);
  279. else if(g_engine->getState()==EDITOR) editor->GUI_EdittextEnter(b);
  280. else if(g_engine->getState()==OPTIONS) options.GUI_EdittextEnter(b);
  281. }
  282.  
  283. bool GUI_RenderPost(GUI_Element* b)
  284. {
  285. if(g_engine->getState()==ANIMATOR) return animator->GUI_RenderPost(b);
  286. else if(g_engine->getState()==EDITOR) return editor->GUI_RenderPost(b);
  287. return false;
  288. }
  289.  
  290. bool GUI_RenderHoverOver(GUI_Element* b)
  291. {
  292. if(g_engine->getState()==ANIMATOR) return animator->GUI_RenderHoverOver(b);
  293. else if(g_engine->getState()==EDITOR) return editor->GUI_RenderHoverOver(b);
  294. return false;
  295. }
  296.  
  297. bool GUI_RenderHoverOver2(GUI_Element* b)
  298. {
  299. if(g_engine->getState()==ANIMATOR) return animator->GUI_RenderHoverOver2(b);
  300. else if(g_engine->getState()==EDITOR) return editor->GUI_RenderHoverOver2(b);
  301. return false;
  302. }
  303.  
  304. bool GUI_RenderPress(GUI_Element* b, int key)
  305. {
  306. if(g_engine->getState()==ANIMATOR) return animator->GUI_RenderPress(b,key);
  307. else if(g_engine->getState()==EDITOR) return editor->GUI_RenderPress(b,key);
  308. return false;
  309. }
  310.  
  311. bool GUI_RenderPress2(GUI_Element* b, int key)
  312. {
  313. if(g_engine->getState()==ANIMATOR) return animator->GUI_RenderPress2(b,key);
  314. else if(g_engine->getState()==EDITOR) return editor->GUI_RenderPress2(b,key);
  315. return false;
  316. }
  317.  
  318. void GUI_Bury(GUI_Element *b)
  319. {
  320. if(g_engine->getState()==ANIMATOR) animator->GUI_Bury(b);
  321. else if(g_engine->getState()==EDITOR) editor->GUI_Bury(b);
  322. else if(g_engine->getState()==PARTICLES) ped.GUI_Bury(b);
  323. }
  324.  
  325. //////////////////// INPUT //
  326. /////////////////////////////
  327.  
  328. void SDL_KeyPress(int key)
  329. {
  330. if(g_engine->getState()==ANIMATOR) animator->KeyPress(key);
  331. else if(g_engine->getState()==EDITOR) editor->KeyPress(key);
  332. else if(g_engine->getState()==GAME) world->KeyPress(key);
  333. }
  334.  
  335. void SDL_KeyRelease(int key)
  336. {
  337. //global
  338. switch(key)
  339. {
  340. case SDLK_F10://activate particle editor
  341. if(g_engine->input->GetInputState()->getKeyState(SDLK_RCTRL))
  342. {
  343. g_engine->gui->ClearAll();
  344. world->mapm->DeleteAll();
  345. g_engine->setState(PARTICLES);
  346. ped.Begin();
  347. }
  348. break;
  349.  
  350. case SDLK_F11://activate animation editor
  351. if(g_engine->input->GetInputState()->getKeyState(SDLK_RCTRL))
  352. {
  353. g_engine->gui->ClearAll();
  354. world->mapm->DeleteAll();
  355. g_engine->setState(ANIMATOR);
  356. animator->Begin();
  357. }
  358. else g_engine->setRenderType(g_engine->getRenderType()+1);//toggle render mode
  359. break;
  360.  
  361. case SDLK_F12://activate map editor
  362. if(g_engine->input->GetInputState()->getKeyState(SDLK_RCTRL))
  363. {
  364. g_engine->gui->ClearAll();
  365. world->mapm->DeleteAll();
  366. g_engine->setState(EDITOR);
  367. loader->state = EDITOR;
  368. editor->Begin();
  369. }
  370. else console_state = !console_state;//toggle console
  371. break;
  372.  
  373. case SDLK_F9:
  374. {
  375. if(gui_test)
  376. {
  377. gui_test->setAlive(false);
  378. gui_test = NULL;
  379. }
  380.  
  381. XML_ParserGUI xml_parsergui;
  382. gui_test = xml_parsergui.BuildGUI("gui_test.xml");
  383. if(gui_test)
  384. {
  385. g_engine->gui->AddLayout(gui_test);
  386. ((GUI_Layout*)gui_test)->setPosition(0,0);
  387. ((GUI_Layout*)gui_test)->Refresh();
  388. }
  389. else g_engine->audio->Play("BLASTF1A");
  390. }
  391. break;
  392. }
  393.  
  394. if(g_engine->getState()==ANIMATOR) animator->KeyRelease(key);
  395. else if(g_engine->getState()==EDITOR)
  396. {
  397. if(key==SDLK_F7 && editor->GetSelectedSprite()) world->ToRagdoll(editor->GetSelectedSprite(),editor->map);
  398. else if(key==SDLK_PAGEUP) editor->b2d_enabled = !editor->b2d_enabled;
  399. editor->KeyRelease(key);
  400. return;
  401. }
  402. else if(g_engine->getState()==GAME)
  403. {
  404. world->KeyRelease(key);
  405. switch(key)
  406. {
  407. case SDLK_p:
  408. if(world->state_game==PLAY)
  409. world->pause = !world->pause;
  410. break;
  411.  
  412. case SDLK_ESCAPE:
  413. world->pause = false;
  414. world->bullet_time = false;
  415. g_engine->audio->StopAll();
  416. for(unsigned int i=0;i<world->players.size();i++)
  417. {
  418. if(world->players[i]->p_player) world->DeletePlayer(world->players[i]->p_player->getID());
  419. world->players[i]->active = false;
  420. }
  421. world->mapm->DeleteAll();
  422. Menu("Gui/menu_main.xml");
  423. break;
  424. }
  425. }
  426. }
  427.  
  428. //b2d
  429. //ne radi kako treba unutar klase
  430. void MouseDown(float x, float y)
  431. {
  432. if(!editor->map) return;
  433. if(editor->map->mousejoint) return;
  434.  
  435. b2Vec2 p(editor->GetCurX_ZO()*P2M,editor->GetCurY_ZO()*P2M);
  436.  
  437. // Make a small box.
  438. b2AABB aabb;
  439. b2Vec2 d;
  440. d.Set(0.001f, 0.001f);
  441. aabb.lowerBound = p - d;
  442. aabb.upperBound = p + d;
  443.  
  444. // Query the world for overlapping shapes.
  445. QueryCallback callback(p);
  446. editor->map->world->QueryAABB(&callback, aabb);
  447.  
  448. if (callback.m_fixture)
  449. {
  450. b2Body* body = callback.m_fixture->GetBody();
  451. b2MouseJointDef md;
  452. md.bodyA = editor->map->groundbody;
  453. md.bodyB = body;
  454. md.target = p;
  455. md.maxForce = 1000.0f * body->GetMass();
  456. editor->map->mousejoint = (b2MouseJoint*)editor->map->world->CreateJoint(&md);
  457. body->SetAwake(true);
  458. }
  459. }
  460.  
  461. void MouseUp()
  462. {
  463. if(!editor->map) return;
  464. if(!editor->map->mousejoint) return;
  465.  
  466. editor->map->world->DestroyJoint(editor->map->mousejoint);
  467. editor->map->mousejoint = NULL;
  468. }
  469.  
  470. void MouseMove(float x, float y)
  471. {
  472. if(!editor->map) return;
  473. if(!editor->map->mousejoint) return;
  474.  
  475. b2Vec2 p(editor->GetCurX_ZO()*P2M,editor->GetCurY_ZO()*P2M);
  476. if(editor->map->mousejoint) editor->map->mousejoint->SetTarget(p);
  477. }
  478.  
  479. void SDL_MousePress(int bttn)
  480. {
  481. if(g_engine->getState()==PARTICLES)
  482. {
  483. ped.pem->x = (float)g_engine->input->GetInputState()->mouse_x;
  484. ped.pem->y = (float)g_engine->input->GetInputState()->mouse_y;
  485. }
  486. else if(g_engine->getState()==ANIMATOR) animator->MousePress(bttn);
  487. else if(g_engine->getState()==EDITOR)
  488. {
  489. MouseDown(editor->GetCurX_ZO(),editor->GetCurY_ZO());
  490. editor->MousePress(bttn);
  491. }
  492. else if(g_engine->getState()==GAME) world->MousePress(bttn);
  493. }
  494.  
  495. void SDL_MouseRelease(int bttn)
  496. {
  497. if(g_engine->getState()==ANIMATOR) animator->MouseRelease(bttn);
  498. else if(g_engine->getState()==EDITOR)
  499. {
  500. MouseUp();
  501. editor->MouseRelease(bttn);
  502. }
  503. else if(g_engine->getState()==GAME) world->MouseRelease(bttn);
  504. }
  505.  
  506. void SDL_MouseWheel(int wheel)
  507. {
  508. if(g_engine->getState()==PARTICLES) ped.MouseWheel(wheel);
  509. else if(g_engine->getState()==ANIMATOR) animator->MouseWheel(wheel);
  510. else if(g_engine->getState()==EDITOR) editor->MouseWheel(wheel);
  511. else if(g_engine->getState()==GAME) world->MouseWheel(wheel);
  512. }
  513.  
  514. void SDL_MouseMotion(int x, int y, int delta_x, int delta_y)
  515. {
  516. MouseMove((float)x,(float)y);
  517. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement