| 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); |
no test coverage detected