Brunot
Loading...
Searching...
No Matches
Node Class Referencefinal

Manages the heirarchical structure between Systems and Entities. More...

#include <Node.h>

Inheritance diagram for Node:
[legend]
Collaboration diagram for Node:
[legend]

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< GameObjectdata
ChildrenHandeler< Nodechildren

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

Detailed Description

Manages the heirarchical structure between Systems and Entities.

Generally these are abstracted out of sight in the engine.

Authors
Aidan Hartman (aidan.nosp@m..har.nosp@m.tman@.nosp@m.digi.nosp@m.pen.e.nosp@m.du) Pair programming with Bryley
Bryley Elder (bryle.nosp@m.y.el.nosp@m.der@d.nosp@m.igip.nosp@m.en.ed.nosp@m.u) Pair programming with Aidan
Marcelo Escamilla (marce.nosp@m.lo.e.nosp@m.scami.nosp@m.lla@.nosp@m.digip.nosp@m.en.e.nosp@m.du) JSON serialization
Date
2025 / 09 / 16

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

Constructor & Destructor Documentation

◆ Node() [1/3]

Node::Node ( std::unique_ptr< GameObject > gamobj)
explicit
Parameters
gamobja unique pointer to a GameObject
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~Node()

Node::~Node ( )
overridedefault
Here is the call graph for this function:

◆ Node() [2/3]

Node::Node ( const Node & other)
Here is the call graph for this function:

◆ Node() [3/3]

Node::Node ( Node && other)
deletenoexcept
Here is the call graph for this function:

Member Function Documentation

◆ add()

auto Node::add ( std::unique_ptr< Node > child) ->bool

Gives a node a new Child node.

Parameters
childa child node to add to the node
Here is the call graph for this function:
Here is the caller graph for this function:

◆ addChild()

auto Node::addChild ( std::unique_ptr< GameObject > newChild) ->bool
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

Parameters
newChilda unique pointer to any GameObject, usually Nodes or Entities
Returns
true if addChild succeeded, false if it failed.

Reimplemented from GameObject.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ clone()

auto Node::clone ( ) const->std::unique_ptr< GameObject >
overridevirtual

makes a copy a GameObject even if it's held polymorphically

Warning
When overriding this function, make sure to set the parents object to this
Returns
a unique_ptr to a new stack allocated object that is a copy of the object

Implements GameObject.

Here is the call graph for this function:

◆ dataItr()

template<typename T>
auto Node::dataItr ( ) ->GameObject *
inline
Here is the call graph for this function:

◆ dataType()

auto Node::dataType ( ) const->gobj::Type
Returns
the type of the GameObject the node holds

◆ deRegisterRecursively()

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).

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dragAndDrop()

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.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dragTarget()

void Node::dragTarget ( )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ endWindow()

auto Node::endWindow ( ) ->void
inlineoverridevirtual

currently unused, but intended to but was assumed to be necessary for a proper ImGui editor

Implements GameObject.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ExtractData()

template<typename type>
auto Node::ExtractData ( gobj::Type typeId) ->std::unique_ptr< type >
inlinenodiscard

removes the data from the node, and relenquishes ownership of it.

Warning
don't do this to a node that is in the Engine tree
Template Parameters
typethe type to cast the data do
Parameters
typeIdthe type id of the object, for safety
Returns
a unique pointer that now owns the data

◆ find()

auto Node::find ( const std::function< bool(GameObject &)> & predicate) ->GameObject *

Finds a GameObject somewhere in the nodes lower (children, grandchildren, etc.) than the node.

Parameters
predicatea 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().
Returns
a pointer to the GameObject found by predicate
Here is the call graph for this function:
Here is the caller graph for this function:

◆ findDirect()

auto Node::findDirect ( const std::function< bool(GameObject &)> & predicate) ->GameObject *

Finds a GameObject somewhere in the nodes direct children.

Parameters
predicatea 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().
Returns
a pointer to the GameObject found by predicate, or nullptr if nothing was found
Here is the call graph for this function:

◆ for_each() [1/2]

auto Node::for_each ( std::function< void(const GameObject &)> func) const->void
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)

Parameters
funca function that takes a C reference, and does some operation using it

Reimplemented from GameObject.

Here is the call graph for this function:

◆ for_each() [2/2]

auto Node::for_each ( std::function< void(GameObject &)> func) ->void
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)

Parameters
funca function that takes a GameObject reference, and does some operation on it

Reimplemented from GameObject.

Here is the call graph for this function:

◆ GetChildren()

