Scene.h 3.0 KB

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