Getting room types from file
This commit is contained in:
23
godot/astream/building_layout.conf
Normal file
23
godot/astream/building_layout.conf
Normal 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 }]
|
||||||
|
]
|
||||||
|
|
||||||
@@ -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");
|
||||||
|
for (i = 0;
|
||||||
|
i < private_rooms.size();
|
||||||
|
i++) {
|
||||||
|
Array room_data =
|
||||||
|
private_rooms[i];
|
||||||
|
int id = room_data[0];
|
||||||
|
String room_name =
|
||||||
|
room_data[1];
|
||||||
button->get_popup()->add_item(
|
button->get_popup()->add_item(
|
||||||
"Create WC", 200);
|
"Create " +
|
||||||
button->get_popup()->add_item(
|
room_name,
|
||||||
"Create Bathroom", 201);
|
id);
|
||||||
button->get_popup()->add_item(
|
}
|
||||||
"Create Bedroom", 202);
|
|
||||||
button->get_popup()->add_item(
|
|
||||||
"Create Holding Cell",
|
|
||||||
203);
|
|
||||||
button->get_popup()->add_item(
|
|
||||||
"Create Torture Room",
|
|
||||||
203);
|
|
||||||
} 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");
|
||||||
|
for (i = 0;
|
||||||
|
i < public_rooms.size();
|
||||||
|
i++) {
|
||||||
|
Array room_data =
|
||||||
|
public_rooms[i];
|
||||||
|
int id = room_data[0];
|
||||||
|
String room_name =
|
||||||
|
room_data[1];
|
||||||
button->get_popup()->add_item(
|
button->get_popup()->add_item(
|
||||||
"Create Living Room",
|
"Create " +
|
||||||
300);
|
room_name,
|
||||||
button->get_popup()->add_item(
|
id);
|
||||||
"Create Family Room",
|
}
|
||||||
301);
|
|
||||||
button->get_popup()->add_item(
|
|
||||||
"Create Kitchen", 302);
|
|
||||||
button->get_popup()->add_item(
|
|
||||||
"Create Dinging Room",
|
|
||||||
303);
|
|
||||||
button->get_popup()->add_item(
|
|
||||||
"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" +
|
||||||
|
|||||||
@@ -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;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user