33#ifndef DVD_SCENE_GRAPH_H_
34#define DVD_SCENE_GRAPH_H_
57struct SceneGraphNodeDescriptor;
106 nodesOut.insert(cend(nodesOut), cbegin(nodes), cend(nodes));
static void onNodeParentChange(Divide::SceneGraph *sceneGraph, SceneGraphNode *node)
static void onNodeAdd(Divide::SceneGraph *sceneGraph, SceneGraphNode *newNode)
static void onNodeDestroy(Divide::SceneGraph *sceneGraph, SceneGraphNode *oldNode)
static void onNodeMoved(Divide::SceneGraph *sceneGraph, const SceneGraphNode &node)
static void onNodeEvent(Divide::SceneGraph *sceneGraph, SceneGraphNode *node)
static void onNodeShaderReady(Divide::SceneGraph *sceneGraph, const SceneGraphNode &node)
static void onNodeSpatialChange(Divide::SceneGraph *sceneGraph, const SceneGraphNode &node)
Scene & parentScene() noexcept
IntersectionContainer _intersectionsCache
bool loadNodeFromXML(const ResourcePath &assetsFile, SceneGraphNode *node) const
void addToDeleteQueue(SceneGraphNode *node, size_t childIdx)
SceneGraphNode * createSceneGraphNode(PlatformContext &context, SceneGraph *sceneGraph, const SceneGraphNodeDescriptor &descriptor)
SceneGraphNode * getRoot() noexcept
eastl::fixed_vector< SceneGraphNode *, 1024, true > _nodeEventQueue
ECS::ECSEngine _ecsEngine
void onNodeMoved(const SceneGraphNode &node)
ECS::EntityManager * GetEntityManager()
SharedMutex _pendingDeletionLock
size_t getTotalNodeCount() const noexcept
const ECS::ECSEngine & GetECSEngine() const noexcept
void getNodesByType(std::initializer_list< SceneNodeType > types, vector< SceneGraphNode * > &nodesOut) const
static BoundingSphere GetBounds(const SceneGraphNode *sgn)
vector< SceneGraphNode * > _nodeList
hashMap< SceneGraphNode *, vector< size_t > > _pendingDeletion
void saveToXML(const ResourcePath &assetsFile, DELEGATE< void, std::string_view > msgCallback) const
const ECSManager & GetECSManager() const
void loadFromXML(const ResourcePath &assetsFile)
static void HandleIntersection(const IntersectionRecord &intersection)
bool frameEnded(const FrameEvent &evt) override
frameEnded is called after the buffers have been swapped
bool saveCache(ByteBuffer &outputBuffer) const
bool loadCache(ByteBuffer &inputBuffer)
const SceneGraphNode * getRoot() const noexcept
void onNodeAdd(SceneGraphNode *newNode)
void onNodeSpatialChange(const SceneGraphNode &node)
bool frameStarted(const FrameEvent &evt) override
ECS::ECSEngine & GetECSEngine() noexcept
bool removeNode(I64 guid)
SharedMutex _nodesByTypeLock
Mutex _nodeParentChangeLock
bool saveNodeToXML(const SceneGraphNode *node) const
void destroySceneGraphNode(SceneGraphNode *&node, bool inPlace=true)
void sceneUpdate(U64 deltaTimeUS, SceneState &sceneState)
Update all nodes. Called from "updateSceneState" from class Scene.
void checkCollisions(BoundsComponent *bComp)
const vector< SceneGraphNode * > & getNodesByType(SceneNodeType type) const
ECS::ComponentManager * GetComponentManager()
SceneGraphNode * findNode(const Str< 128 > &name, bool sceneNodeName=false) const
void onNodeDestroy(SceneGraphNode *oldNode)
void onNodeUpdated(const SceneGraphNode &node)
ECSManager & GetECSManager()
ECSManager_uptr _ecsManager
eastl::fixed_vector< SceneGraphNode *, 256, true > _nodeParentChangeQueue
void onNetworkSend(U32 frameCount)
std::array< vector< SceneGraphNode * >, to_base(SceneNodeType::COUNT)> _nodesByType
bool removeNodesByType(SceneNodeType nodeType)
bool intersect(const SGNIntersectionParams ¶ms, vector< SGNRayResult > &intersectionsOut) const
Handle console commands that start with a forward slash.
DELEGATE_STD< Ret, Args... > DELEGATE
std::lock_guard< mutex > LockGuard
eastl::fixed_vector< IntersectionRecord, 32u, true > IntersectionContainer
SceneNodeType
ToDo: Move particle emitter to components (it will make them way more dynamic) - Ionut.
std::shared_mutex SharedMutex
eastl::vector< Type > vector
hashAlg::unordered_map< K, V, HashFun, Predicate > hashMap
void efficient_clear(eastl::fixed_vector< T, nodeCount, bEnableOverflow, OverflowAllocator > &fixed_vector)
void insert_unique(eastl::vector< T, A > &target, const T &item)
constexpr auto to_base(const Type value) -> Type