mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-02-19 06:04:22 +01:00
Now TerrainChunks will remember whether they own a prop or not. Also added and bound missing methods to Chunk's prop api.
This commit is contained in:
parent
954ca26471
commit
1643197af3
@ -910,25 +910,50 @@ void TerrainChunk::clear_baked_lights() {
|
||||
}
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
void TerrainChunk::prop_add(const Transform &tarnsform, const Ref<PropData> &prop) {
|
||||
void TerrainChunk::prop_add(const Transform &tarnsform, const Ref<PropData> &prop, const bool p_owner) {
|
||||
ERR_FAIL_COND(!prop.is_valid());
|
||||
|
||||
PropDataStore s;
|
||||
s.owner = p_owner;
|
||||
s.transform = tarnsform;
|
||||
s.prop = prop;
|
||||
|
||||
_props.push_back(s);
|
||||
}
|
||||
|
||||
Ref<PropData> TerrainChunk::prop_get(int index) {
|
||||
ERR_FAIL_INDEX_V(index, _props.size(), Ref<PropData>());
|
||||
|
||||
return _props.get(index).prop;
|
||||
}
|
||||
void TerrainChunk::prop_set(const int index, const Ref<PropData> &p_prop) {
|
||||
ERR_FAIL_INDEX(index, _props.size());
|
||||
|
||||
_props.write[index].prop = p_prop;
|
||||
}
|
||||
|
||||
Transform TerrainChunk::prop_get_tarnsform(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _props.size(), Transform());
|
||||
|
||||
return _props.get(index).transform;
|
||||
}
|
||||
void TerrainChunk::prop_set_tarnsform(const int index, const Transform &p_transform) {
|
||||
ERR_FAIL_INDEX(index, _props.size());
|
||||
|
||||
_props.write[index].transform = p_transform;
|
||||
}
|
||||
|
||||
bool TerrainChunk::prop_get_is_owner(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _props.size(), false);
|
||||
|
||||
return _props.get(index).owner;
|
||||
}
|
||||
void TerrainChunk::prop_set_is_owner(const int index, const bool p_owner) {
|
||||
ERR_FAIL_INDEX(index, _props.size());
|
||||
|
||||
_props.write[index].owner = p_owner;
|
||||
}
|
||||
|
||||
int TerrainChunk::prop_get_count() const {
|
||||
return _props.size();
|
||||
}
|
||||
@ -947,6 +972,7 @@ Array TerrainChunk::props_get() {
|
||||
for (int i = 0; i < _props.size(); i++) {
|
||||
Array prop_data;
|
||||
|
||||
prop_data.push_back(_props[i].owner);
|
||||
prop_data.push_back(_props[i].transform);
|
||||
prop_data.push_back(_props[i].prop.get_ref_ptr());
|
||||
|
||||
@ -961,12 +987,13 @@ void TerrainChunk::props_set(const Array &p_props) {
|
||||
for (int i = 0; i < p_props.size(); ++i) {
|
||||
Array prop_data = p_props[i];
|
||||
|
||||
ERR_CONTINUE(prop_data.size() != 2);
|
||||
ERR_CONTINUE(prop_data.size() != 3);
|
||||
|
||||
Transform transform = prop_data[0];
|
||||
Ref<PropData> prop = Ref<PropData>(prop_data[1]);
|
||||
bool owner = prop_data[0];
|
||||
Transform transform = prop_data[1];
|
||||
Ref<PropData> prop = Ref<PropData>(prop_data[2]);
|
||||
|
||||
prop_add(transform, prop);
|
||||
prop_add(transform, prop, owner);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1795,8 +1822,17 @@ void TerrainChunk::_bind_methods() {
|
||||
//Meshes
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
ClassDB::bind_method(D_METHOD("prop_add", "prop"), &TerrainChunk::prop_add);
|
||||
ClassDB::bind_method(D_METHOD("prop_add", "prop", "owner"), &TerrainChunk::prop_add, DEFVAL(true));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_get", "index"), &TerrainChunk::prop_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_set", "index", "prop"), &TerrainChunk::prop_set);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_get_tarnsform", "index"), &TerrainChunk::prop_get_tarnsform);
|
||||
ClassDB::bind_method(D_METHOD("prop_set_tarnsform", "index", "transform"), &TerrainChunk::prop_set_tarnsform);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_get_is_owner", "index"), &TerrainChunk::prop_get_is_owner);
|
||||
ClassDB::bind_method(D_METHOD("prop_set_is_owner", "index", "owner"), &TerrainChunk::prop_set_is_owner);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_get_count"), &TerrainChunk::prop_get_count);
|
||||
ClassDB::bind_method(D_METHOD("prop_remove", "index"), &TerrainChunk::prop_remove);
|
||||
ClassDB::bind_method(D_METHOD("props_clear"), &TerrainChunk::props_clear);
|
||||
|
@ -260,9 +260,17 @@ public:
|
||||
void clear_baked_lights();
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
void prop_add(const Transform &tarnsform, const Ref<PropData> &prop);
|
||||
void prop_add(const Transform &tarnsform, const Ref<PropData> &prop, const bool p_owner = true);
|
||||
|
||||
Ref<PropData> prop_get(const int index);
|
||||
void prop_set(const int index, const Ref<PropData> &p_prop);
|
||||
|
||||
Transform prop_get_tarnsform(const int index);
|
||||
void prop_set_tarnsform(const int index, const Transform &p_transform);
|
||||
|
||||
bool prop_get_is_owner(const int index);
|
||||
void prop_set_is_owner(const int index, const bool p_owner);
|
||||
|
||||
int prop_get_count() const;
|
||||
void prop_remove(const int index);
|
||||
void props_clear();
|
||||
@ -353,6 +361,7 @@ protected:
|
||||
protected:
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
struct PropDataStore {
|
||||
bool owner;
|
||||
Transform transform;
|
||||
Ref<PropData> prop;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user