summaryrefslogtreecommitdiffhomepage
path: root/editor
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-23 15:11:26 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-23 15:11:26 +0100
commitc554cdbc0cf894ccc6c330e0743649a4bdb34658 (patch)
tree80b5fa2e64136eb2740d9c9524daf92b8a447b3d /editor
parent573f8f2bcbfd86119e00a13fedc5abf2bf7deafb (diff)
a
Diffstat (limited to 'editor')
-rw-r--r--editor/imgui-editors.cpp2
-rw-r--r--editor/inspect-types.cpp24
2 files changed, 23 insertions, 3 deletions
diff --git a/editor/imgui-editors.cpp b/editor/imgui-editors.cpp
index 358cd200..1c15989f 100644
--- a/editor/imgui-editors.cpp
+++ b/editor/imgui-editors.cpp
@@ -29,7 +29,7 @@ using vobj_ = vobj_editor::vobj_;
StringView scenery_type_to_string(const scenery_& sc)
{
- switch (sc.proto.sc_type)
+ switch (sc.proto.scenery_type())
{
case scenery_type::none: return "none"_s;
case scenery_type::generic: return "generic"_s;
diff --git a/editor/inspect-types.cpp b/editor/inspect-types.cpp
index c500b050..ab3c04d1 100644
--- a/editor/inspect-types.cpp
+++ b/editor/inspect-types.cpp
@@ -66,6 +66,9 @@ struct entity_accessors<object, inspect_intent_t> {
}
};
+template<typename... Ts> struct overloaded : Ts... { using Ts::operator()...; };
+template<typename... Ts> overloaded(Ts...) -> overloaded<Ts...>;
+
template<>
struct entity_accessors<scenery, inspect_intent_t> {
static constexpr auto accessors()
@@ -74,8 +77,25 @@ struct entity_accessors<scenery, inspect_intent_t> {
auto tuple0 = entity_accessors<object, inspect_intent_t>::accessors();
auto tuple = std::tuple{
E::type<bool>::field{"interactive"_s,
- [](const scenery& x) { return x.interactive; },
- [](scenery& x, bool value) { x.interactive = value; }
+ [](const scenery& x) {
+ return std::visit(overloaded {
+ [&](const door_scenery& s) { return s.interactive; },
+ [&](const generic_scenery& s) { return s.interactive; },
+ }, x.subtype);
+ },
+ [](scenery& x, bool b) {
+ return std::visit(overloaded {
+ [&](door_scenery& s) { s.interactive = b; },
+ [&](generic_scenery& s) { s.interactive = b; },
+ }, x.subtype);
+ },
+ [](const scenery& x) {
+ return std::visit(overloaded {
+ [&](door_scenery&) { return st::enabled; },
+ [&](generic_scenery&) { return st::enabled; },
+ [](auto&&) { return st::hidden; },
+ }, x.subtype);
+ },
},
};
return std::tuple_cat(tuple0, tuple);