mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-02-22 17:18:12 +01:00
Renamed skeleton to body in SpeciesModelData. Now Entity can store transforms, also it now has a few more convenience getters/setters. Also it will try to instantiate the body of an entity if it is set into the species data.
This commit is contained in:
parent
677f138a46
commit
909f34af03
@ -31,11 +31,11 @@ void SpeciesModelData::set_id(int value) {
|
|||||||
_id = value;
|
_id = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<PackedScene> SpeciesModelData::get_skeleton() {
|
Ref<PackedScene> SpeciesModelData::get_body() {
|
||||||
return _skeleton;
|
return _body;
|
||||||
}
|
}
|
||||||
void SpeciesModelData::set_skeleton(Ref<PackedScene> value) {
|
void SpeciesModelData::set_body(Ref<PackedScene> value) {
|
||||||
_skeleton = value;
|
_body = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Entries
|
//Entries
|
||||||
@ -270,7 +270,7 @@ SpeciesModelData::SpeciesModelData() {
|
|||||||
_id = 0;
|
_id = 0;
|
||||||
}
|
}
|
||||||
SpeciesModelData::~SpeciesModelData() {
|
SpeciesModelData::~SpeciesModelData() {
|
||||||
_skeleton.unref();
|
_body.unref();
|
||||||
|
|
||||||
for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) {
|
for (int i = 0; i < EntityEnums::SKELETON_POINTS_MAX; ++i) {
|
||||||
_visuals[i].clear();
|
_visuals[i].clear();
|
||||||
@ -289,9 +289,9 @@ void SpeciesModelData::_bind_methods() {
|
|||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "text_name"), "set_name", "get_name");
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "text_name"), "set_name", "get_name");
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_skeleton"), &SpeciesModelData::get_skeleton);
|
ClassDB::bind_method(D_METHOD("get_body"), &SpeciesModelData::get_body);
|
||||||
ClassDB::bind_method(D_METHOD("set_skeleton", "value"), &SpeciesModelData::set_skeleton);
|
ClassDB::bind_method(D_METHOD("set_body", "value"), &SpeciesModelData::set_body);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skeleton", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_skeleton", "get_skeleton");
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "body", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_body", "get_body");
|
||||||
|
|
||||||
//Entries
|
//Entries
|
||||||
ClassDB::bind_method(D_METHOD("get_visual", "bone_index", "index"), &SpeciesModelData::get_visual);
|
ClassDB::bind_method(D_METHOD("get_visual", "bone_index", "index"), &SpeciesModelData::get_visual);
|
||||||
|
@ -43,8 +43,8 @@ public:
|
|||||||
int get_id();
|
int get_id();
|
||||||
void set_id(int value);
|
void set_id(int value);
|
||||||
|
|
||||||
Ref<PackedScene> get_skeleton();
|
Ref<PackedScene> get_body();
|
||||||
void set_skeleton(Ref<PackedScene> value);
|
void set_body(Ref<PackedScene> value);
|
||||||
|
|
||||||
//Entries
|
//Entries
|
||||||
Ref<ItemVisualEntry> get_visual(const int bone_index, const int index) const;
|
Ref<ItemVisualEntry> get_visual(const int bone_index, const int index) const;
|
||||||
@ -110,7 +110,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
int _id;
|
int _id;
|
||||||
|
|
||||||
Ref<PackedScene> _skeleton;
|
Ref<PackedScene> _body;
|
||||||
|
|
||||||
Vector<Ref<ItemVisualEntry> > _visuals[EntityEnums::SKELETON_POINTS_MAX];
|
Vector<Ref<ItemVisualEntry> > _visuals[EntityEnums::SKELETON_POINTS_MAX];
|
||||||
Vector<Color> _skin_colors;
|
Vector<Color> _skin_colors;
|
||||||
|
@ -37,6 +37,8 @@ SOFTWARE.
|
|||||||
#include "./data/character_spec.h"
|
#include "./data/character_spec.h"
|
||||||
#include "./data/talent_row_data.h"
|
#include "./data/talent_row_data.h"
|
||||||
#include "./skills/entity_skill.h"
|
#include "./skills/entity_skill.h"
|
||||||
|
#include "scene/2d/node_2d.h"
|
||||||
|
#include "scene/3d/spatial.h"
|
||||||
|
|
||||||
#include "core/script_language.h"
|
#include "core/script_language.h"
|
||||||
|
|
||||||
@ -48,7 +50,7 @@ NodePath Entity::get_body_path() {
|
|||||||
void Entity::set_body_path(NodePath value) {
|
void Entity::set_body_path(NodePath value) {
|
||||||
_body_path = value;
|
_body_path = value;
|
||||||
|
|
||||||
_body = get_node_or_null(_body_path);
|
set_body(get_node_or_null(_body_path));
|
||||||
|
|
||||||
#if VERSION_MAJOR < 4
|
#if VERSION_MAJOR < 4
|
||||||
if (ObjectDB::instance_validate(_body))
|
if (ObjectDB::instance_validate(_body))
|
||||||
@ -61,6 +63,17 @@ void Entity::set_body_path(NodePath value) {
|
|||||||
Node *Entity::get_body() {
|
Node *Entity::get_body() {
|
||||||
return _body;
|
return _body;
|
||||||
}
|
}
|
||||||
|
Spatial *Entity::get_body_3d() {
|
||||||
|
return _body_3d;
|
||||||
|
}
|
||||||
|
Node2D *Entity::get_body_2d() {
|
||||||
|
return _body_2d;
|
||||||
|
}
|
||||||
|
void Entity::set_body(Node *body) {
|
||||||
|
_body = body;
|
||||||
|
_body_2d = Object::cast_to<Node2D>(body);
|
||||||
|
_body_3d = Object::cast_to<Spatial>(body);
|
||||||
|
}
|
||||||
|
|
||||||
NodePath Entity::get_character_skeleton_path() {
|
NodePath Entity::get_character_skeleton_path() {
|
||||||
return _character_skeleton_path;
|
return _character_skeleton_path;
|
||||||
@ -73,6 +86,9 @@ void Entity::set_character_skeleton_path(NodePath value) {
|
|||||||
Node *Entity::get_character_skeleton() {
|
Node *Entity::get_character_skeleton() {
|
||||||
return _character_skeleton;
|
return _character_skeleton;
|
||||||
}
|
}
|
||||||
|
void Entity::set_character_skeleton(Node *skeleton) {
|
||||||
|
_character_skeleton = skeleton;
|
||||||
|
}
|
||||||
|
|
||||||
//GUID
|
//GUID
|
||||||
int Entity::gets_guid() {
|
int Entity::gets_guid() {
|
||||||
@ -93,6 +109,45 @@ void Entity::setc_guid(int value) {
|
|||||||
set_name(String::num(_c_guid));
|
set_name(String::num(_c_guid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Transforms
|
||||||
|
Transform Entity::get_transform_3d(bool only_stored) const {
|
||||||
|
if (!only_stored && _body_3d) {
|
||||||
|
ERR_FAIL_COND_V(!ObjectDB::instance_validate(_body_3d), _transform);
|
||||||
|
|
||||||
|
return _body_3d->get_transform();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _transform;
|
||||||
|
}
|
||||||
|
void Entity::set_transform_3d(const Transform &transform, bool only_stored) {
|
||||||
|
if (!only_stored && _body_3d) {
|
||||||
|
ERR_FAIL_COND(!ObjectDB::instance_validate(_body_3d));
|
||||||
|
|
||||||
|
return _body_3d->set_transform(transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
_transform = transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform2D Entity::get_transform_2d(bool only_stored) const {
|
||||||
|
if (!only_stored && _body_2d) {
|
||||||
|
ERR_FAIL_COND_V(!ObjectDB::instance_validate(_body_2d), _transform_2d);
|
||||||
|
|
||||||
|
return _body_2d->get_transform();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _transform_2d;
|
||||||
|
}
|
||||||
|
void Entity::set_transform_2d(const Transform2D &transform, bool only_stored) {
|
||||||
|
if (!only_stored && _body_2d) {
|
||||||
|
ERR_FAIL_COND(!ObjectDB::instance_validate(_body_2d));
|
||||||
|
|
||||||
|
return _body_2d->set_transform(_transform_2d);
|
||||||
|
}
|
||||||
|
|
||||||
|
_transform_2d = transform;
|
||||||
|
}
|
||||||
|
|
||||||
//EntityPlayerType
|
//EntityPlayerType
|
||||||
int Entity::gets_entity_player_type() {
|
int Entity::gets_entity_player_type() {
|
||||||
return _s_entity_player_type;
|
return _s_entity_player_type;
|
||||||
@ -402,6 +457,16 @@ void Entity::sets_entity_data(Ref<EntityData> value) {
|
|||||||
|
|
||||||
//setup();
|
//setup();
|
||||||
|
|
||||||
|
if (get_body() == NULL && value.is_valid() && value->get_entity_species_data().is_valid() &&
|
||||||
|
value->get_entity_species_data()->get_model_data().is_valid() &&
|
||||||
|
value->get_entity_species_data()->get_model_data()->get_body().is_valid()) {
|
||||||
|
|
||||||
|
Node *node = value->get_entity_species_data()->get_model_data()->get_body()->instance();
|
||||||
|
|
||||||
|
add_child(node);
|
||||||
|
set_body(node);
|
||||||
|
}
|
||||||
|
|
||||||
emit_signal("sentity_data_changed", value);
|
emit_signal("sentity_data_changed", value);
|
||||||
|
|
||||||
VRPC(setc_entity_data_id, _s_class_id);
|
VRPC(setc_entity_data_id, _s_class_id);
|
||||||
@ -414,6 +479,16 @@ Ref<EntityData> Entity::getc_entity_data() {
|
|||||||
void Entity::setc_entity_data(Ref<EntityData> value) {
|
void Entity::setc_entity_data(Ref<EntityData> value) {
|
||||||
_c_entity_data = value;
|
_c_entity_data = value;
|
||||||
|
|
||||||
|
if (get_body() == NULL && value.is_valid() && value->get_entity_species_data().is_valid() &&
|
||||||
|
value->get_entity_species_data()->get_model_data().is_valid() &&
|
||||||
|
value->get_entity_species_data()->get_model_data()->get_body().is_valid()) {
|
||||||
|
|
||||||
|
Node *node = value->get_entity_species_data()->get_model_data()->get_body()->instance();
|
||||||
|
|
||||||
|
add_child(node);
|
||||||
|
set_body(node);
|
||||||
|
}
|
||||||
|
|
||||||
emit_signal("centity_data_changed", value);
|
emit_signal("centity_data_changed", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5967,6 +6042,10 @@ Entity::Entity() {
|
|||||||
_maunal_process = false;
|
_maunal_process = false;
|
||||||
_deserialized = false;
|
_deserialized = false;
|
||||||
|
|
||||||
|
_body = NULL;
|
||||||
|
_body_3d = NULL;
|
||||||
|
_body_2d = NULL;
|
||||||
|
|
||||||
_s_guid = 0;
|
_s_guid = 0;
|
||||||
_c_guid = 0;
|
_c_guid = 0;
|
||||||
|
|
||||||
@ -6529,7 +6608,7 @@ void Entity::_slearn_spell(int id) {
|
|||||||
void Entity::_notification(int p_what) {
|
void Entity::_notification(int p_what) {
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_INSTANCED: {
|
case NOTIFICATION_INSTANCED: {
|
||||||
_body = get_node_or_null(_body_path);
|
set_body(get_node_or_null(_body_path));
|
||||||
|
|
||||||
#if VERSION_MAJOR < 4
|
#if VERSION_MAJOR < 4
|
||||||
if (ObjectDB::instance_validate(_body))
|
if (ObjectDB::instance_validate(_body))
|
||||||
@ -6551,7 +6630,7 @@ void Entity::_notification(int p_what) {
|
|||||||
set_process(true);
|
set_process(true);
|
||||||
|
|
||||||
if (!_body) {
|
if (!_body) {
|
||||||
_body = get_node_or_null(_body_path);
|
set_body(get_node_or_null(_body_path));
|
||||||
|
|
||||||
#if VERSION_MAJOR < 4
|
#if VERSION_MAJOR < 4
|
||||||
if (ObjectDB::instance_validate(_body))
|
if (ObjectDB::instance_validate(_body))
|
||||||
@ -7453,7 +7532,18 @@ void Entity::_bind_methods() {
|
|||||||
|
|
||||||
//skeleton
|
//skeleton
|
||||||
ClassDB::bind_method(D_METHOD("get_body"), &Entity::get_body);
|
ClassDB::bind_method(D_METHOD("get_body"), &Entity::get_body);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_body_3d"), &Entity::get_body_3d);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_body_2d"), &Entity::get_body_2d);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_body", "body"), &Entity::set_body);
|
||||||
ClassDB::bind_method(D_METHOD("get_character_skeleton"), &Entity::get_character_skeleton);
|
ClassDB::bind_method(D_METHOD("get_character_skeleton"), &Entity::get_character_skeleton);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_character_skeleton", "skeleton"), &Entity::set_character_skeleton);
|
||||||
|
|
||||||
|
//Transforms
|
||||||
|
ClassDB::bind_method(D_METHOD("get_transform_3d", "only_stored"), &Entity::get_transform_3d, DEFVAL(false));
|
||||||
|
ClassDB::bind_method(D_METHOD("set_transform_3d", "transform", "only_stored"), &Entity::set_transform_3d, DEFVAL(false));
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_transform_2d", "only_stored"), &Entity::get_transform_2d, DEFVAL(false));
|
||||||
|
ClassDB::bind_method(D_METHOD("set_transform_2d", "transform", "only_stored"), &Entity::set_transform_2d, DEFVAL(false));
|
||||||
|
|
||||||
//// Targeting System ////
|
//// Targeting System ////
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@ SOFTWARE.
|
|||||||
#include "./data/entity_data.h"
|
#include "./data/entity_data.h"
|
||||||
#include "core/hash_map.h"
|
#include "core/hash_map.h"
|
||||||
#include "core/io/json.h"
|
#include "core/io/json.h"
|
||||||
|
#include "core/math/transform.h"
|
||||||
|
#include "core/math/transform_2d.h"
|
||||||
#include "core/object.h"
|
#include "core/object.h"
|
||||||
#include "core/ustring.h"
|
#include "core/ustring.h"
|
||||||
#include "core/vector.h"
|
#include "core/vector.h"
|
||||||
@ -70,6 +72,8 @@ class TalentRowData;
|
|||||||
class CharacterSpec;
|
class CharacterSpec;
|
||||||
class EntitySkill;
|
class EntitySkill;
|
||||||
class ClassProfile;
|
class ClassProfile;
|
||||||
|
class Spatial;
|
||||||
|
class Node2D;
|
||||||
|
|
||||||
enum SpellCastDataSignals {
|
enum SpellCastDataSignals {
|
||||||
CastFailed,
|
CastFailed,
|
||||||
@ -197,10 +201,21 @@ public:
|
|||||||
NodePath get_body_path();
|
NodePath get_body_path();
|
||||||
void set_body_path(NodePath value);
|
void set_body_path(NodePath value);
|
||||||
Node *get_body();
|
Node *get_body();
|
||||||
|
Spatial *get_body_3d();
|
||||||
|
Node2D *get_body_2d();
|
||||||
|
void set_body(Node *body);
|
||||||
|
|
||||||
NodePath get_character_skeleton_path();
|
NodePath get_character_skeleton_path();
|
||||||
void set_character_skeleton_path(NodePath value);
|
void set_character_skeleton_path(NodePath value);
|
||||||
Node *get_character_skeleton();
|
Node *get_character_skeleton();
|
||||||
|
void set_character_skeleton(Node *skeleton);
|
||||||
|
|
||||||
|
//Transforms
|
||||||
|
Transform get_transform_3d(bool only_stored = false) const;
|
||||||
|
void set_transform_3d(const Transform &transform, bool only_stored = false);
|
||||||
|
|
||||||
|
Transform2D get_transform_2d(bool only_stored = false) const;
|
||||||
|
void set_transform_2d(const Transform2D &transform, bool only_stored = false);
|
||||||
|
|
||||||
//GUID
|
//GUID
|
||||||
int gets_guid();
|
int gets_guid();
|
||||||
@ -1023,10 +1038,17 @@ private:
|
|||||||
|
|
||||||
NodePath _body_path;
|
NodePath _body_path;
|
||||||
Node *_body;
|
Node *_body;
|
||||||
|
Spatial *_body_3d;
|
||||||
|
Node2D *_body_2d;
|
||||||
|
|
||||||
NodePath _character_skeleton_path;
|
NodePath _character_skeleton_path;
|
||||||
Node *_character_skeleton;
|
Node *_character_skeleton;
|
||||||
|
|
||||||
|
//// Transforms ////
|
||||||
|
|
||||||
|
Transform _transform;
|
||||||
|
Transform2D _transform_2d;
|
||||||
|
|
||||||
//// PlayerData ////
|
//// PlayerData ////
|
||||||
|
|
||||||
int _s_guid;
|
int _s_guid;
|
||||||
|
Loading…
Reference in New Issue
Block a user