home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / demo4 / scene.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  3.4 KB  |  155 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 createMapExplosion(gsCMap *map,const gsCPoint& position);
  97. };
  98.  
  99. //-------------------------------------------------------------
  100.  
  101. inline int CScene::getNumberOfActors()
  102. {
  103.     return m_actor_list.getSize();
  104. }
  105.  
  106. //-------------------------------------------------------------
  107.  
  108. inline void CScene::addActor(CActor *actor)
  109. {
  110.     actor->setScene(this);
  111.     m_actor_list.addItem(actor);
  112. }
  113.  
  114. //-------------------------------------------------------------
  115.  
  116. inline void CScene::removeActor(CActor *actor)
  117. {
  118.     actor->setScene(0);
  119.     m_actor_list.removeItem(actor);
  120. }
  121.  
  122. //-------------------------------------------------------------
  123.  
  124. inline int CScene::getNumberOfImages()
  125. {
  126.     return m_image_list.getSize();
  127. }
  128.  
  129. //-------------------------------------------------------------
  130.  
  131. inline void CScene::setCollisionListSize(const gsCPoint& pixel_size,const gsCPoint& zones)
  132. {
  133.     m_collision_list.setSize(pixel_size,zones);
  134. }
  135.  
  136. //-------------------------------------------------------------
  137.  
  138. inline void CScene::setMap(gsCMap *map)
  139. {
  140.     m_map = map;
  141. }
  142.  
  143. //-------------------------------------------------------------
  144.  
  145. inline gsCMap *CScene::getMap()
  146. {
  147.     return m_map;
  148. }
  149.  
  150. //-------------------------------------------------------------
  151.  
  152. #endif
  153.  
  154.  
  155.