auto Node::GetChildren ( ) const
protected

◆ getChildren()

auto Node::getChildren ( ) const->std::shared_ptr< std::vector< GameObject * > >
overrideprotectedvirtual

gets a vector of a GameObjects public (i.e.

Entity s Entity and Component children)

Returns
a shared pointer to a vector of GameObject pointers, pointing to ALL of a GameObjects Public Children

Reimplemented from GameObject.

Here is the call graph for this function:

◆ GetData()

template<typename type>
auto Node::GetData ( gobj::Type typeId) const->type *
inline

Gets a pointer to the data held by a node.

Template Parameters
type
Parameters
typeId
Returns
Here is the caller graph for this function:

◆ getDataAsGameObj()

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

Returns
A pointer to the data held by the Node
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getParent()

auto Node::getParent ( ) const->Node *
override
Here is the call graph for this function:
Here is the caller graph for this function:

◆ isDescendantOf()

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.

Parameters
potentialParentthe node that may be the parent of this node. if this function returns true, then potentialParent is a parent, grandparent, etc. of this node.
Returns
if it returns false, then potentialParent is not a parent of this node.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ load()

auto Node::load ( Stream & stream) ->void
inlineoverridevirtual

Implementations will load the state of a GameObject from a th::Json Object.

Unimplemented in GameObject

Parameters
streamth::Json Object
Todo
:: make nodes load function
Todo
:: *this = stream.data(); according to bug description it says operator= is a deleted function Blocked by Node not having move operator

Implements GameObject.

Here is the call graph for this function:

◆ moveParent()

auto Node::moveParent ( ) ->void

Holds the ImGui functionality for moving a node to a different parent in the Engine tree.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ onEnterEngine()

auto Node::onEnterEngine ( ) ->void
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.

◆ onRender()

auto Node::onRender ( ) ->void
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.

◆ onUpdate()

auto Node::onUpdate ( float dt) ->void
overridevirtual

called once every frame.

Generally used for timers, movement, condition checks, etc. Unimplemented in GameObject

Parameters
dtthe time in seconds that has elapsed

Implements GameObject.

Here is the caller graph for this function:

◆ operator=() [1/2]

auto Node::operator= ( const Node & other) ->Node &
Here is the call graph for this function:

◆ operator=() [2/2]

auto Node::operator= ( Node && other) ->Node &=delete
deletenoexcept
Here is the call graph for this function:

◆ pop()

auto Node::pop ( ) ->std::unique_ptr< Node >

removes this Node from it's parent, handing ownership to the caller

Returns
a unique pointer with ownership of the Node
Here is the call graph for this function:

◆ render()

auto Node::render ( ) ->void
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.

Here is the call graph for this function:

◆ save()

auto Node::save ( Stream & stream) const->void
inlineoverridevirtual

Implementations will load the state of a GameObject to a th::Json object.

Unimplemented in GameObject

Parameters
streamth::Json Object

Implements GameObject.

◆ setShouldReceiveMessages()

auto Node::setShouldReceiveMessages ( const bool _shouldReceiveMessages) ->void
overridevirtual

set whether the Node, its data, and its children should receiveMessages

Parameters
_shouldReceiveMessageswhether the object should receiveMessages

Reimplemented from GameObject.

Here is the call graph for this function:

◆ setShouldRender()

auto Node::setShouldRender ( const bool _shouldRender) ->void
overridevirtual

set whether the Node, its data, and its children should render every frame

Parameters
_shouldRenderwhether the object should render

Reimplemented from GameObject.

Here is the call graph for this function:

◆ setShouldUpdate()

auto Node::setShouldUpdate ( const bool _shouldUpdate) ->void
overridevirtual

set whether the Node, its data, and its children should update every frame

Parameters
_shouldUpdatewhether the object should update

Reimplemented from GameObject.

Here is the call graph for this function:

◆ showMenu()

auto Node::showMenu ( ) ->void
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.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update()

auto Node::update ( float dt) ->void
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

Parameters
dtthe time in seconds that has elapsed

Reimplemented from GameObject.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ from_json

auto from_json ( const json & j,
Node & n )->void
friend

◆ to_json

auto to_json ( json & j,
const Node & n )->void
friend

Member Data Documentation

◆ children

ChildrenHandeler<Node> Node::children
private

◆ data

std::unique_ptr<GameObject> Node::data
private

The documentation for this class was generated from the following files:
  • /home/egrazil/sites/Brunot/The House/source/Framework/Node.h
  • /home/egrazil/sites/Brunot/The House/source/Framework/Node.cpp