Toast Engine
Loading...
Searching...
No Matches
toast::Node3D Class Reference
Inheritance diagram for toast::Node3D:
Collaboration diagram for toast::Node3D:

Public Member Functions

auto raycast (glm::vec3 dir, glm::vec3 offset=glm::vec3(0.0f), float max_distance=-1.0f, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::optional< physics::RayHit >
 The nearest thing a ray from this node hits.
auto raymulticast (glm::vec3 dir, glm::vec3 offset=glm::vec3(0.0f), float max_distance=-1.0f, int max_hits=-1, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::vector< physics::RayHit >
 Up to max_hits things collisions.
auto linecast (glm::vec3 from, glm::vec3 to, int max_hits=-1, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::vector< physics::RayHit >
 Everything on the line between two points, nearest to from first.
void lookAt (glm::vec3 target, glm::vec3 up={0.0f, 0.0f, 1.0f})
 Orients the node so its forward axis points at a world-space target.
void lookAtZ (glm::vec3 target)
 lookAt() constrained to the XY plane; the node faces the target with no roll
auto up () const -> glm::vec3
auto forward () const -> glm::vec3
void syncTransform () const
void syncWorldTransform () const
void refreshTransformParent ()
auto getTransform () const noexcept -> const glm::mat4 &
auto getWorldTransform () const noexcept -> const glm::mat4 &
virtual void onEditorTransformChanged ()
Public Member Functions inherited from toast::Node
auto uid () const noexcept -> const UID &
 Stable unique identifier, assigned at construction or deserialization. Never changes.
auto rid () const noexcept -> std::uintptr_t
 Runtime identifier for this node, guaranteed to be unique but changes every time.
auto name () const noexcept -> std::string_view
 Display name. Siblings may share one - this is not an identifier.
void name (std::string_view name) noexcept
 Sets the display name.
auto enabled () const noexcept -> bool
 Whether this node is currently active.
auto participatesIn (NodeOwnerParticipation use) const noexcept -> bool
auto owner () const noexcept -> INodeOwner *
 The World or Workspace this node belongs to.
void enabled (bool value) noexcept
 Sets the local enabled flag and propagates the change to all children.
auto box () const noexcept -> Box< Node >
 Returns an owning handle to this node.
auto info () const -> const NodeInfo *
 Reflection metadata registered by the code generator.
auto sourcePrefab () const noexcept -> const assets::Handle< assets::Prefab > &
 The prefab this node was instantiated from.
auto isInstanceRoot () const noexcept -> bool
 Whether this node is the root of a prefab instance.
auto root () const noexcept -> Box< Node >
 The topmost ancestor that is not the world root.
auto state () const noexcept -> NodeState
auto type () const noexcept -> NodeType
auto listener () noexcept -> event::Listener &
 The event Listener owned by this node. Lazy-allocated, freed only with the node.
auto parent () noexcept -> Box< Node >
 The immediate parent of this node.
auto children () const noexcept -> const std::vector< Box< Node > > &
 The ordered list of direct children.
auto childrenSnapshot () const -> std::vector< Box< Node > >
auto create (std::string_view type="toast::Node") noexcept -> Box< Node >
 Creates a new child node of the given type and attaches it to this node.
auto spawn (UID uid) noexcept -> Box< Node >
 Asynchronously instantiates a prefab as a child of this node.
auto spawn (std::string_view uri) noexcept -> Box< Node >
 Asynchronously instantiates a prefab as a child of this node.
auto find (std::string_view query) -> Box< Node >
 Depth-first search for a single descendant.
auto find (const UID &uid) -> Box< Node >
 Looks up a node by UID within this node's local root.
auto search (std::string_view query) -> std::vector< Box< Node > >
 Depth-first search for all matching descendants.
auto childrenOfType (const NodeInfo *type) const -> std::vector< Box< Node > >
auto searchType (const NodeInfo *type) const -> std::vector< Box< Node > >
void addDependsOn (Node &other)
void removeDependsOn (Node &other)
void interactsWith (Node &other)
 Declares that the scripts of this node and of other call each other.
auto scriptRuntime () noexcept -> scripting::ScriptRuntime *
auto hasTickFunction (TickFunctionList mask) const noexcept -> bool
auto scriptVm (TickFunctionList func) const noexcept -> std::optional< size_t >
 The interpreter this node runs Lua on while it executes func, empty when it runs none.
auto scriptVmAny () const noexcept -> std::optional< size_t >
 The interpreter the scripts of this node live on whatever phase they define.
auto hasCallable (std::string_view name) const noexcept -> bool
void reloadScripts () noexcept
 Rebuilds the script runtime after a script asset changed (hot reload or attach).
auto scripts () const noexcept -> const std::vector< assets::Handle< assets::Script > > &
void setScripts (std::vector< assets::Handle< assets::Script > > scripts) noexcept
void addScript (const assets::Handle< assets::Script > &script) noexcept
template<typename R = void, typename... Args>
auto call (std::string_view name, Args &&... args) -> R
 Invokes all C++ reflected implementations of name (base→derived) and all same-named Lua functions across every attached script, forwarding args.
template<typename T>
auto get (std::string_view name) const -> T
 Reads a named value: reflected C++ field first, then the first matching Lua instance variable.
template<typename T>
void set (std::string_view name, const T &value)
 Writes a named value: reflected C++ field if present and every Lua instance variable of that name that already exists.
auto isRecursivePrefab () const noexcept -> bool

Public Attributes

glm::vec3 position = glm::vec3(0.0f)
glm::quat rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
glm::vec3 scale = glm::vec3(1.0f)
glm::vec3 world_position = glm::vec3(0.0f)
glm::quat world_rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
glm::vec3 world_scale = glm::vec3(1.0f)
Public Attributes inherited from toast::Node
signals::Signal< Box< Node > > on_enable
signals::Signal< Box< Node > > on_disable
signals::Signal< Box< Node > > on_begin
signals::Signal< Box< Node > > on_end

Static Public Attributes

static const glm::vec3 world_up = {0.0f, 0.0f, 1.0f}
static const glm::vec3 world_forward = {0.0f, 1.0f, 0.0f}
 Z axis.
static const glm::vec3 world_right = {1.0f, 0.0f, 0.0f}
 Y axis.

Protected Member Functions

void init ()
 X axis.
Protected Member Functions inherited from toast::Node
virtual void onReflectedFieldChanged (std::string_view)
virtual void onScriptsReloaded ()
virtual void onScriptsReloading ()
virtual auto luaAffinity () const noexcept -> std::optional< size_t >
virtual void onScriptVarChanged (std::string_view path)
virtual void updateInspectorMessages ()
void addInspectorMessage (const NodeMessage &message)
void removeInspectorMessage (const NodeMessage &message)

Friends

class INodeOwner

Additional Inherited Members

Protected Attributes inherited from toast::Node
INodeOwner * m_owner = nullptr

Member Function Documentation

◆ forward()

auto toast::Node3D::forward ( ) const -> glm::vec3
nodiscard
Returns
Forward vector of the current object in world space
Here is the caller graph for this function:

◆ linecast()

auto toast::Node3D::linecast ( glm::vec3 from,
glm::vec3 to,
int max_hits = -1,
bool ignore_self = true,
const std::vector< int > & layers = std::vector<int> {} ) const -> std::vector< physics::RayHit >

Everything on the line between two points, nearest to from first.

Parameters
fromStart of the line in world space
toEnd of the line in world space
max_hitsHow many to look for

◆ lookAt()

void toast::Node3D::lookAt ( glm::vec3 target,
glm::vec3 up = {0.0f, 0.0f, 1.0f} )

Orients the node so its forward axis points at a world-space target.

Parameters
targetWorld-space point to look at
upWorld-space up vector; defaults to +Z

◆ lookAtZ()

void toast::Node3D::lookAtZ ( glm::vec3 target)

lookAt() constrained to the XY plane; the node faces the target with no roll

Parameters
targetWorld-space point to face; the Z component is ignored

◆ raycast()

auto toast::Node3D::raycast ( glm::vec3 dir,
glm::vec3 offset = glm::vec3(0.0f),
float max_distance = -1.0f,
bool ignore_self = true,
const std::vector< int > & layers = std::vector<int> {} ) const -> std::optional< physics::RayHit >

The nearest thing a ray from this node hits.

Parameters
dirWhere the ray goes
offsetWhere the ray starts
max_distanceHow far the ray goes
ignore_selfIgnores colision from this node or a children

◆ raymulticast()

auto toast::Node3D::raymulticast ( glm::vec3 dir,
glm::vec3 offset = glm::vec3(0.0f),
float max_distance = -1.0f,
int max_hits = -1,
bool ignore_self = true,
const std::vector< int > & layers = std::vector<int> {} ) const -> std::vector< physics::RayHit >

Up to max_hits things collisions.

See also
raycast for the other arguments

◆ up()

auto toast::Node3D::up ( ) const -> glm::vec3
nodiscard
Returns
Up vector of the current object in world space
Here is the caller graph for this function:

The documentation for this class was generated from the following files:
  • engine/src/toast/world/node_3d.hpp
  • engine/src/toast/world/node_3d.cpp