MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / ReadJson

Method ReadJson

src/openrct2/object/WallObject.cpp:99–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

97 }
98
99 void WallObject::ReadJson(IReadObjectContext* context, json_t& root)
100 {
101 Guard::Assert(root.is_object(), "WallObject::ReadJson expects parameter root to be object");
102
103 auto properties = root["properties"];
104
105 if (properties.is_object())
106 {
107 _legacyType.tool_id = Cursor::FromString(Json::GetString(properties["cursor"]), CursorID::FenceDown);
108 _legacyType.height = Json::GetNumber<uint8_t>(properties["height"]);
109 _legacyType.price = Json::GetNumber<money64>(properties["price"]);
110
111 _legacyType.scrolling_mode = Json::GetNumber<uint8_t>(properties["scrollingMode"], kScrollingModeNone);
112
113 SetPrimarySceneryGroup(ObjectEntryDescriptor(Json::GetString(properties["sceneryGroup"])));
114
115 // clang-format off
116 _legacyType.flags = Json::GetFlags<uint8_t>(
117 properties,
118 {
119 { "hasPrimaryColour", WALL_SCENERY_HAS_PRIMARY_COLOUR, Json::FlagType::Normal },
120 { "isAllowedOnSlope", WALL_SCENERY_CANT_BUILD_ON_SLOPE, Json::FlagType::Inverted },
121 { "hasSecondaryColour", WALL_SCENERY_HAS_SECONDARY_COLOUR, Json::FlagType::Normal },
122 { "hasTertiaryColour", WALL_SCENERY_HAS_TERTIARY_COLOUR, Json::FlagType::Normal },
123 { "hasTernaryColour", WALL_SCENERY_HAS_TERTIARY_COLOUR, Json::FlagType::Normal },
124 { "hasGlass", WALL_SCENERY_HAS_GLASS, Json::FlagType::Normal },
125 { "isBanner", WALL_SCENERY_IS_DOUBLE_SIDED, Json::FlagType::Normal },
126 { "isDoubleSided", WALL_SCENERY_IS_DOUBLE_SIDED, Json::FlagType::Normal },
127 { "isDoor", WALL_SCENERY_IS_DOOR, Json::FlagType::Normal },
128 { "isLongDoorAnimation", WALL_SCENERY_LONG_DOOR_ANIMATION, Json::FlagType::Normal },
129 });
130 // clang-format on
131
132 _legacyType.flags2 = Json::GetFlags<uint8_t>(
133 properties,
134 {
135 { "isTransparent", WALL_SCENERY_2_IS_TRANSPARENT },
136 // Deprecated because it did the opposite of what the name implied.
137 { "isOpaque", WALL_SCENERY_2_IS_TRANSPARENT },
138 { "isAnimated", WALL_SCENERY_2_ANIMATED },
139 });
140
141 // HACK WALL_SCENERY_HAS_PRIMARY_COLOUR actually means, has any colour but we simplify the
142 // JSON and handle this on load. We should change code base in future to reflect the JSON.
143 if (!(_legacyType.flags & WALL_SCENERY_HAS_PRIMARY_COLOUR))
144 {
145 if (_legacyType.flags & (WALL_SCENERY_HAS_SECONDARY_COLOUR | WALL_SCENERY_HAS_TERTIARY_COLOUR))
146 {
147 _legacyType.flags |= WALL_SCENERY_HAS_PRIMARY_COLOUR;
148 _legacyType.flags2 |= WALL_SCENERY_2_NO_SELECT_PRIMARY_COLOUR;
149 }
150 }
151
152 // Door sound
153 auto jDoorSound = properties["doorSound"];
154 if (jDoorSound.is_number())
155 {
156 auto doorSound = Json::GetNumber<uint8_t>(jDoorSound);

Callers 2

CreateObjectFromJsonFunction · 0.45

Calls 4

AssertFunction · 0.85
GetStringFunction · 0.85
FromStringFunction · 0.50

Tested by

no test coverage detected