mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-02-22 17:18:12 +01:00
Merge branch 'master' of https://github.com/Relintai/entity_spell_system
# Conflicts: # skeleton/character_skeleton.cpp # skeleton/character_skeleton.h
This commit is contained in:
commit
378fc4642f
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
|
|
||||||
CharacterSkeleton::CharacterSkeleton() {
|
CharacterSkeleton::CharacterSkeleton() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterSkeleton::_bind_methods() {
|
void CharacterSkeleton::_bind_methods() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
161
skeleton/character_skeleton_3d.cpp
Normal file
161
skeleton/character_skeleton_3d.cpp
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
#include "character_skeleton.h"
|
||||||
|
|
||||||
|
|
||||||
|
NodePath CharacterSkeleton::get_bone_path(int index) {
|
||||||
|
ERR_FAIL_INDEX_V(index, EntityEnums::SKELETON_POINTS_MAX, NodePath());
|
||||||
|
|
||||||
|
return _bone_paths[index];
|
||||||
|
}
|
||||||
|
void CharacterSkeleton::set_bone_path(int index, NodePath path) {
|
||||||
|
ERR_FAIL_INDEX(index, EntityEnums::SKELETON_POINTS_MAX);
|
||||||
|
|
||||||
|
_bone_paths[index] = path;
|
||||||
|
|
||||||
|
_bone_nodes[index] = get_node_or_null(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<CharacterSkeletonVisualEntry> CharacterSkeleton::get_visual(int index) {
|
||||||
|
ERR_FAIL_INDEX_V(index, EntityEnums::SKELETON_POINTS_MAX, Ref<CharacterSkeletonVisualEntry>());
|
||||||
|
|
||||||
|
return _visuals[index];
|
||||||
|
}
|
||||||
|
void CharacterSkeleton::set_visual(int index, Ref<CharacterSkeletonVisualEntry> entry) {
|
||||||
|
ERR_FAIL_INDEX(index, EntityEnums::SKELETON_POINTS_MAX);
|
||||||
|
|
||||||
|
_visuals[index] = entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node *CharacterSkeleton::get_bone_node(EntityEnums::CharacterSkeletonPoints node_id) {
|
||||||
|
return _bone_nodes[node_id];
|
||||||
|
}
|
||||||
|
|
||||||
|
NodePath CharacterSkeleton::get_animation_player_path() {
|
||||||
|
return _animation_player_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterSkeleton::set_animation_player_path(NodePath path) {
|
||||||
|
_animation_player_path = path;
|
||||||
|
|
||||||
|
Node *node = get_node_or_null(_animation_player_path);
|
||||||
|
|
||||||
|
if (node != NULL) {
|
||||||
|
_animation_player = Object::cast_to<AnimationPlayer>(node);
|
||||||
|
} else {
|
||||||
|
_animation_player = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AnimationPlayer *CharacterSkeleton::get_animation_player() {
|
||||||
|
return _animation_player;
|
||||||
|
}
|
||||||
|
|
||||||
|
NodePath CharacterSkeleton::get_animation_tree_path() {
|
||||||
|
return _animation_tree_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterSkeleton::set_animation_tree_path(NodePath path) {
|
||||||
|
_animation_tree_path = path;
|
||||||
|
|
||||||
|
Node *node = get_node_or_null(_animation_tree_path);
|
||||||
|
|
||||||
|
if (node != NULL) {
|
||||||
|
_animation_tree = Object::cast_to<AnimationTree>(node);
|
||||||
|
} else {
|
||||||
|
_animation_tree = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AnimationTree *CharacterSkeleton::get_animation_tree() {
|
||||||
|
return _animation_tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterSkeleton::update_nodes() {
|
||||||
|
for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) {
|
||||||
|
_bone_nodes[i] = get_node_or_null(_bone_paths[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_animation_player_path(_animation_player_path);
|
||||||
|
set_animation_tree_path(_animation_tree_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
CharacterSkeleton::CharacterSkeleton() {
|
||||||
|
for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) {
|
||||||
|
_bone_nodes[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
_animation_player = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterSkeleton::_notification(int p_what) {
|
||||||
|
switch (p_what) {
|
||||||
|
case NOTIFICATION_ENTER_TREE: {
|
||||||
|
update_nodes();
|
||||||
|
} break;
|
||||||
|
case NOTIFICATION_PROCESS: {
|
||||||
|
} break;
|
||||||
|
case NOTIFICATION_EXIT_TREE: {
|
||||||
|
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterSkeleton::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("get_bone_path", "index"), &CharacterSkeleton::get_bone_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_bone_path", "index", "path"), &CharacterSkeleton::set_bone_path);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_visual", "index"), &CharacterSkeleton::get_visual);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_visual", "index", "entry"), &CharacterSkeleton::set_visual);
|
||||||
|
|
||||||
|
ADD_GROUP("Visuals", "visual_");
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_root", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_ROOT);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_pelvis", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_PELVIS);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine_1", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE_1);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_spine_2", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_SPINE_2);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_neck", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_NECK);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_head", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_HEAD);
|
||||||
|
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_clavicle", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_CLAVICLE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_upper_arm", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_UPPER_ARM);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_forearm", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FOREARM);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_hand", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_HAND);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thumb_base", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THUMB_BASE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thumb_end", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THUMB_END);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_fingers_base", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FINGERS_BASE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_fingers_end", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FINGERS_END);
|
||||||
|
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_clavicle", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_CLAVICLE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_upper_arm", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_UPPER_ARM);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_forearm", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FOREARM);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_hand", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_HAND);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thumb_base", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THUMB_BASE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thumb_end", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THUMB_END);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_fingers_base", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FINGERS_BASE);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_fingers_end", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FINGERS_END);
|
||||||
|
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_thigh", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_THIGH);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_calf", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_CALF);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_left_foot", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_LEFT_FOOT);
|
||||||
|
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_thigh", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_THIGH);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_calf", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_CALF);
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "visual_right_foot", PROPERTY_HINT_RESOURCE_TYPE, "CharacterSkeletonVisualEntry"), "set_visual", "get_visual", EntityEnums::SKELETON_POINT_RIGHT_FOOT);
|
||||||
|
|
||||||
|
ADD_GROUP("Bone Paths", "bone_path_");
|
||||||
|
ADD_PROPERTYI(PropertyInfo(Variant::NODE_PATH, "bone_path_root"), "set_bone_path", "get_bone_path", EntityEnums::SKELETON_POINT_ROOT);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_bone_node", "bone_idx"), &CharacterSkeleton::get_bone_node);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_animation_player_path"), &CharacterSkeleton::get_animation_player_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_animation_player_path", "path"), &CharacterSkeleton::set_animation_player_path);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "animation_player_path"), "set_animation_player_path", "get_animation_player_path");
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_animation_tree_path"), &CharacterSkeleton::get_animation_tree_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_animation_tree_path", "path"), &CharacterSkeleton::set_animation_tree_path);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "animation_tree_path"), "set_animation_tree_path", "get_animation_tree_path");
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_animation_player"), &CharacterSkeleton::get_animation_player);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_animation_tree"), &CharacterSkeleton::get_animation_tree);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("update_nodes"), &CharacterSkeleton::update_nodes);
|
||||||
|
}
|
72
skeleton/character_skeleton_3d.h
Normal file
72
skeleton/character_skeleton_3d.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#ifndef CHARACTER_SKELETON_H
|
||||||
|
#define CHARACTER_SKELETON_H
|
||||||
|
|
||||||
|
#ifdef ENTITIES_2D
|
||||||
|
#include "scene/2d/node_2d.h"
|
||||||
|
#else
|
||||||
|
#include "scene/3d/spatial.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "core/node_path.h"
|
||||||
|
#include "core/ustring.h"
|
||||||
|
#include "scene/animation/animation_player.h"
|
||||||
|
#include "scene/animation/animation_tree.h"
|
||||||
|
|
||||||
|
#include "../data/character_skeleton_visual_entry.h"
|
||||||
|
#include "../entity_enums.h"
|
||||||
|
|
||||||
|
#ifdef ENTITIES_2D
|
||||||
|
|
||||||
|
class CharacterSkeleton : public Node2D {
|
||||||
|
GDCLASS(CharacterSkeleton, Node2D);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
class CharacterSkeleton : public Spatial {
|
||||||
|
GDCLASS(CharacterSkeleton, Spatial);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
NodePath get_bone_path(int index);
|
||||||
|
void set_bone_path(int index, NodePath path);
|
||||||
|
|
||||||
|
Ref<CharacterSkeletonVisualEntry> get_visual(int index);
|
||||||
|
void set_visual(int index, Ref<CharacterSkeletonVisualEntry> entry);
|
||||||
|
|
||||||
|
Node *get_bone_node(EntityEnums::CharacterSkeletonPoints node_id);
|
||||||
|
|
||||||
|
NodePath get_animation_player_path();
|
||||||
|
void set_animation_player_path(NodePath path);
|
||||||
|
|
||||||
|
AnimationPlayer *get_animation_player();
|
||||||
|
|
||||||
|
NodePath get_animation_tree_path();
|
||||||
|
void set_animation_tree_path(NodePath path);
|
||||||
|
|
||||||
|
AnimationTree *get_animation_tree();
|
||||||
|
|
||||||
|
void update_nodes();
|
||||||
|
|
||||||
|
CharacterSkeleton();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
virtual void _notification(int p_notification);
|
||||||
|
|
||||||
|
private:
|
||||||
|
NodePath _animation_player_path;
|
||||||
|
NodePath _animation_tree_path;
|
||||||
|
|
||||||
|
NodePath _bone_paths[EntityEnums::SKELETON_POINTS_MAX];
|
||||||
|
|
||||||
|
AnimationPlayer *_animation_player;
|
||||||
|
AnimationTree *_animation_tree;
|
||||||
|
|
||||||
|
Node *_bone_nodes[EntityEnums::SKELETON_POINTS_MAX];
|
||||||
|
|
||||||
|
Ref<CharacterSkeletonVisualEntry> _visuals[EntityEnums::SKELETON_POINTS_MAX];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user