mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-04-08 04:51:49 +02:00
Implement setting a name to scenes in TerrainChunk.
This commit is contained in:
parent
5d036590dd
commit
0847706fa2
@ -915,10 +915,11 @@ void TerrainChunk::voxel_structures_set(const Vector<Variant> &structures) {
|
||||
|
||||
//Scenes
|
||||
|
||||
void TerrainChunk::scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform, const Node *p_node, const bool p_original) {
|
||||
void TerrainChunk::scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform, const Node *p_node, const bool p_original, const String &p_name) {
|
||||
ERR_FAIL_COND(!p_scene.is_valid());
|
||||
|
||||
SceneDataStore s;
|
||||
s.name = p_name;
|
||||
s.original = p_original;
|
||||
s.transform = p_transform;
|
||||
s.scene = p_scene;
|
||||
@ -976,6 +977,19 @@ void TerrainChunk::scene_set_is_original(const int index, const bool p_original)
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
String TerrainChunk::scene_get_name(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _scenes.size(), String());
|
||||
|
||||
return _scenes.get(index).name;
|
||||
}
|
||||
void TerrainChunk::scene_set_name(const int index, const String &p_name) {
|
||||
ERR_FAIL_INDEX(index, _scenes.size());
|
||||
|
||||
_scenes.write[index].name = p_name;
|
||||
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
Node *TerrainChunk::scene_get_node(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _scenes.size(), 0);
|
||||
|
||||
@ -1081,6 +1095,7 @@ Array TerrainChunk::scenes_get() {
|
||||
scene_data.push_back(_scenes[i].original);
|
||||
scene_data.push_back(_scenes[i].transform);
|
||||
scene_data.push_back(_scenes[i].scene.get_ref_ptr());
|
||||
scene_data.push_back(_scenes[i].name);
|
||||
|
||||
ret.push_back(scene_data);
|
||||
}
|
||||
@ -1093,13 +1108,17 @@ void TerrainChunk::scenes_set(const Array &p_scenes) {
|
||||
for (int i = 0; i < p_scenes.size(); ++i) {
|
||||
Array scene_data = p_scenes[i];
|
||||
|
||||
ERR_CONTINUE(scene_data.size() != 3);
|
||||
ERR_CONTINUE(scene_data.size() != 3 || scene_data.size() != 4);
|
||||
|
||||
bool original = scene_data[0];
|
||||
Transform transform = scene_data[1];
|
||||
Ref<PackedScene> scene = Ref<PackedScene>(scene_data[2]);
|
||||
String name;
|
||||
if (scene_data.size() > 3) {
|
||||
name = scene_data[3];
|
||||
}
|
||||
|
||||
scene_add(scene, transform, NULL, original);
|
||||
scene_add(scene, transform, NULL, original, name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2196,7 +2215,7 @@ void TerrainChunk::_bind_methods() {
|
||||
|
||||
//Scenes
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "scene", "transform", "node", "original"), &TerrainChunk::scene_add, DEFVAL(Transform()), DEFVAL(Variant()), DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "scene", "transform", "node", "original", "name"), &TerrainChunk::scene_add, DEFVAL(Transform()), DEFVAL(Variant()), DEFVAL(true), DEFVAL(String()));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_get", "index"), &TerrainChunk::scene_get);
|
||||
ClassDB::bind_method(D_METHOD("scene_set", "index", "scene"), &TerrainChunk::scene_set);
|
||||
@ -2207,6 +2226,9 @@ void TerrainChunk::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("scene_get_is_original", "index"), &TerrainChunk::scene_get_is_original);
|
||||
ClassDB::bind_method(D_METHOD("scene_set_is_original", "index", "original"), &TerrainChunk::scene_set_is_original);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_get_name", "index"), &TerrainChunk::scene_get_name);
|
||||
ClassDB::bind_method(D_METHOD("scene_set_name", "index", "name"), &TerrainChunk::scene_set_name);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_get_node", "index"), &TerrainChunk::scene_get_node);
|
||||
ClassDB::bind_method(D_METHOD("scene_set_node", "index", "node"), &TerrainChunk::scene_set_node);
|
||||
|
||||
|
@ -248,7 +248,7 @@ public:
|
||||
void voxel_structures_set(const Vector<Variant> &structures);
|
||||
|
||||
//Scenes
|
||||
void scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform = Transform(), const Node *p_node = NULL, const bool p_original = true);
|
||||
void scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform = Transform(), const Node *p_node = NULL, const bool p_original = true, const String &p_name = String());
|
||||
|
||||
Ref<PackedScene> scene_get(const int index);
|
||||
void scene_set(const int index, const Ref<PackedScene> &p_scene);
|
||||
@ -259,6 +259,9 @@ public:
|
||||
bool scene_get_is_original(const int index);
|
||||
void scene_set_is_original(const int index, const bool p_original);
|
||||
|
||||
String scene_get_name(const int index);
|
||||
void scene_set_name(const int index, const String &p_name);
|
||||
|
||||
Node *scene_get_node(const int index);
|
||||
void scene_set_node(const int index, const Node *p_node);
|
||||
|
||||
@ -395,6 +398,7 @@ protected:
|
||||
|
||||
protected:
|
||||
struct SceneDataStore {
|
||||
String name;
|
||||
bool original;
|
||||
Transform transform;
|
||||
Ref<PackedScene> scene;
|
||||
|
@ -613,14 +613,14 @@ int TerrainWorld::generation_get_size() const {
|
||||
return _generating.size();
|
||||
}
|
||||
|
||||
void TerrainWorld::scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform, const Node *p_node, const bool p_original) {
|
||||
void TerrainWorld::scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform, const Node *p_node, const bool p_original, const String &p_name) {
|
||||
ERR_FAIL_COND(!p_scene.is_valid());
|
||||
|
||||
Vector3 wp;
|
||||
wp = p_transform.xform(wp);
|
||||
Ref<TerrainChunk> chunk = get_or_create_chunk_at_world_position(wp);
|
||||
|
||||
chunk->scene_add(p_scene, p_transform, p_node, p_original);
|
||||
chunk->scene_add(p_scene, p_transform, p_node, p_original, p_name);
|
||||
}
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
@ -1619,7 +1619,7 @@ void TerrainWorld::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("is_position_walkable", "position"), &TerrainWorld::is_position_walkable);
|
||||
ClassDB::bind_method(D_METHOD("on_chunk_mesh_generation_finished", "chunk"), &TerrainWorld::on_chunk_mesh_generation_finished);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "scene", "transform", "node", "original"), &TerrainWorld::scene_add, DEFVAL(Transform()), DEFVAL(Variant()), DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "scene", "transform", "node", "original", "name"), &TerrainWorld::scene_add, DEFVAL(Transform()), DEFVAL(Variant()), DEFVAL(true), DEFVAL(String()));
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
ClassDB::bind_method(D_METHOD("prop_add", "transform", "prop", "apply_voxel_scale", "original", "name"), &TerrainWorld::prop_add, DEFVAL(true), DEFVAL(true), DEFVAL(String()));
|
||||
|
@ -175,7 +175,7 @@ public:
|
||||
void generation_remove_index(const int index);
|
||||
int generation_get_size() const;
|
||||
|
||||
void scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform = Transform(), const Node *p_node = NULL, const bool p_original = true);
|
||||
void scene_add(const Ref<PackedScene> &p_scene, const Transform &p_transform = Transform(), const Node *p_node = NULL, const bool p_original = true, const String &p_name = String());
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
void prop_add(Transform transform, const Ref<PropData> &prop, const bool apply_voxel_scale = true, const bool p_original = true, const String &p_name = String());
|
||||
|
Loading…
Reference in New Issue
Block a user