Scene.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #pragma once
  2. #include "console/engineAPI.h"
  3. #ifndef _NETOBJECT_H_
  4. #include "sim/netObject.h"
  5. #endif
  6. #ifndef _ITICKABLE_H_
  7. #include "core/iTickable.h"
  8. #endif
  9. #include "scene/sceneObject.h"
  10. /// Scene
  11. /// This object is effectively a smart container to hold and manage any relevent scene objects and data
  12. /// used to run things.
  13. class Scene : public NetObject, public virtual ITickable
  14. {
  15. typedef NetObject Parent;
  16. bool mIsSubScene;
  17. Scene* mParentScene;
  18. Vector<Scene*> mSubScenes;
  19. Vector<SceneObject*> mPermanentObjects;
  20. Vector<SceneObject*> mDynamicObjects;
  21. S32 mSceneId;
  22. bool mIsEditing;
  23. bool mIsDirty;
  24. StringTableEntry mGameModeName;
  25. protected:
  26. static Scene * smRootScene;
  27. DECLARE_CONOBJECT(Scene);
  28. public:
  29. Scene();
  30. ~Scene();
  31. static void initPersistFields();
  32. virtual bool onAdd();
  33. virtual void onRemove();
  34. virtual void onPostAdd();
  35. virtual void interpolateTick(F32 delta);
  36. virtual void processTick();
  37. virtual void advanceTime(F32 timeDelta);
  38. virtual void addObject(SimObject* object);
  39. virtual void removeObject(SimObject* object);
  40. void addDynamicObject(SceneObject* object);
  41. void removeDynamicObject(SceneObject* object);
  42. //
  43. //Networking
  44. U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream);
  45. void unpackUpdate(NetConnection *conn, BitStream *stream);
  46. //
  47. Vector<SceneObject*> getObjectsByClass(String className, bool checkSubscenes);
  48. template <class T>
  49. Vector<T*> getObjectsByClass(bool checkSubscenes);
  50. static Scene *getRootScene()
  51. {
  52. if (Scene::smSceneList.empty())
  53. return nullptr;
  54. return Scene::smSceneList[0];
  55. }
  56. static Vector<Scene*> smSceneList;
  57. };
  58. template <class T>
  59. Vector<T*> Scene::getObjectsByClass(bool checkSubscenes)
  60. {
  61. Vector<T*> foundObjects;
  62. T* curObject;
  63. //first, check ourself
  64. for (U32 i = 0; i < mPermanentObjects.size(); i++)
  65. {
  66. curObject = dynamic_cast<T*>(mPermanentObjects[i]);
  67. if (curObject)
  68. foundObjects.push_back(curObject);
  69. }
  70. for (U32 i = 0; i < mDynamicObjects.size(); i++)
  71. {
  72. curObject = dynamic_cast<T*>(mDynamicObjects[i]);
  73. if (curObject)
  74. foundObjects.push_back(curObject);
  75. }
  76. if (checkSubscenes)
  77. {
  78. for (U32 i = 0; i < mSubScenes.size(); i++)
  79. {
  80. Vector<T*> appendList = mSubScenes[i]->getObjectsByClass<T>(true);
  81. for (U32 a = 0; a < appendList.size(); a++)
  82. {
  83. foundObjects.push_back(appendList[a]);
  84. }
  85. }
  86. }
  87. return foundObjects;
  88. }