home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / demo5 / playgamestate.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  4.2 KB  |  190 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CPlayGameState
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CGameState
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "demo5.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CPlayGameState *CPlayGameState::m_instance = 0;
  20.  
  21. int CPlayGameState::m_yscroll = 1;
  22.  
  23. //-------------------------------------------------------------
  24.  
  25. CPlayGameState::CPlayGameState()
  26. {
  27.     m_ship = 0;
  28. }
  29.  
  30. //-------------------------------------------------------------
  31.  
  32. CPlayGameState::~CPlayGameState()
  33. {
  34. }
  35.  
  36. //-------------------------------------------------------------
  37.  
  38. CGameState *CPlayGameState::instance()
  39. {
  40.     if (!m_instance)
  41.         m_instance = new CPlayGameState;
  42.  
  43.     return m_instance;
  44. }
  45.  
  46. //-------------------------------------------------------------
  47.  
  48. bool CPlayGameState::create()
  49. {
  50.     if (!m_level.load("test5.fmp",DIRECTORY_GRAPHICS)) {
  51.         gsREPORT("load level failed");
  52.         return false;
  53.         }
  54.  
  55.     m_scene.setMap(&m_level.m_front_layer);
  56.     m_scene.setCollisionListSize(m_screen.getSize(),gsCPoint(8,6));
  57.  
  58.     m_ship = 0;
  59.  
  60.     gsCPoint map_size = m_level.m_front_layer.getSizeInPixels();
  61.     gsCVector start_position = gsCVector((float) map_size.getX() / 2.f,
  62.                                          (float) (map_size.getY() - PLAYER_START_OFFSET));
  63.     
  64.     m_mode = CREATEPLAYER;
  65.  
  66.     playMusic(MUSIC_GAME);
  67.  
  68.     return true;
  69. }
  70.  
  71. //-------------------------------------------------------------
  72.  
  73. void CPlayGameState::setLayerPositions(int ship_y)
  74. {
  75.     int mh = m_level.m_back_layer.getSizeInPixels().getY();
  76.  
  77.     int by = -(mh - (mh - ship_y) / 2 + PLAYER_START_OFFSET / 2 - m_screen.getSize().getY());
  78.  
  79.     m_level.m_back_layer.setPosition(gsCPoint(0,by));
  80.  
  81.     int fy = -(ship_y + PLAYER_START_OFFSET - m_screen.getSize().getY());
  82.  
  83.     m_level.m_front_layer.setPosition(gsCPoint(0,fy));
  84. }
  85.  
  86. //-------------------------------------------------------------
  87.  
  88. void CPlayGameState::createPlayer()
  89. {
  90.     m_scene.killAllActors();
  91.  
  92.     m_ship = new CShip;
  93.     m_scene.addActor(m_ship);
  94.  
  95.     m_ship->activate();
  96.  
  97.     gsCVector start_position((float) m_screen.getSize().getX() / 2,
  98.                              (float) m_level.m_front_layer.getSizeInPixels().getY() - PLAYER_START_OFFSET);
  99.  
  100.     m_ship->setPosition(start_position);
  101.  
  102.     setLayerPositions((int) start_position.getY());
  103.  
  104.     m_level.reset();
  105.  
  106.     m_ship->setWeapon(MISSILE_WEAPON,WEAPON_BEST);
  107. }
  108.  
  109. //-------------------------------------------------------------
  110.  
  111. bool CPlayGameState::update()
  112. {
  113.     if (!CGameState::update())
  114.         return false;
  115.  
  116.     gsKeyCode key = m_keyboard.getKey();
  117.  
  118.     if (key == gsKEY_ESCAPE)
  119.         return false;
  120.  
  121.     if (m_mode == CREATEPLAYER) {
  122.         createPlayer();
  123.         m_mode = PLAYERACTIVE;
  124.         }
  125.  
  126.     Controls controls;
  127.  
  128.     getControl(controls,0);
  129.  
  130.     m_screen.clear(gsCColour(gsBLACK));
  131.  
  132.     m_starfield.move(4);
  133.     m_starfield.draw();
  134.  
  135.     if (m_mode == PLAYERACTIVE)
  136.         m_level.scanForNewActors(&m_scene);
  137.  
  138.     static even = true;        //TEMP
  139.  
  140.     even = !even;
  141.  
  142.     if (even)
  143.         m_level.m_back_layer.move(gsCPoint(0,1));
  144.             
  145.     if (m_level.m_back_layer.getPosition().getY() > 0)
  146.         m_level.m_back_layer.setPosition(gsCPoint(0,0));
  147.  
  148.     m_level.m_front_layer.move(gsCPoint(0,m_yscroll));
  149.  
  150.     if (m_level.m_front_layer.getPosition().getY() > 0)
  151.         return false;
  152.  
  153.     m_scene.updateAllActors(&controls);
  154.     m_level.m_back_layer.draw();
  155.     m_scene.drawAllActors(&m_level.m_front_layer);
  156.     m_scene.checkActorCollisions();
  157.     m_scene.checkMapCollisions(&m_level.m_front_layer);
  158.     m_scene.removeDeadActors();
  159.  
  160.     m_small_font.setTextCursor(gsCPoint(2,2));
  161.     m_small_font.printString("Cursor Keys  - move");
  162.     m_small_font.setTextCursor(gsCPoint(2,12));
  163.     m_small_font.printString("Left Control - fire");
  164.     m_small_font.setTextCursor(gsCPoint(2,24));
  165.     m_small_font.printString("Escape       - exit");
  166.  
  167.     m_screen.flip();
  168.  
  169.     return true;
  170. }
  171.  
  172. //-------------------------------------------------------------
  173.  
  174. bool CPlayGameState::destroy()
  175. {
  176.     m_scene.killAllActors();
  177.     m_ship = 0;
  178.  
  179.     return true;
  180. }
  181.  
  182. //-------------------------------------------------------------
  183.  
  184. int CPlayGameState::getYScroll()
  185. {
  186.     return m_yscroll;
  187. }
  188.  
  189. //-------------------------------------------------------------
  190.