diff options
Diffstat (limited to 'scene/animation')
-rw-r--r-- | scene/animation/animation_cache.cpp | 6 | ||||
-rw-r--r-- | scene/animation/animation_cache.h | 6 | ||||
-rw-r--r-- | scene/animation/animation_player.cpp | 12 | ||||
-rw-r--r-- | scene/animation/animation_player.h | 8 | ||||
-rw-r--r-- | scene/animation/animation_tree.cpp | 6 | ||||
-rw-r--r-- | scene/animation/animation_tree.h | 8 | ||||
-rw-r--r-- | scene/animation/root_motion_view.h | 6 | ||||
-rw-r--r-- | scene/animation/skeleton_ik.cpp | 116 | ||||
-rw-r--r-- | scene/animation/skeleton_ik.h | 24 |
9 files changed, 96 insertions, 96 deletions
diff --git a/scene/animation/animation_cache.cpp b/scene/animation/animation_cache.cpp index 9ed8155bdc..79a7c36e7f 100644 --- a/scene/animation/animation_cache.cpp +++ b/scene/animation/animation_cache.cpp @@ -94,19 +94,19 @@ void AnimationCache::_update_cache() { ERR_CONTINUE_MSG(animation->track_get_type(i) == Animation::TYPE_TRANSFORM, "Transform tracks can't have a subpath '" + np + "'."); } - Spatial *sp = Object::cast_to<Spatial>(node); + Node3D *sp = Object::cast_to<Node3D>(node); if (!sp) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(!sp, "Transform track not of type Spatial '" + np + "'."); + ERR_CONTINUE_MSG(!sp, "Transform track not of type Node3D '" + np + "'."); } if (np.get_subname_count() == 1) { StringName property = np.get_subname(0); String ps = property; - Skeleton *sk = Object::cast_to<Skeleton>(node); + Skeleton3D *sk = Object::cast_to<Skeleton3D>(node); if (!sk) { path_cache.push_back(Path()); diff --git a/scene/animation/animation_cache.h b/scene/animation/animation_cache.h index e73b9e2498..20147f060b 100644 --- a/scene/animation/animation_cache.h +++ b/scene/animation/animation_cache.h @@ -31,7 +31,7 @@ #ifndef ANIMATION_CACHE_H #define ANIMATION_CACHE_H -#include "scene/3d/skeleton.h" +#include "scene/3d/skeleton_3d.h" #include "scene/resources/animation.h" class AnimationCache : public Object { @@ -42,9 +42,9 @@ class AnimationCache : public Object { RES resource; Object *object; - Skeleton *skeleton; // haxor + Skeleton3D *skeleton; // haxor Node *node; - Spatial *spatial; + Node3D *spatial; int bone_idx; Vector<StringName> subpath; diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 587485669e..6c870682a6 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -44,7 +44,7 @@ void AnimatedValuesBackup::update_skeletons() { for (int i = 0; i < entries.size(); i++) { if (entries[i].bone_idx != -1) { // 3D bone - Object::cast_to<Skeleton>(entries[i].object)->notification(Skeleton::NOTIFICATION_UPDATE_SKELETON); + Object::cast_to<Skeleton3D>(entries[i].object)->notification(Skeleton3D::NOTIFICATION_UPDATE_SKELETON); } else { Bone2D *bone = Object::cast_to<Bone2D>(entries[i].object); if (bone && bone->skeleton) { @@ -252,9 +252,9 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) { ObjectID id = resource.is_valid() ? resource->get_instance_id() : child->get_instance_id(); int bone_idx = -1; - if (a->track_get_path(i).get_subname_count() == 1 && Object::cast_to<Skeleton>(child)) { + if (a->track_get_path(i).get_subname_count() == 1 && Object::cast_to<Skeleton3D>(child)) { - Skeleton *sk = Object::cast_to<Skeleton>(child); + Skeleton3D *sk = Object::cast_to<Skeleton3D>(child); bone_idx = sk->find_bone(a->track_get_path(i).get_subname(0)); if (bone_idx == -1) { @@ -283,9 +283,9 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) { // special cases and caches for transform tracks // cache spatial - p_anim->node_cache[i]->spatial = Object::cast_to<Spatial>(child); + p_anim->node_cache[i]->spatial = Object::cast_to<Node3D>(child); // cache skeleton - p_anim->node_cache[i]->skeleton = Object::cast_to<Skeleton>(child); + p_anim->node_cache[i]->skeleton = Object::cast_to<Skeleton3D>(child); if (p_anim->node_cache[i]->skeleton) { if (a->track_get_path(i).get_subname_count() == 1) { StringName bone_name = a->track_get_path(i).get_subname(0); @@ -1612,7 +1612,7 @@ void AnimationPlayer::restore_animated_values(const AnimatedValuesBackup &p_back if (entry->bone_idx == -1) { entry->object->set_indexed(entry->subpath, entry->value); } else { - Object::cast_to<Skeleton>(entry->object)->set_bone_pose(entry->bone_idx, entry->value); + Object::cast_to<Skeleton3D>(entry->object)->set_bone_pose(entry->bone_idx, entry->value); } } } diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index 24f60363ed..32bed6f4d6 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -32,8 +32,8 @@ #define ANIMATION_PLAYER_H #include "scene/2d/node_2d.h" -#include "scene/3d/skeleton.h" -#include "scene/3d/spatial.h" +#include "scene/3d/node_3d.h" +#include "scene/3d/skeleton_3d.h" #include "scene/resources/animation.h" #ifdef TOOLS_ENABLED @@ -90,9 +90,9 @@ private: uint32_t id; RES resource; Node *node; - Spatial *spatial; + Node3D *spatial; Node2D *node_2d; - Skeleton *skeleton; + Skeleton3D *skeleton; int bone_idx; // accumulated transforms diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index 95afd74ee5..0e1089cc6a 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -605,7 +605,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) { } break; case Animation::TYPE_TRANSFORM: { - Spatial *spatial = Object::cast_to<Spatial>(child); + Node3D *spatial = Object::cast_to<Node3D>(child); if (!spatial) { ERR_PRINT("AnimationTree: '" + String(E->get()) + "', transform track does not point to spatial: '" + String(path) + "'"); @@ -618,9 +618,9 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) { track_xform->skeleton = NULL; track_xform->bone_idx = -1; - if (path.get_subname_count() == 1 && Object::cast_to<Skeleton>(spatial)) { + if (path.get_subname_count() == 1 && Object::cast_to<Skeleton3D>(spatial)) { - Skeleton *sk = Object::cast_to<Skeleton>(spatial); + Skeleton3D *sk = Object::cast_to<Skeleton3D>(spatial); int bone_idx = sk->find_bone(path.get_subname(0)); if (bone_idx != -1) { diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h index 742942fcda..faf4333f1d 100644 --- a/scene/animation/animation_tree.h +++ b/scene/animation/animation_tree.h @@ -32,8 +32,8 @@ #define ANIMATION_GRAPH_PLAYER_H #include "animation_player.h" -#include "scene/3d/skeleton.h" -#include "scene/3d/spatial.h" +#include "scene/3d/node_3d.h" +#include "scene/3d/skeleton_3d.h" #include "scene/resources/animation.h" class AnimationNodeBlendTree; @@ -192,8 +192,8 @@ private: }; struct TrackCacheTransform : public TrackCache { - Spatial *spatial; - Skeleton *skeleton; + Node3D *spatial; + Skeleton3D *skeleton; int bone_idx; Vector3 loc; Quat rot; diff --git a/scene/animation/root_motion_view.h b/scene/animation/root_motion_view.h index 42950dde42..c8a755a854 100644 --- a/scene/animation/root_motion_view.h +++ b/scene/animation/root_motion_view.h @@ -31,10 +31,10 @@ #ifndef ROOT_MOTION_VIEW_H #define ROOT_MOTION_VIEW_H -#include "scene/3d/visual_instance.h" +#include "scene/3d/visual_instance_3d.h" -class RootMotionView : public VisualInstance { - GDCLASS(RootMotionView, VisualInstance); +class RootMotionView : public VisualInstance3D { + GDCLASS(RootMotionView, VisualInstance3D); public: RID immediate; diff --git a/scene/animation/skeleton_ik.cpp b/scene/animation/skeleton_ik.cpp index 5800b41ae6..71aa5e13b3 100644 --- a/scene/animation/skeleton_ik.cpp +++ b/scene/animation/skeleton_ik.cpp @@ -136,7 +136,7 @@ bool FabrikInverseKinematic::build_chain(Task *p_task, bool p_force_simple_chain return true; } -void FabrikInverseKinematic::update_chain(const Skeleton *p_sk, ChainItem *p_chain_item) { +void FabrikInverseKinematic::update_chain(const Skeleton3D *p_sk, ChainItem *p_chain_item) { if (!p_chain_item) return; @@ -238,7 +238,7 @@ void FabrikInverseKinematic::solve_simple_forwards(Chain &r_chain, bool p_solve_ } } -FabrikInverseKinematic::Task *FabrikInverseKinematic::create_simple_task(Skeleton *p_sk, BoneId root_bone, BoneId tip_bone, const Transform &goal_transform) { +FabrikInverseKinematic::Task *FabrikInverseKinematic::create_simple_task(Skeleton3D *p_sk, BoneId root_bone, BoneId tip_bone, const Transform &goal_transform) { FabrikInverseKinematic::EndEffector ee; ee.tip_bone = tip_bone; @@ -332,7 +332,7 @@ void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool ove } } -void SkeletonIK::_validate_property(PropertyInfo &property) const { +void SkeletonIK3D::_validate_property(PropertyInfo &property) const { if (property.name == "root_bone" || property.name == "tip_bone") { @@ -355,43 +355,43 @@ void SkeletonIK::_validate_property(PropertyInfo &property) const { } } -void SkeletonIK::_bind_methods() { +void SkeletonIK3D::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_root_bone", "root_bone"), &SkeletonIK::set_root_bone); - ClassDB::bind_method(D_METHOD("get_root_bone"), &SkeletonIK::get_root_bone); + ClassDB::bind_method(D_METHOD("set_root_bone", "root_bone"), &SkeletonIK3D::set_root_bone); + ClassDB::bind_method(D_METHOD("get_root_bone"), &SkeletonIK3D::get_root_bone); - ClassDB::bind_method(D_METHOD("set_tip_bone", "tip_bone"), &SkeletonIK::set_tip_bone); - ClassDB::bind_method(D_METHOD("get_tip_bone"), &SkeletonIK::get_tip_bone); + ClassDB::bind_method(D_METHOD("set_tip_bone", "tip_bone"), &SkeletonIK3D::set_tip_bone); + ClassDB::bind_method(D_METHOD("get_tip_bone"), &SkeletonIK3D::get_tip_bone); - ClassDB::bind_method(D_METHOD("set_interpolation", "interpolation"), &SkeletonIK::set_interpolation); - ClassDB::bind_method(D_METHOD("get_interpolation"), &SkeletonIK::get_interpolation); + ClassDB::bind_method(D_METHOD("set_interpolation", "interpolation"), &SkeletonIK3D::set_interpolation); + ClassDB::bind_method(D_METHOD("get_interpolation"), &SkeletonIK3D::get_interpolation); - ClassDB::bind_method(D_METHOD("set_target_transform", "target"), &SkeletonIK::set_target_transform); - ClassDB::bind_method(D_METHOD("get_target_transform"), &SkeletonIK::get_target_transform); + ClassDB::bind_method(D_METHOD("set_target_transform", "target"), &SkeletonIK3D::set_target_transform); + ClassDB::bind_method(D_METHOD("get_target_transform"), &SkeletonIK3D::get_target_transform); - ClassDB::bind_method(D_METHOD("set_target_node", "node"), &SkeletonIK::set_target_node); - ClassDB::bind_method(D_METHOD("get_target_node"), &SkeletonIK::get_target_node); + ClassDB::bind_method(D_METHOD("set_target_node", "node"), &SkeletonIK3D::set_target_node); + ClassDB::bind_method(D_METHOD("get_target_node"), &SkeletonIK3D::get_target_node); - ClassDB::bind_method(D_METHOD("set_override_tip_basis", "override"), &SkeletonIK::set_override_tip_basis); - ClassDB::bind_method(D_METHOD("is_override_tip_basis"), &SkeletonIK::is_override_tip_basis); + ClassDB::bind_method(D_METHOD("set_override_tip_basis", "override"), &SkeletonIK3D::set_override_tip_basis); + ClassDB::bind_method(D_METHOD("is_override_tip_basis"), &SkeletonIK3D::is_override_tip_basis); - ClassDB::bind_method(D_METHOD("set_use_magnet", "use"), &SkeletonIK::set_use_magnet); - ClassDB::bind_method(D_METHOD("is_using_magnet"), &SkeletonIK::is_using_magnet); + ClassDB::bind_method(D_METHOD("set_use_magnet", "use"), &SkeletonIK3D::set_use_magnet); + ClassDB::bind_method(D_METHOD("is_using_magnet"), &SkeletonIK3D::is_using_magnet); - ClassDB::bind_method(D_METHOD("set_magnet_position", "local_position"), &SkeletonIK::set_magnet_position); - ClassDB::bind_method(D_METHOD("get_magnet_position"), &SkeletonIK::get_magnet_position); + ClassDB::bind_method(D_METHOD("set_magnet_position", "local_position"), &SkeletonIK3D::set_magnet_position); + ClassDB::bind_method(D_METHOD("get_magnet_position"), &SkeletonIK3D::get_magnet_position); - ClassDB::bind_method(D_METHOD("get_parent_skeleton"), &SkeletonIK::get_parent_skeleton); - ClassDB::bind_method(D_METHOD("is_running"), &SkeletonIK::is_running); + ClassDB::bind_method(D_METHOD("get_parent_skeleton"), &SkeletonIK3D::get_parent_skeleton); + ClassDB::bind_method(D_METHOD("is_running"), &SkeletonIK3D::is_running); - ClassDB::bind_method(D_METHOD("set_min_distance", "min_distance"), &SkeletonIK::set_min_distance); - ClassDB::bind_method(D_METHOD("get_min_distance"), &SkeletonIK::get_min_distance); + ClassDB::bind_method(D_METHOD("set_min_distance", "min_distance"), &SkeletonIK3D::set_min_distance); + ClassDB::bind_method(D_METHOD("get_min_distance"), &SkeletonIK3D::get_min_distance); - ClassDB::bind_method(D_METHOD("set_max_iterations", "iterations"), &SkeletonIK::set_max_iterations); - ClassDB::bind_method(D_METHOD("get_max_iterations"), &SkeletonIK::get_max_iterations); + ClassDB::bind_method(D_METHOD("set_max_iterations", "iterations"), &SkeletonIK3D::set_max_iterations); + ClassDB::bind_method(D_METHOD("get_max_iterations"), &SkeletonIK3D::get_max_iterations); - ClassDB::bind_method(D_METHOD("start", "one_time"), &SkeletonIK::start, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("stop"), &SkeletonIK::stop); + ClassDB::bind_method(D_METHOD("start", "one_time"), &SkeletonIK3D::start, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("stop"), &SkeletonIK3D::stop); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "root_bone"), "set_root_bone", "get_root_bone"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "tip_bone"), "set_tip_bone", "get_tip_bone"); @@ -405,10 +405,10 @@ void SkeletonIK::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "max_iterations"), "set_max_iterations", "get_max_iterations"); } -void SkeletonIK::_notification(int p_what) { +void SkeletonIK3D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - skeleton = Object::cast_to<Skeleton>(get_parent()); + skeleton = Object::cast_to<Skeleton3D>(get_parent()); set_process_priority(1); reload_chain(); } break; @@ -426,7 +426,7 @@ void SkeletonIK::_notification(int p_what) { } } -SkeletonIK::SkeletonIK() : +SkeletonIK3D::SkeletonIK3D() : interpolation(1), override_tip_basis(true), use_magnet(false), @@ -437,93 +437,93 @@ SkeletonIK::SkeletonIK() : task(NULL) { } -SkeletonIK::~SkeletonIK() { +SkeletonIK3D::~SkeletonIK3D() { FabrikInverseKinematic::free_task(task); task = NULL; } -void SkeletonIK::set_root_bone(const StringName &p_root_bone) { +void SkeletonIK3D::set_root_bone(const StringName &p_root_bone) { root_bone = p_root_bone; reload_chain(); } -StringName SkeletonIK::get_root_bone() const { +StringName SkeletonIK3D::get_root_bone() const { return root_bone; } -void SkeletonIK::set_tip_bone(const StringName &p_tip_bone) { +void SkeletonIK3D::set_tip_bone(const StringName &p_tip_bone) { tip_bone = p_tip_bone; reload_chain(); } -StringName SkeletonIK::get_tip_bone() const { +StringName SkeletonIK3D::get_tip_bone() const { return tip_bone; } -void SkeletonIK::set_interpolation(real_t p_interpolation) { +void SkeletonIK3D::set_interpolation(real_t p_interpolation) { interpolation = p_interpolation; } -real_t SkeletonIK::get_interpolation() const { +real_t SkeletonIK3D::get_interpolation() const { return interpolation; } -void SkeletonIK::set_target_transform(const Transform &p_target) { +void SkeletonIK3D::set_target_transform(const Transform &p_target) { target = p_target; reload_goal(); } -const Transform &SkeletonIK::get_target_transform() const { +const Transform &SkeletonIK3D::get_target_transform() const { return target; } -void SkeletonIK::set_target_node(const NodePath &p_node) { +void SkeletonIK3D::set_target_node(const NodePath &p_node) { target_node_path_override = p_node; target_node_override = NULL; reload_goal(); } -NodePath SkeletonIK::get_target_node() { +NodePath SkeletonIK3D::get_target_node() { return target_node_path_override; } -void SkeletonIK::set_override_tip_basis(bool p_override) { +void SkeletonIK3D::set_override_tip_basis(bool p_override) { override_tip_basis = p_override; } -bool SkeletonIK::is_override_tip_basis() const { +bool SkeletonIK3D::is_override_tip_basis() const { return override_tip_basis; } -void SkeletonIK::set_use_magnet(bool p_use) { +void SkeletonIK3D::set_use_magnet(bool p_use) { use_magnet = p_use; } -bool SkeletonIK::is_using_magnet() const { +bool SkeletonIK3D::is_using_magnet() const { return use_magnet; } -void SkeletonIK::set_magnet_position(const Vector3 &p_local_position) { +void SkeletonIK3D::set_magnet_position(const Vector3 &p_local_position) { magnet_position = p_local_position; } -const Vector3 &SkeletonIK::get_magnet_position() const { +const Vector3 &SkeletonIK3D::get_magnet_position() const { return magnet_position; } -void SkeletonIK::set_min_distance(real_t p_min_distance) { +void SkeletonIK3D::set_min_distance(real_t p_min_distance) { min_distance = p_min_distance; } -void SkeletonIK::set_max_iterations(int p_iterations) { +void SkeletonIK3D::set_max_iterations(int p_iterations) { max_iterations = p_iterations; } -bool SkeletonIK::is_running() { +bool SkeletonIK3D::is_running() { return is_processing_internal(); } -void SkeletonIK::start(bool p_one_time) { +void SkeletonIK3D::start(bool p_one_time) { if (p_one_time) { set_process_internal(false); _solve_chain(); @@ -532,14 +532,14 @@ void SkeletonIK::start(bool p_one_time) { } } -void SkeletonIK::stop() { +void SkeletonIK3D::stop() { set_process_internal(false); } -Transform SkeletonIK::_get_target_transform() { +Transform SkeletonIK3D::_get_target_transform() { if (!target_node_override && !target_node_path_override.is_empty()) - target_node_override = Object::cast_to<Spatial>(get_node(target_node_path_override)); + target_node_override = Object::cast_to<Node3D>(get_node(target_node_path_override)); if (target_node_override) return target_node_override->get_global_transform(); @@ -547,7 +547,7 @@ Transform SkeletonIK::_get_target_transform() { return target; } -void SkeletonIK::reload_chain() { +void SkeletonIK3D::reload_chain() { FabrikInverseKinematic::free_task(task); task = NULL; @@ -562,14 +562,14 @@ void SkeletonIK::reload_chain() { } } -void SkeletonIK::reload_goal() { +void SkeletonIK3D::reload_goal() { if (!task) return; FabrikInverseKinematic::set_goal(task, _get_target_transform()); } -void SkeletonIK::_solve_chain() { +void SkeletonIK3D::_solve_chain() { if (!task) return; FabrikInverseKinematic::solve(task, interpolation, override_tip_basis, use_magnet, magnet_position); diff --git a/scene/animation/skeleton_ik.h b/scene/animation/skeleton_ik.h index 02d5aba5ba..938c912065 100644 --- a/scene/animation/skeleton_ik.h +++ b/scene/animation/skeleton_ik.h @@ -38,7 +38,7 @@ */ #include "core/math/transform.h" -#include "scene/3d/skeleton.h" +#include "scene/3d/skeleton_3d.h" class FabrikInverseKinematic { @@ -54,7 +54,7 @@ class FabrikInverseKinematic { // Bone info BoneId bone; - PhysicalBone *pb; + PhysicalBone3D *pb; real_t length; /// Positions relative to root bone @@ -100,7 +100,7 @@ class FabrikInverseKinematic { public: struct Task { RID self; - Skeleton *skeleton; + Skeleton3D *skeleton; Chain chain; @@ -125,7 +125,7 @@ private: /// Init a chain that starts from the root to tip static bool build_chain(Task *p_task, bool p_force_simple_chain = true); - static void update_chain(const Skeleton *p_sk, ChainItem *p_chain_item); + static void update_chain(const Skeleton3D *p_sk, ChainItem *p_chain_item); static void solve_simple(Task *p_task, bool p_solve_magnet); /// Special solvers that solve only chains with one end effector @@ -133,7 +133,7 @@ private: static void solve_simple_forwards(Chain &r_chain, bool p_solve_magnet); public: - static Task *create_simple_task(Skeleton *p_sk, BoneId root_bone, BoneId tip_bone, const Transform &goal_transform); + static Task *create_simple_task(Skeleton3D *p_sk, BoneId root_bone, BoneId tip_bone, const Transform &goal_transform); static void free_task(Task *p_task); // The goal of chain should be always in local space static void set_goal(Task *p_task, const Transform &p_goal); @@ -141,8 +141,8 @@ public: static void solve(Task *p_task, real_t blending_delta, bool override_tip_basis, bool p_use_magnet, const Vector3 &p_magnet_position); }; -class SkeletonIK : public Node { - GDCLASS(SkeletonIK, Node); +class SkeletonIK3D : public Node { + GDCLASS(SkeletonIK3D, Node); StringName root_bone; StringName tip_bone; @@ -156,8 +156,8 @@ class SkeletonIK : public Node { real_t min_distance; int max_iterations; - Skeleton *skeleton; - Spatial *target_node_override; + Skeleton3D *skeleton; + Node3D *target_node_override; FabrikInverseKinematic::Task *task; protected: @@ -168,8 +168,8 @@ protected: virtual void _notification(int p_what); public: - SkeletonIK(); - virtual ~SkeletonIK(); + SkeletonIK3D(); + virtual ~SkeletonIK3D(); void set_root_bone(const StringName &p_root_bone); StringName get_root_bone() const; @@ -201,7 +201,7 @@ public: void set_max_iterations(int p_iterations); int get_max_iterations() const { return max_iterations; } - Skeleton *get_parent_skeleton() const { return skeleton; } + Skeleton3D *get_parent_skeleton() const { return skeleton; } bool is_running(); |