Generated stuff removal done, closes #27

This commit is contained in:
2024-09-14 20:10:00 +03:00
parent e720697b70
commit 196ce25dbe
2 changed files with 19 additions and 5 deletions

View File

@@ -52,6 +52,7 @@ void StreamWorld::read_buildings_json(const String &buildings_path)
e = e->next(); e = e->next();
} }
#endif #endif
filter_generated_stuff();
print_line("entries count: " + itos(buildings.size())); 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 buildings_json = FileAccess::get_file_as_string(buildings_path);
String backup_path = buildings_path + ".bak"; String backup_path = buildings_path + ".bak";
String store_path = buildings_path; String store_path = buildings_path;
filter_generated_stuff();
FileAccess *fa = FileAccess::open(backup_path, FileAccess::WRITE); FileAccess *fa = FileAccess::open(backup_path, FileAccess::WRITE);
fa->store_string(buildings_json); fa->store_string(buildings_json);
fa->close(); fa->close();
@@ -87,6 +89,7 @@ void StreamWorld::building::from_dict(building *b, const Dictionary &dict,
b->xform = from_string<Transform>(key); b->xform = from_string<Transform>(key);
b->id = dict.get("id", "empty"); b->id = dict.get("id", "empty");
b->pattern_id = dict.get("pattern_id", 0); b->pattern_id = dict.get("pattern_id", 0);
b->generated = dict.get("generated", false);
Array residents = dict.get("residents", Array()); Array residents = dict.get("residents", Array());
b->residents.resize(residents.size()); b->residents.resize(residents.size());
for (i = 0; i < (int)residents.size(); i++) for (i = 0; i < (int)residents.size(); i++)
@@ -130,6 +133,7 @@ Dictionary StreamWorld::building::to_dict() const
Dictionary ret; Dictionary ret;
ret["id"] = id; ret["id"] = id;
ret["pattern_id"] = pattern_id; ret["pattern_id"] = pattern_id;
ret["generated"] = generated;
Array r, w, g; Array r, w, g;
v2a(r, residents); v2a(r, residents);
ret["residents"] = r; ret["residents"] = r;
@@ -378,25 +382,33 @@ void StreamWorld::update_items()
} }
} }
void StreamWorld::remove_generated_stuff() void StreamWorld::filter_generated_stuff()
{ {
ConfigFile config; ConfigFile config;
Error result = config.load("res://config/stream.conf"); Error result = config.load("res://config/stream.conf");
ERR_FAIL_COND_MSG(result != OK, "Failed to load config"); ERR_FAIL_COND_MSG(result != OK, "Failed to load config");
Array gen_prefixes = config.get_value("lines", "gen_prefixes"); Array gen_prefixes = config.get_value("lines", "gen_prefixes");
// TODO: implement
std::vector<int> erased_indices;
erased_indices.reserve(buildings.size());
int i, j; int i, j;
for (i = 0; i < (int)buildings.size(); i++) { for (i = 0; i < (int)buildings.size(); i++) {
for (j = 0; j < (int)gen_prefixes.size(); j++) { for (j = 0; j < (int)gen_prefixes.size(); j++) {
String prefix = gen_prefixes[j]; String prefix = gen_prefixes[j];
if (buildings[i].id.begins_with(prefix)) { if (buildings[i].id.begins_with(prefix)) {
erased_indices.push_back(i); buildings[i].generated = true;
break; 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--) { for (i = erased_indices.size() - 1; i >= 0; i--) {
int index = erased_indices[i]; int index = erased_indices[i];
unload_building(index); unload_building(index);

View File

@@ -25,6 +25,7 @@ private:
Transform xform; Transform xform;
AABB aabb; AABB aabb;
int worktime[2]; int worktime[2];
bool generated;
static void from_dict(struct building *b, static void from_dict(struct building *b,
const Dictionary &dict, const Dictionary &dict,
const String &key); const String &key);
@@ -80,6 +81,7 @@ private:
void unload_building(int id); void unload_building(int id);
void request_item(int type, int item); void request_item(int type, int item);
void update_items(); void update_items();
void filter_generated_stuff();
void remove_generated_stuff(); void remove_generated_stuff();
void remove_building(int index); void remove_building(int index);
void checkpoint(); void checkpoint();