|
Brunot
|
Manages the heirarchical structure between Systems and Entities. More...
#include <Node.h>
Public Member Functions | |
| Node (std::unique_ptr< GameObject > gamobj) | |
| ~Node () override=default | |
| Node (const Node &other) | |
| auto | operator= (const Node &other) -> Node & |
| Node (Node &&other) noexcept=delete | |
| auto | operator= (Node &&other) noexcept -> Node &=delete |
| auto | clone () const -> std::unique_ptr< GameObject > override |
| makes a copy a GameObject even if it's held polymorphically | |
| auto | showMenu () -> void override |
| Called before update each frame, for calling ImGui editor code relevant to the gameObject. | |
| void | dragTarget () |
| auto | update (float dt) -> void override |
| called once every frame. | |
| auto | onUpdate (float dt) -> void override |
| called once every frame. | |
| auto | endWindow () -> void override |
| currently unused, but intended to but was assumed to be necessary for a proper ImGui editor | |
| auto | render () -> void override |
| called every frame after update has been called for every object. | |
| auto | onRender () -> void override |
| called every frame after update has been called for every object. | |
| auto | onEnterEngine () -> void override |
| hook that is called when a GameObject enters the Engine tree. | |
| auto | for_each (std::function< void(GameObject &)> func) -> void override |
| applies a function to every child. | |
| auto | for_each (std::function< void(const GameObject &)> func) const -> void override |
| applies a const function to every child. | |
| auto | load (Stream &stream) -> void override |
| Implementations will load the state of a GameObject from a th::Json Object. | |
| auto | save (Stream &stream) const -> void override |
| Implementations will load the state of a GameObject to a th::Json object. | |
| auto | getParent () const -> Node *override |
| auto | dragAndDrop () -> void |
| wrapper function around the drag and drop source functionality in ImGui. | |
| auto | isDescendantOf (const Node *potentialParent) const -> bool |
| helper function to determine if a node is a descendant of another node. | |
| auto | moveParent () -> void |
| Holds the ImGui functionality for moving a node to a different parent in the Engine tree. | |
| auto | addChild (std::unique_ptr< GameObject > newChild) -> bool override |
| Adds a child to a Node. | |
| auto | setShouldUpdate (const bool _shouldUpdate) -> void override |
| set whether the Node, its data, and its children should update every frame | |
| auto | setShouldRender (const bool _shouldRender) -> void override |
| set whether the Node, its data, and its children should render every frame | |
| auto | setShouldReceiveMessages (const bool _shouldReceiveMessages) -> void override |
| set whether the Node, its data, and its children should receiveMessages | |
| template<typename type> | |
| auto | GetData (gobj::Type typeId) const -> type * |
| Gets a pointer to the data held by a node. | |
| template<typename type> | |
| auto | ExtractData (gobj::Type typeId) -> std::unique_ptr< type > |
| removes the data from the node, and relenquishes ownership of it. | |
| auto | getDataAsGameObj () const -> GameObject * |
| gives a GameObject* to the data held by the node. | |
| auto | add (std::unique_ptr< Node > child) -> bool |
| Gives a node a new Child node. | |
| auto | dataType () const -> gobj::Type |
| auto | find (const std::function< bool(GameObject &)> &predicate) -> GameObject * |
| Finds a GameObject somewhere in the nodes lower (children, grandchildren, etc.) than the node. | |
| auto | findDirect (const std::function< bool(GameObject &)> &predicate) -> GameObject * |
| Finds a GameObject somewhere in the nodes direct children. | |
| auto | deRegisterRecursively () const -> void |
| Tell Messaging to remove all messages to this Node, it's data, and all of it's children, recursively (the whole tree). | |
| auto | pop () -> std::unique_ptr< Node > |
| removes this Node from it's parent, handing ownership to the caller | |
| template<typename T> | |
| auto | dataItr () -> GameObject * |
| Public Member Functions inherited from GameObject | |
| GameObject (std::string typeName, gobj::Type parentType, gobj::Type type) | |
| constructor for gameobject. | |
| virtual | ~GameObject () |
| destructor for GameObject. | |
| GameObject (const GameObject &other) | |
| Copy Constructor. | |
| auto | operator= (const GameObject &other) -> GameObject & |
| copy assignment operator | |
| GameObject (GameObject &&other) noexcept | |
| Move constructor. | |
| auto | operator= (GameObject &&other) noexcept -> GameObject & |
| Move assignment operator. | |
| virtual auto | destroy () -> void |
| Marks an GameObject to be destroyed. | |
| virtual auto | getParent () const -> GameObject * |
| Gets the parent of a GameObject. | |
| virtual auto | parentTo (GameObject *newParent) -> bool |
| Sets the GameObject as a child of another GameObject. | |
| auto | getInternalParent () const -> GameObject * |
| returns the actual owning parent of the GameObject | |
| virtual auto | getKey () const -> Key |
| Generates a unique Key that corresponds to the GameObject. | |
| auto | destroyed () const -> bool |
| auto | getUUID () const -> gobj::UUID |
| auto | isUUID (gobj::UUID compareUUID) const -> bool |
| auto | getName () const -> const std::string & |
| Gets the type of the object as a string. | |
| auto | getNickname () const -> const std::string & |
| Gets the nickname (custom, writable name) of a GameObject. | |
| void | calculateFormattedName () const |
| auto | getFormattedName () const -> const std::string & |
| combines a GameObjects Type, Nickname, and UUID into one string, for use with logging. | |
| auto | nameEquals (const std::string &compareString) const -> bool |
| check whether a GameObjects typeName is equivilent to a given string. | |
| auto | isType (gobj::Type otherType) const -> bool |
| check whether the GameObject is the same as a given type. | |
| auto | getObjectType () const -> gobj::Type |
| gets the internal type of the GameObject, as an enum | |
| auto | setNickname (const std::string &newNickname) -> void |
| sets the GameObjects nickname. | |
| auto | updates () const -> bool |
| auto | renders () const -> bool |
| auto | receivesMessages () const -> bool |
| auto | isActive () const -> bool |
| auto | setActive (const bool shouldBeActive) -> void |
| set the GameObject should update, render, and receive messages | |
Protected Member Functions | |
| auto | getChildren () const -> std::shared_ptr< std::vector< GameObject * > > override |
| gets a vector of a GameObjects public (i.e. | |
| auto | GetChildren () const |
| Protected Member Functions inherited from GameObject | |
| auto | setInternalParent (GameObject *parent) -> bool |
| sets the internal parent of a GameObject directly, avoiding abstractions provided by ParentTo(). | |
| auto | getGameObjectJson () const -> json |
| Used for serializing GameObjects. | |
| auto | setGameObjectJson (const json &stream) -> void |
| used for deserializing GameObjects | |
| auto | checkAddToSceneHook () -> void |
| Determine if the GameObject was recently added to the engine, and if it was, call onEngineEnter. | |
Private Attributes | |
| std::unique_ptr< GameObject > | data |
| ChildrenHandeler< Node > | children |
Friends | |
| auto | to_json (json &j, const Node &n) ->void |
| auto | from_json (const json &j, Node &n) ->void |
Additional Inherited Members | |
| Public Attributes inherited from GameObject | |
| friend | Entity |
| friend | Node |
| friend | ChildrenHandeler |
| friend | Engine |
Manages the heirarchical structure between Systems and Entities.
Generally these are abstracted out of sight in the engine.
A Node owns a single GameObject, which is its data , and it owns several nodes beneath it, which are its children. A node both manages the lifetime of its data and children, and updates, renders, loads, saves, and allows access to its data and children
|
explicit |
| gamobj | a unique pointer to a GameObject |
|
overridedefault |
| Node::Node | ( | const Node & | other | ) |
|
deletenoexcept |
| auto Node::add | ( | std::unique_ptr< Node > | child | ) | ->bool |
Gives a node a new Child node.
| child | a child node to add to the node |
|
nodiscardoverridevirtual |
Adds a child to a Node.
If newChild is a pointer to a Node, it adds that Node directly as a child otherwise a new Node with be created with ownership of newChild, and that will be added as a child Node
| newChild | a unique pointer to any GameObject, usually Nodes or Entities |
Reimplemented from GameObject.
|
overridevirtual |
makes a copy a GameObject even if it's held polymorphically
Implements GameObject.
|
inline |
| auto Node::dataType | ( | ) | const->gobj::Type |
| auto Node::deRegisterRecursively | ( | ) | const->void |
Tell Messaging to remove all messages to this Node, it's data, and all of it's children, recursively (the whole tree).
| auto Node::dragAndDrop | ( | ) | ->void |
wrapper function around the drag and drop source functionality in ImGui.
It will allow the node to be dragged and dropped to change its parent in the Engine tree.
| void Node::dragTarget | ( | ) |
|
inlineoverridevirtual |
currently unused, but intended to but was assumed to be necessary for a proper ImGui editor
Implements GameObject.
|
inlinenodiscard |
removes the data from the node, and relenquishes ownership of it.
| type | the type to cast the data do |
| typeId | the type id of the object, for safety |
| auto Node::find | ( | const std::function< bool(GameObject &)> & | predicate | ) | ->GameObject * |
Finds a GameObject somewhere in the nodes lower (children, grandchildren, etc.) than the node.
| predicate | a function that returns true if the GameObject it is passed is the GameObject to find. For an example of how to declare a predicate, see isSystemType in Engine::getSystem(). |
| auto Node::findDirect | ( | const std::function< bool(GameObject &)> & | predicate | ) | ->GameObject * |
Finds a GameObject somewhere in the nodes direct children.
| predicate | a function that returns true if the GameObject it is passed is the GameObject to find. For an example of how to declare a predicate, see isSystemType in Engine::getSystem(). |
|
overridevirtual |
applies a const function to every child.
applies to internal children, not public children. (this means that entities will only update their components, not their child entities)
| func | a function that takes a C reference, and does some operation using it |
Reimplemented from GameObject.
|
overridevirtual |
applies a function to every child.
applies to internal children, not public children. (this means that entities will only update their components, not their child entities)
| func | a function that takes a GameObject reference, and does some operation on it |
Reimplemented from GameObject.
|
protected |
|
overrideprotectedvirtual |
gets a vector of a GameObjects public (i.e.
Entity s Entity and Component children)
Reimplemented from GameObject.
|
inline |
Gets a pointer to the data held by a node.
| type |
| typeId |
| auto Node::getDataAsGameObj | ( | ) | const->GameObject * |
gives a GameObject* to the data held by the node.
Intended to be used when you don't need or know what type a GameObject is, or you don't care
|
override |
| auto Node::isDescendantOf | ( | const Node * | potentialParent | ) | const->bool |
helper function to determine if a node is a descendant of another node.
Used to prevent moving a node to be a child of itself or one of its children, which would cause problems in the Engine tree.
| potentialParent | the node that may be the parent of this node. if this function returns true, then potentialParent is a parent, grandparent, etc. of this node. |
|
inlineoverridevirtual |
Implementations will load the state of a GameObject from a th::Json Object.
Unimplemented in GameObject
| stream | th::Json Object |
Implements GameObject.
| auto Node::moveParent | ( | ) | ->void |
Holds the ImGui functionality for moving a node to a different parent in the Engine tree.
|
overridevirtual |
hook that is called when a GameObject enters the Engine tree.
The hook is called immedietly after a gameobject's parent is called. Functionality may not be correct if an object was removed from the engine then re-added
Reimplemented from GameObject.
|
overridevirtual |
called every frame after update has been called for every object.
Generally used for rendering an object to the screen, when applicable. Unimplemented in GameObject
Implements GameObject.
|
overridevirtual |
called once every frame.
Generally used for timers, movement, condition checks, etc. Unimplemented in GameObject
| dt | the time in seconds that has elapsed |
Implements GameObject.
| auto Node::pop | ( | ) | ->std::unique_ptr< Node > |
|
overridevirtual |
called every frame after update has been called for every object.
Generally used for rendering an object to the screen, when applicable. override to ensure proper rendering of children that may be active calls onRender for implementation by concrete classes make sure you call GameObject::Update() when overriding
Reimplemented from GameObject.
|
inlineoverridevirtual |
Implementations will load the state of a GameObject to a th::Json object.
Unimplemented in GameObject
| stream | th::Json Object |
Implements GameObject.
|
overridevirtual |
set whether the Node, its data, and its children should receiveMessages
| _shouldReceiveMessages | whether the object should receiveMessages |
Reimplemented from GameObject.
|
overridevirtual |
set whether the Node, its data, and its children should render every frame
| _shouldRender | whether the object should render |
Reimplemented from GameObject.
|
overridevirtual |
set whether the Node, its data, and its children should update every frame
| _shouldUpdate | whether the object should update |
Reimplemented from GameObject.
|
overridevirtual |
Called before update each frame, for calling ImGui editor code relevant to the gameObject.
virtual because we might need to destroy other things too, like parent node for entity Has a empty definition in GameObject, so it may be overriden, but doesn't have to be.
@TODO: add some more details here
Reimplemented from GameObject.
|
overridevirtual |
called once every frame.
Generally used for timers, movement, condition checks, etc. calls onUpdate for implementation by concrete classes. override to properly call children make sure you call GameObject::Update() when overriding
| dt | the time in seconds that has elapsed |
Reimplemented from GameObject.
|
private |
|
private |