Getting room types from file

This commit is contained in:
2024-10-27 00:32:04 +03:00
parent 0356746749
commit 6eb584f73c
3 changed files with 111 additions and 52 deletions

View File

@@ -0,0 +1,23 @@
[rooms]
private = [
[200, "WC", { "window": false }],
[201, "Bathroom", { "window": false }],
[202, "Bedroom", { "window": true }],
[203, "Holding Cell", { "window": true }],
[204, "Torture Room", { "window": false }]
]
public = [
[300, "Living Room", { "window": true }],
[301, "Family Room", { "window": true }],
[302, "Kitchen", { "window": true }],
[303, "Dining Room", { "window": true }],
[304, "Enterance", { "window": true }],
[305, "Stair", { "window": true }],
[306, "Elevator", { "window": true }],
[307, "Storage Room", { "window": true }],
[308, "Cellar", { "window": true }],
[309, "Office", { "window": true }],
[310, "Server Room", { "window": true }],
[311, "Room", { "window": true }]
]

View File

@@ -23,6 +23,9 @@ class BuildingLayoutGraphUI : public Object {
Control *canvas_item; Control *canvas_item;
Button *button; Button *button;
String current_layout; String current_layout;
ConfigFile config;
Array public_rooms;
Array private_rooms;
public: public:
BuildingLayoutGraphUI(MainTabs *gui, WindowDialog *dlg) BuildingLayoutGraphUI(MainTabs *gui, WindowDialog *dlg)
@@ -33,6 +36,10 @@ public:
, button(nullptr) , button(nullptr)
{ {
dlg->connect("tree_entered", this, "tree_entered"); dlg->connect("tree_entered", this, "tree_entered");
Error err = config.load("res://astream/building_layout.conf");
assert(err == OK);
public_rooms = config.get_value("rooms", "public", Array());
private_rooms = config.get_value("rooms", "private", Array());
} }
void menu_pressed(int id, Control *button, const String &path) void menu_pressed(int id, Control *button, const String &path)
{ {
@@ -79,6 +86,39 @@ public:
buildings_layout_zone>({ 1 }); buildings_layout_zone>({ 1 });
} }
} break; } break;
default: {
int i;
int count = 0;
Array rooms;
rooms.append_array(private_rooms);
rooms.append_array(public_rooms);
int index = -1;
for (i = 0; i < rooms.size(); i++) {
Array room_data = rooms[i];
int room_id = room_data[0];
if (room_id == id) {
index = i;
break;
}
}
Array room = rooms[index];
String type_name = room[1];
Dictionary room_options = room[2];
bool window = room_options.get("window", false);
type_name = type_name.replace(" ", "_").to_lower();
base_e.children([type_name, &count](flecs::entity e) {
String name(e.name());
if (name.begins_with(type_name + "_" +
itos(count)))
count++;
});
String ename = type_name + "_" + itos(count);
flecs::entity new_e =
ecs.entity(ename.ascii().ptr()).child_of(base_e);
new_e.set<WorldEditor::components::buildings_layout_room>(
{ id, window });
} break;
} }
update_graph(); update_graph();
} }
@@ -325,65 +365,41 @@ public:
buildings_layout_zone>() buildings_layout_zone>()
->type; ->type;
if (zone_type == 0) { if (zone_type == 0) {
int i;
button->set_text( button->set_text(
button->get_text() + button->get_text() +
"Private Zone\n"); "Private Zone\n");
button->get_popup()->add_item( for (i = 0;
"Create WC", 200); i < private_rooms.size();
button->get_popup()->add_item( i++) {
"Create Bathroom", 201); Array room_data =
button->get_popup()->add_item( private_rooms[i];
"Create Bedroom", 202); int id = room_data[0];
button->get_popup()->add_item( String room_name =
"Create Holding Cell", room_data[1];
203); button->get_popup()->add_item(
button->get_popup()->add_item( "Create " +
"Create Torture Room", room_name,
203); id);
}
} else if (zone_type == 1) { } else if (zone_type == 1) {
int i;
button->set_text( button->set_text(
button->get_text() + button->get_text() +
"Public Zone\n"); "Public Zone\n");
button->get_popup()->add_item( for (i = 0;
"Create Living Room", i < public_rooms.size();
300); i++) {
button->get_popup()->add_item( Array room_data =
"Create Family Room", public_rooms[i];
301); int id = room_data[0];
button->get_popup()->add_item( String room_name =
"Create Kitchen", 302); room_data[1];
button->get_popup()->add_item( button->get_popup()->add_item(
"Create Dinging Room", "Create " +
303); room_name,
button->get_popup()->add_item( id);
"Create Enterance", }
304);
button->get_popup()->add_item(
"Create Stair", 305);
button->get_popup()->add_item(
"Create Elevator", 306);
button->get_popup()->add_item(
"Create Storage Room",
307);
button->get_popup()->add_item(
"Create Cellar", 308);
button->get_popup()->add_item(
"Create Office", 309);
button->get_popup()->add_item(
"Create Server Room",
310);
button->get_popup()->add_item(
"Create Room", 311);
PopupMenu *mp =
memnew(PopupMenu);
mp->add_child(memnew(LineEdit));
button->get_popup()->add_child(
mp);
mp->set_name("subedit");
button->get_popup()
->add_submenu_item(
"SubEdit Moo",
"subedit", 400);
} }
button->set_text(button->get_text() + button->set_text(button->get_text() +
String(e.name())); String(e.name()));
@@ -398,6 +414,22 @@ public:
"Create hallway", 103); "Create hallway", 103);
#endif #endif
} }
if (e.has<WorldEditor::components::
buildings_layout_room>()) {
int room_type =
e.get<WorldEditor::components::
buildings_layout_room>()
->room_type;
button->set_text(button->get_text() +
"Room\n" +
String(e.name()));
PopupMenu *mp = memnew(PopupMenu);
mp->add_child(memnew(LineEdit));
button->get_popup()->add_child(mp);
mp->set_name("subedit");
button->get_popup()->add_submenu_item(
"SubEdit Moo", "subedit", 400);
}
#if 0 #if 0
button->set_text( button->set_text(
button->get_text() + "size: \n" + button->get_text() + "size: \n" +

View File

@@ -82,6 +82,10 @@ public:
struct buildings_layout_floor { struct buildings_layout_floor {
int flags; int flags;
}; };
struct buildings_layout_room {
int room_type;
bool window;
};
}; };
}; };