home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / xenon / includes / scene.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-21  |  3.8 KB  |  165 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CScene
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    None
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #ifndef _INCLUDE_SCENE_H
  16. #define _INCLUDE_SCENE_H
  17.  
  18. #include "gamesystem.h"
  19. #include "actor.h"
  20.  
  21. //-------------------------------------------------------------
  22. // Image info for loading graphics
  23.  
  24. struct ImageInfo
  25. {
  26.     char *m_filename;            // file name
  27.     int m_tile_width;            // width of each tile
  28.     int m_tile_height;            // height of each tile
  29.     bool m_colour_key;            // if true use colour key
  30. };
  31.  
  32. //-------------------------------------------------------------
  33. // Entry in m_image_list
  34.  
  35. struct ImageEntry
  36. {
  37.     char m_filename[MAX_PATH];    // file name
  38.     gsCTiledImage m_image;        // the image itself
  39. };
  40.  
  41. //-------------------------------------------------------------
  42.  
  43. class CScene
  44. {
  45.     private:
  46.  
  47.         gsCList<CActor *> m_actor_list;
  48.         gsCList<ImageEntry *> m_image_list;
  49.         gsCCollisionList m_collision_list;
  50.         int m_frame_count;
  51.         gsCMap *m_map;
  52.  
  53.         bool m_checkpoint_active;
  54.         gsCVector m_checkpoint;
  55.  
  56.         bool m_is_warping;
  57.  
  58.         void updateActorsOfType(ActorType type,Controls *controls);
  59.         void drawActorsOfType(ActorType type,int total);
  60.  
  61.         static void actorCollisionCallback(void *object1,void *object2);
  62.  
  63.         bool m_ship_is_cloaked;
  64.  
  65.     public:
  66.         CScene();
  67.         ~CScene();
  68.  
  69.         bool loadImages();
  70.         void setCollisionListSize(const gsCPoint& pixel_size,const gsCPoint& zone_size);
  71.         void updateAllActors(Controls *controls);
  72.         void drawAllActors(gsCMap *map);
  73.         void checkActorCollisions();
  74.         void checkMapCollisions(gsCMap *map);
  75.         void killAllActors();
  76.         void removeDeadActors();
  77.         void destroyAll();
  78.         CActor *findNearestActor(ActorType type,const gsCVector& position,int dir);
  79.  
  80.         gsCTiledImage *getImage(const char *filename);
  81.         int getNumberOfImages();
  82.  
  83.         void addActor(CActor *actor);
  84.         void removeActor(CActor *actor);
  85.         
  86.         int getNumberOfActors();
  87.         CActor *getActor(int index);
  88.  
  89.         void setMap(gsCMap *map);
  90.         gsCMap *getMap();
  91.  
  92.         CShip *findShip();
  93.  
  94.         void addToCollisionList(CActor *actor,const gsCRect& rect);
  95.  
  96.         void createLabel(const gsCVector& position,const char *text);
  97.         void createLabel(const gsCVector& position,int number);
  98.         void createMapExplosion(gsCMap *map,const gsCPoint& position);
  99.  
  100.         void clearCheckpoint();
  101.         void setNextCheckpoint(const gsCVector& position);
  102.         bool hasCheckpoint();
  103.         gsCVector getCheckpoint();
  104.  
  105.         void setWarp(bool state) { m_is_warping = state; };
  106.         bool isWarping() { return m_is_warping; };
  107. };
  108.  
  109. //-------------------------------------------------------------
  110.  
  111. inline int CScene::getNumberOfActors()
  112. {
  113.     return m_actor_list.getSize();
  114. }
  115.  
  116. //-------------------------------------------------------------
  117.  
  118. inline void CScene::addActor(CActor *actor)
  119. {
  120.     actor->setScene(this);
  121.     m_actor_list.addItem(actor);
  122. }
  123.  
  124. //-------------------------------------------------------------
  125.  
  126. inline void CScene::removeActor(CActor *actor)
  127. {
  128.     actor->setScene(0);
  129.     m_actor_list.removeItem(actor);
  130. }
  131.  
  132. //-------------------------------------------------------------
  133.  
  134. inline int CScene::getNumberOfImages()
  135. {
  136.     return m_image_list.getSize();
  137. }
  138.  
  139. //-------------------------------------------------------------
  140.  
  141. inline void CScene::setCollisionListSize(const gsCPoint& pixel_size,const gsCPoint& zones)
  142. {
  143.     m_collision_list.setSize(pixel_size,zones);
  144. }
  145.  
  146. //-------------------------------------------------------------
  147.  
  148. inline void CScene::setMap(gsCMap *map)
  149. {
  150.     m_map = map;
  151. }
  152.  
  153. //-------------------------------------------------------------
  154.  
  155. inline gsCMap *CScene::getMap()
  156. {
  157.     return m_map;
  158. }
  159.  
  160. //-------------------------------------------------------------
  161.  
  162. #endif
  163.  
  164.  
  165.