Generated stuff removal done, closes #27
This commit is contained in:
@@ -52,6 +52,7 @@ void StreamWorld::read_buildings_json(const String &buildings_path)
|
||||
e = e->next();
|
||||
}
|
||||
#endif
|
||||
filter_generated_stuff();
|
||||
print_line("entries count: " + itos(buildings.size()));
|
||||
}
|
||||
|
||||
@@ -61,6 +62,7 @@ void StreamWorld::save_buildings_json(const String &buildings_path)
|
||||
String buildings_json = FileAccess::get_file_as_string(buildings_path);
|
||||
String backup_path = buildings_path + ".bak";
|
||||
String store_path = buildings_path;
|
||||
filter_generated_stuff();
|
||||
FileAccess *fa = FileAccess::open(backup_path, FileAccess::WRITE);
|
||||
fa->store_string(buildings_json);
|
||||
fa->close();
|
||||
@@ -87,6 +89,7 @@ void StreamWorld::building::from_dict(building *b, const Dictionary &dict,
|
||||
b->xform = from_string<Transform>(key);
|
||||
b->id = dict.get("id", "empty");
|
||||
b->pattern_id = dict.get("pattern_id", 0);
|
||||
b->generated = dict.get("generated", false);
|
||||
Array residents = dict.get("residents", Array());
|
||||
b->residents.resize(residents.size());
|
||||
for (i = 0; i < (int)residents.size(); i++)
|
||||
@@ -130,6 +133,7 @@ Dictionary StreamWorld::building::to_dict() const
|
||||
Dictionary ret;
|
||||
ret["id"] = id;
|
||||
ret["pattern_id"] = pattern_id;
|
||||
ret["generated"] = generated;
|
||||
Array r, w, g;
|
||||
v2a(r, residents);
|
||||
ret["residents"] = r;
|
||||
@@ -378,25 +382,33 @@ void StreamWorld::update_items()
|
||||
}
|
||||
}
|
||||
|
||||
void StreamWorld::remove_generated_stuff()
|
||||
void StreamWorld::filter_generated_stuff()
|
||||
{
|
||||
ConfigFile config;
|
||||
Error result = config.load("res://config/stream.conf");
|
||||
ERR_FAIL_COND_MSG(result != OK, "Failed to load config");
|
||||
Array gen_prefixes = config.get_value("lines", "gen_prefixes");
|
||||
// TODO: implement
|
||||
std::vector<int> erased_indices;
|
||||
erased_indices.reserve(buildings.size());
|
||||
int i, j;
|
||||
for (i = 0; i < (int)buildings.size(); i++) {
|
||||
for (j = 0; j < (int)gen_prefixes.size(); j++) {
|
||||
String prefix = gen_prefixes[j];
|
||||
if (buildings[i].id.begins_with(prefix)) {
|
||||
erased_indices.push_back(i);
|
||||
buildings[i].generated = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StreamWorld::remove_generated_stuff()
|
||||
{
|
||||
std::vector<int> erased_indices;
|
||||
erased_indices.reserve(buildings.size());
|
||||
int i, j;
|
||||
for (i = 0; i < (int)buildings.size(); i++) {
|
||||
if (buildings[i].generated)
|
||||
erased_indices.push_back(i);
|
||||
}
|
||||
for (i = erased_indices.size() - 1; i >= 0; i--) {
|
||||
int index = erased_indices[i];
|
||||
unload_building(index);
|
||||
|
||||
@@ -25,6 +25,7 @@ private:
|
||||
Transform xform;
|
||||
AABB aabb;
|
||||
int worktime[2];
|
||||
bool generated;
|
||||
static void from_dict(struct building *b,
|
||||
const Dictionary &dict,
|
||||
const String &key);
|
||||
@@ -80,6 +81,7 @@ private:
|
||||
void unload_building(int id);
|
||||
void request_item(int type, int item);
|
||||
void update_items();
|
||||
void filter_generated_stuff();
|
||||
void remove_generated_stuff();
|
||||
void remove_building(int index);
|
||||
void checkpoint();
|
||||
|
||||
Reference in New Issue
Block a user