/***************************************************************************** * Copyright (c) 2014-2018 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 * * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenRCT2; // clang-format off static uint16_t toolSizeSpriteIndices[] = { SPR_LAND_TOOL_SIZE_0, SPR_LAND_TOOL_SIZE_1, SPR_LAND_TOOL_SIZE_2, SPR_LAND_TOOL_SIZE_3, SPR_LAND_TOOL_SIZE_4, SPR_LAND_TOOL_SIZE_5, SPR_LAND_TOOL_SIZE_6, SPR_LAND_TOOL_SIZE_7, }; // clang-format on uint16_t gLandToolSize; money32 gLandToolRaiseCost; money32 gLandToolLowerCost; uint8_t gLandToolTerrainSurface; uint8_t gLandToolTerrainEdge; money32 gWaterToolRaiseCost; money32 gWaterToolLowerCost; uint32_t land_tool_size_to_sprite_index(uint16_t size) { if (size <= MAX_TOOL_SIZE_WITH_SPRITE) { return toolSizeSpriteIndices[size]; } else { return 0xFFFFFFFF; } } void land_tool_show_surface_style_dropdown(rct_window* w, rct_widget* widget, uint8_t currentSurfaceType) { auto& objManager = GetContext()->GetObjectManager(); auto defaultIndex = 0; auto itemIndex = 0; for (size_t i = 0; i < MAX_TERRAIN_SURFACE_OBJECTS; i++) { const auto surfaceObj = static_cast(objManager.GetLoadedObject(OBJECT_TYPE_TERRAIN_SURFACE, i)); if (surfaceObj != nullptr) { gDropdownItemsFormat[itemIndex] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[itemIndex] = surfaceObj->IconImageId; if (surfaceObj->Colour != 255) { gDropdownItemsArgs[itemIndex] |= surfaceObj->Colour << 19 | IMAGE_TYPE_REMAP; } if (i == currentSurfaceType) { defaultIndex = itemIndex; } itemIndex++; } } auto surfaceCount = itemIndex; window_dropdown_show_image( w->x + widget->left, w->y + widget->top, widget->bottom - widget->top, w->colours[2], 0, surfaceCount, 47, 36, gAppropriateImageDropdownItemsPerRow[surfaceCount]); gDropdownDefaultIndex = defaultIndex; } void land_tool_show_edge_style_dropdown(rct_window* w, rct_widget* widget, uint8_t currentEdgeType) { auto& objManager = GetContext()->GetObjectManager(); auto defaultIndex = 0; auto itemIndex = 0; for (size_t i = 0; i < MAX_TERRAIN_EDGE_OBJECTS; i++) { const auto edgeObj = static_cast(objManager.GetLoadedObject(OBJECT_TYPE_TERRAIN_EDGE, i)); if (edgeObj != nullptr) { gDropdownItemsFormat[itemIndex] = DROPDOWN_FORMAT_LAND_PICKER; gDropdownItemsArgs[itemIndex] = edgeObj->IconImageId; if (i == currentEdgeType) { defaultIndex = itemIndex; } itemIndex++; } } auto edgeCount = itemIndex; window_dropdown_show_image( w->x + widget->left, w->y + widget->top, widget->bottom - widget->top, w->colours[2], 0, edgeCount, 47, 36, gAppropriateImageDropdownItemsPerRow[edgeCount]); gDropdownDefaultIndex = defaultIndex; }