home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / demo4 / playgamestate.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  4.2 KB  |  188 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 "demo4.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("test4.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.     return true;
  67. }
  68.  
  69. //-------------------------------------------------------------
  70.  
  71. void CPlayGameState::setLayerPositions(int ship_y)
  72. {
  73.     int mh = m_level.m_back_layer.getSizeInPixels().getY();
  74.  
  75.     int by = -(mh - (mh - ship_y) / 2 + PLAYER_START_OFFSET / 2 - m_screen.getSize().getY());
  76.  
  77.     m_level.m_back_layer.setPosition(gsCPoint(0,by));
  78.  
  79.     int fy = -(ship_y + PLAYER_START_OFFSET - m_screen.getSize().getY());
  80.  
  81.     m_level.m_front_layer.setPosition(gsCPoint(0,fy));
  82. }
  83.  
  84. //-------------------------------------------------------------
  85.  
  86. void CPlayGameState::createPlayer()
  87. {
  88.     m_scene.killAllActors();
  89.  
  90.     m_ship = new CShip;
  91.     m_scene.addActor(m_ship);
  92.  
  93.     m_ship->activate();
  94.  
  95.     gsCVector start_position((float) m_screen.getSize().getX() / 2,
  96.                              (float) m_level.m_front_layer.getSizeInPixels().getY() - PLAYER_START_OFFSET);
  97.  
  98.     m_ship->setPosition(start_position);
  99.  
  100.     setLayerPositions((int) start_position.getY());
  101.  
  102.     m_level.reset();
  103.  
  104.     m_ship->setWeapon(MISSILE_WEAPON);
  105. }
  106.  
  107. //-------------------------------------------------------------
  108.  
  109. bool CPlayGameState::update()
  110. {
  111.     if (!CGameState::update())
  112.         return false;
  113.  
  114.     gsKeyCode key = m_keyboard.getKey();
  115.  
  116.     if (key == gsKEY_ESCAPE)
  117.         return false;
  118.  
  119.     if (m_mode == CREATEPLAYER) {
  120.         createPlayer();
  121.         m_mode = PLAYERACTIVE;
  122.         }
  123.  
  124.     Controls controls;
  125.  
  126.     getControl(controls,0);
  127.  
  128.     m_screen.clear(gsCColour(gsBLACK));
  129.  
  130.     m_starfield.move(4);
  131.     m_starfield.draw();
  132.  
  133.     if (m_mode == PLAYERACTIVE)
  134.         m_level.scanForNewActors(&m_scene);
  135.  
  136.     static even = true;        //TEMP
  137.  
  138.     even = !even;
  139.  
  140.     if (even)
  141.         m_level.m_back_layer.move(gsCPoint(0,1));
  142.             
  143.     if (m_level.m_back_layer.getPosition().getY() > 0)
  144.         m_level.m_back_layer.setPosition(gsCPoint(0,0));
  145.  
  146.     m_level.m_front_layer.move(gsCPoint(0,m_yscroll));
  147.  
  148.     if (m_level.m_front_layer.getPosition().getY() > 0)
  149.         return false;
  150.  
  151.     m_scene.updateAllActors(&controls);
  152.     m_level.m_back_layer.draw();
  153.     m_scene.drawAllActors(&m_level.m_front_layer);
  154.     m_scene.checkActorCollisions();
  155.     m_scene.checkMapCollisions(&m_level.m_front_layer);
  156.     m_scene.removeDeadActors();
  157.  
  158.     m_small_font.setTextCursor(gsCPoint(2,2));
  159.     m_small_font.printString("Cursor Keys  - move");
  160.     m_small_font.setTextCursor(gsCPoint(2,12));
  161.     m_small_font.printString("Left Control - fire");
  162.     m_small_font.setTextCursor(gsCPoint(2,24));
  163.     m_small_font.printString("Escape       - exit");
  164.     
  165.     m_screen.flip();
  166.  
  167.     return true;
  168. }
  169.  
  170. //-------------------------------------------------------------
  171.  
  172. bool CPlayGameState::destroy()
  173. {
  174.     m_scene.killAllActors();
  175.     m_ship = 0;
  176.  
  177.     return true;
  178. }
  179.  
  180. //-------------------------------------------------------------
  181.  
  182. int CPlayGameState::getYScroll()
  183. {
  184.     return m_yscroll;
  185. }
  186.  
  187. //-------------------------------------------------------------
  188.