Scene.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. bool mEditPostFX;
  25. StringTableEntry mGameModeName;
  26. protected:
  27. static Scene * smRootScene;
  28. DECLARE_CONOBJECT(Scene);
  29. public:
  30. Scene();
  31. ~Scene();
  32. static void initPersistFields();
  33. static bool _editPostEffects(void* object, const char* index, const char* data);
  34. virtual bool onAdd();
  35. virtual void onRemove();
  36. virtual void onPostAdd();
  37. virtual void interpolateTick(F32 delta);
  38. virtual void processTick();
  39. virtual void advanceTime(F32 timeDelta);
  40. virtual void addObject(SimObject* object);
  41. virtual void removeObject(SimObject* object);
  42. void addDynamicObject(SceneObject* object);
  43. void removeDynamicObject(SceneObject* object);
  44. void dumpUtilizedAssets();
  45. StringTableEntry getOriginatingFile();
  46. StringTableEntry getLevelAsset();
  47. bool saveScene(StringTableEntry fileName);
  48. //
  49. //Networking
  50. U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream);
  51. void unpackUpdate(NetConnection *conn, BitStream *stream);
  52. //
  53. Vector<SceneObject*> getObjectsByClass(String className, bool checkSubscenes);
  54. void getUtilizedAssetsFromSceneObject(SimObject* object, Vector<StringTableEntry>* usedAssetsList);
  55. template <class T>
  56. Vector<T*> getObjectsByClass(bool checkSubscenes);
  57. static Scene *getRootScene()
  58. {
  59. if (Scene::smSceneList.empty())
  60. return nullptr;
  61. return Scene::smSceneList[0];
  62. }
  63. static Vector<Scene*> smSceneList;
  64. };
  65. template <class T>
  66. Vector<T*> Scene::getObjectsByClass(bool checkSubscenes)
  67. {
  68. Vector<T*> foundObjects;
  69. T* curObject;
  70. //first, check ourself
  71. for (U32 i = 0; i < mPermanentObjects.size(); i++)
  72. {
  73. curObject = dynamic_cast<T*>(mPermanentObjects[i]);
  74. if (curObject)
  75. foundObjects.push_back(curObject);
  76. }
  77. for (U32 i = 0; i < mDynamicObjects.size(); i++)
  78. {
  79. curObject = dynamic_cast<T*>(mDynamicObjects[i]);
  80. if (curObject)
  81. foundObjects.push_back(curObject);
  82. }
  83. if (checkSubscenes)
  84. {
  85. for (U32 i = 0; i < mSubScenes.size(); i++)
  86. {
  87. Vector<T*> appendList = mSubScenes[i]->getObjectsByClass<T>(true);
  88. for (U32 a = 0; a < appendList.size(); a++)
  89. {
  90. foundObjects.push_back(appendList[a]);
  91. }
  92. }
  93. }
  94. return foundObjects;
  95. }