mirror of
https://github.com/Relintai/entity_spell_system.git
synced 2025-05-11 22:42:10 +02:00
ESSEntitySpawner is now inherited from Node instead of from Resource. This will make networked spawning code simpler, and more intuitive.
This commit is contained in:
parent
aaf6ea68d2
commit
7267f327cb
@ -88,13 +88,17 @@ void ESS::set_resource_db(const Ref<ESSResourceDB> &resource_db) {
|
||||
_ess_resource_db = resource_db;
|
||||
}
|
||||
|
||||
Ref<ESSEntitySpawner> ESS::get_entity_spawner() {
|
||||
ESSEntitySpawner *ESS::get_entity_spawner() {
|
||||
return _ess_entity_spawner;
|
||||
}
|
||||
void ESS::set_entity_spawner(const Ref<ESSEntitySpawner> &spawner) {
|
||||
void ESS::set_entity_spawner(ESSEntitySpawner *spawner) {
|
||||
_ess_entity_spawner = spawner;
|
||||
}
|
||||
|
||||
void ESS::set_entity_spawner_bind(Node *spawner) {
|
||||
_ess_entity_spawner = Object::cast_to<ESSEntitySpawner>(spawner);
|
||||
}
|
||||
|
||||
String ESS::get_resource_db_path() {
|
||||
return _ess_resource_db_path;
|
||||
}
|
||||
@ -102,19 +106,12 @@ void ESS::set_resource_db_path(const String &path) {
|
||||
_ess_resource_db_path = path;
|
||||
}
|
||||
|
||||
String ESS::get_entity_spawner_path() {
|
||||
return _ess_entity_spawner_path;
|
||||
}
|
||||
void ESS::set_entity_spawner_path(const String &path) {
|
||||
_ess_entity_spawner_path = path;
|
||||
}
|
||||
|
||||
void ESS::request_entity_spawn(Ref<EntityCreateInfo> info) {
|
||||
if (_ess_entity_spawner.is_valid())
|
||||
if (_ess_entity_spawner)
|
||||
_ess_entity_spawner->request_entity_spawn(info);
|
||||
}
|
||||
void ESS::request_entity_spawn_deferred(Ref<EntityCreateInfo> info) {
|
||||
if (_ess_entity_spawner.is_valid())
|
||||
if (_ess_entity_spawner)
|
||||
_ess_entity_spawner->request_entity_spawn_deferred(info);
|
||||
}
|
||||
|
||||
@ -130,18 +127,6 @@ void ESS::load_resource_db() {
|
||||
_ess_resource_db = d;
|
||||
}
|
||||
|
||||
void ESS::load_entity_spawner() {
|
||||
_Directory dir;
|
||||
|
||||
ERR_FAIL_COND(_ess_entity_spawner_path == "");
|
||||
|
||||
Ref<ESSEntitySpawner> d = load_resource(_ess_entity_spawner_path, "ESSEntitySpawner");
|
||||
|
||||
ERR_FAIL_COND(!d.is_valid());
|
||||
|
||||
_ess_entity_spawner = d;
|
||||
}
|
||||
|
||||
Ref<Resource> ESS::load_resource(const String &path, const String &type_hint) {
|
||||
_ResourceLoader *rl = _ResourceLoader::get_singleton();
|
||||
|
||||
@ -160,16 +145,10 @@ Ref<Resource> ESS::load_resource(const String &path, const String &type_hint) {
|
||||
|
||||
void ESS::load_all() {
|
||||
load_resource_db();
|
||||
load_entity_spawner();
|
||||
|
||||
_ess_resource_db->initialize();
|
||||
}
|
||||
|
||||
void ESS::setup(const Ref<ESSResourceDB> &resource_db, const Ref<ESSEntitySpawner> &entity_spawner) {
|
||||
_ess_resource_db = resource_db;
|
||||
_ess_entity_spawner = entity_spawner;
|
||||
}
|
||||
|
||||
//Stats
|
||||
void ESS::stat_set_string(const String &stat_enum_string) {
|
||||
_stat_enum_string = stat_enum_string;
|
||||
@ -564,20 +543,15 @@ void ESS::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "resource_db", PROPERTY_HINT_RESOURCE_TYPE, "ESSResourceDB"), "set_resource_db", "get_resource_db");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_entity_spawner"), &ESS::get_entity_spawner);
|
||||
ClassDB::bind_method(D_METHOD("set_entity_spawner"), &ESS::set_entity_spawner);
|
||||
ClassDB::bind_method(D_METHOD("set_entity_spawner"), &ESS::set_entity_spawner_bind);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "entity_spawner", PROPERTY_HINT_RESOURCE_TYPE, "ESSEntitySpawner"), "set_entity_spawner", "get_entity_spawner");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_resource_db_path"), &ESS::get_resource_db_path);
|
||||
ClassDB::bind_method(D_METHOD("set_resource_db_path", "path"), &ESS::set_resource_db_path);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "resource_db_path"), "set_resource_db_path", "get_resource_db_path");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_entity_spawner_path"), &ESS::get_entity_spawner_path);
|
||||
ClassDB::bind_method(D_METHOD("set_entity_spawner_path", "path"), &ESS::set_entity_spawner_path);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "entity_spawner_path"), "set_entity_spawner_path", "get_entity_spawner_path");
|
||||
|
||||
//load
|
||||
ClassDB::bind_method(D_METHOD("load_resource_db"), &ESS::load_resource_db);
|
||||
ClassDB::bind_method(D_METHOD("load_entity_spawner"), &ESS::load_entity_spawner);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("load_resource", "path", "type_hint"), &ESS::load_resource, DEFVAL(""));
|
||||
|
||||
@ -586,8 +560,6 @@ void ESS::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("load_all"), &ESS::load_all);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("setup", "resource_db", "entity_spawner"), &ESS::setup);
|
||||
|
||||
//Stats
|
||||
ClassDB::bind_method(D_METHOD("stat_get_string"), &ESS::stat_get_string);
|
||||
ClassDB::bind_method(D_METHOD("stat_set_string", "stat_enum_string"), &ESS::stat_set_string);
|
||||
@ -682,6 +654,7 @@ void ESS::_bind_methods() {
|
||||
|
||||
ESS::ESS() {
|
||||
instance = this;
|
||||
_ess_entity_spawner = NULL;
|
||||
|
||||
_use_spell_points = GLOBAL_DEF("ess/spells/use_spell_points", false);
|
||||
_scale_spells_by_default = GLOBAL_DEF("ess/spells/scale_spells_by_default", false);
|
||||
@ -696,7 +669,6 @@ ESS::ESS() {
|
||||
_automatic_load = GLOBAL_DEF("ess/data/automatic_load", false);
|
||||
|
||||
_ess_resource_db_path = GLOBAL_DEF("ess/data/ess_resource_db_path", "");
|
||||
_ess_entity_spawner_path = GLOBAL_DEF("ess/data/ess_entity_spawner_path", "");
|
||||
|
||||
stat_set_string(GLOBAL_DEF("ess/enums/stats", "Agility,Strength,Stamina,Intellect,Spirit,Health,Speed,Global Cooldown,Haste"));
|
||||
_stat_main_stat_count = GLOBAL_DEF("ess/enums/main_stat_count", 5);
|
||||
@ -727,7 +699,7 @@ ESS::~ESS() {
|
||||
instance = NULL;
|
||||
|
||||
_ess_resource_db.unref();
|
||||
_ess_entity_spawner.unref();
|
||||
_ess_entity_spawner = NULL;
|
||||
|
||||
_stat_id_to_name.clear();
|
||||
_stat_name_to_id.clear();
|
||||
|
@ -72,26 +72,21 @@ public:
|
||||
Ref<ESSResourceDB> get_resource_db();
|
||||
void set_resource_db(const Ref<ESSResourceDB> &resource_db);
|
||||
|
||||
Ref<ESSEntitySpawner> get_entity_spawner();
|
||||
void set_entity_spawner(const Ref<ESSEntitySpawner> &spawner);
|
||||
ESSEntitySpawner *get_entity_spawner();
|
||||
void set_entity_spawner(ESSEntitySpawner *spawner);
|
||||
void set_entity_spawner_bind(Node *spawner);
|
||||
|
||||
String get_resource_db_path();
|
||||
void set_resource_db_path(const String &path);
|
||||
|
||||
String get_entity_spawner_path();
|
||||
void set_entity_spawner_path(const String &path);
|
||||
|
||||
void request_entity_spawn(Ref<EntityCreateInfo> info);
|
||||
void request_entity_spawn_deferred(Ref<EntityCreateInfo> info);
|
||||
|
||||
void load_resource_db();
|
||||
void load_entity_spawner();
|
||||
Ref<Resource> load_resource(const String &path, const String &type_hint = "");
|
||||
|
||||
void load_all();
|
||||
|
||||
void setup(const Ref<ESSResourceDB> &resource_db, const Ref<ESSEntitySpawner> &entity_spawner);
|
||||
|
||||
//Stats
|
||||
String stat_get_string() const;
|
||||
void stat_set_string(const String &stat_enum_string);
|
||||
@ -188,10 +183,9 @@ private:
|
||||
bool _automatic_load;
|
||||
|
||||
Ref<ESSResourceDB> _ess_resource_db;
|
||||
Ref<ESSEntitySpawner> _ess_entity_spawner;
|
||||
ESSEntitySpawner *_ess_entity_spawner;
|
||||
|
||||
String _ess_resource_db_path;
|
||||
String _ess_entity_spawner_path;
|
||||
|
||||
static ESS *instance;
|
||||
|
||||
|
@ -22,6 +22,8 @@ SOFTWARE.
|
||||
|
||||
#include "ess_entity_spawner.h"
|
||||
|
||||
#include "../singletons/ess.h"
|
||||
|
||||
#include "../utility/entity_create_info.h"
|
||||
|
||||
_FORCE_INLINE_ void ESSEntitySpawner::request_entity_spawn(Ref<EntityCreateInfo> info) {
|
||||
@ -35,17 +37,21 @@ _FORCE_INLINE_ void ESSEntitySpawner::request_entity_spawn_deferred(Ref<EntityCr
|
||||
}
|
||||
|
||||
ESSEntitySpawner::ESSEntitySpawner() {
|
||||
if (ESS::get_singleton()) {
|
||||
ESS::get_singleton()->set_entity_spawner(this);
|
||||
}
|
||||
}
|
||||
|
||||
ESSEntitySpawner::~ESSEntitySpawner() {
|
||||
if (ESS::get_singleton() && ESS::get_singleton()->get_entity_spawner() == this) {
|
||||
ESS::get_singleton()->set_entity_spawner(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void ESSEntitySpawner::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_request_entity_spawn", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "EntityCreateInfo")));
|
||||
ADD_SIGNAL(MethodInfo("on_entity_spawn", PropertyInfo(Variant::OBJECT, "info", PROPERTY_HINT_RESOURCE_TYPE, "EntityCreateInfo")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_scene_tree"), &ESSEntitySpawner::get_scene_tree);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("request_entity_spawn", "info"), &ESSEntitySpawner::request_entity_spawn);
|
||||
ClassDB::bind_method(D_METHOD("request_entity_spawn_deferred", "info"), &ESSEntitySpawner::request_entity_spawn_deferred);
|
||||
}
|
||||
|
@ -23,20 +23,16 @@ SOFTWARE.
|
||||
#ifndef ESS_ENTITY_SPAWNER_H
|
||||
#define ESS_ENTITY_SPAWNER_H
|
||||
|
||||
#include "core/resource.h"
|
||||
#include "scene/main/node.h"
|
||||
|
||||
#include "scene/main/scene_tree.h"
|
||||
|
||||
class EntityCreateInfo;
|
||||
|
||||
class ESSEntitySpawner : public Resource {
|
||||
GDCLASS(ESSEntitySpawner, Resource);
|
||||
class ESSEntitySpawner : public Node {
|
||||
GDCLASS(ESSEntitySpawner, Node);
|
||||
|
||||
public:
|
||||
_FORCE_INLINE_ SceneTree *get_scene_tree() const {
|
||||
return SceneTree::get_singleton();
|
||||
}
|
||||
|
||||
void request_entity_spawn(Ref<EntityCreateInfo> info);
|
||||
void request_entity_spawn_deferred(Ref<EntityCreateInfo> info);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user