From 68cb57fbb01702721dbcc6336f9bc68a18cb7df4 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 3 Apr 2021 16:25:22 +0100 Subject: [PATCH] Improve editor handling of new object types --- src/openrct2/Editor.cpp | 8 +- src/openrct2/EditorObjectSelectionSession.cpp | 14 +++- src/openrct2/object/DefaultObjects.cpp | 73 +++++++++++++++++++ src/openrct2/object/DefaultObjects.h | 3 +- 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 462fc111d5..cb5aa7178b 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -40,6 +40,7 @@ #include "world/Park.h" #include "world/Scenery.h" #include "world/Sprite.h" +#include "object/DefaultObjects.h" #include #include @@ -70,6 +71,12 @@ namespace Editor // Reset loaded objects to just defaults auto& objectManager = context->GetObjectManager(); objectManager.UnloadAll(); + + // Load minimum required objects (like surface and edge) + for (const auto& entry : MinimumRequiredObjects) + { + objectManager.LoadObject(entry); + } } /** @@ -79,7 +86,6 @@ namespace Editor void Load() { OpenRCT2::Audio::StopAll(); - object_manager_unload_all_objects(); object_list_load(); OpenRCT2::GetContext()->GetGameState()->InitAll(150); gScreenFlags = SCREEN_FLAGS_SCENARIO_EDITOR; diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index cd13e2f396..bd466e1e58 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -137,6 +137,15 @@ void setup_in_use_selection_flags() { default: case TILE_ELEMENT_TYPE_SURFACE: + { + auto surfaceEl = iter.element->AsSurface(); + auto surfaceIndex = surfaceEl->GetSurfaceStyle(); + auto edgeIndex = surfaceEl->GetEdgeStyle(); + + Editor::SetSelectedObject(ObjectType::TerrainSurface, surfaceIndex, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(ObjectType::TerrainEdge, edgeIndex, OBJECT_SELECTION_FLAG_SELECTED); + break; + } case TILE_ELEMENT_TYPE_TRACK: break; case TILE_ELEMENT_TYPE_PATH: @@ -197,8 +206,9 @@ void setup_in_use_selection_flags() auto ride = get_ride(ride_index); if (ride != nullptr) { - ObjectEntryIndex type = ride->subtype; - Editor::SetSelectedObject(ObjectType::Ride, type, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(ObjectType::Ride, ride->subtype, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(ObjectType::Station, ride->entrance_style, OBJECT_SELECTION_FLAG_SELECTED); + Editor::SetSelectedObject(ObjectType::Music, ride->music, OBJECT_SELECTION_FLAG_SELECTED); } } diff --git a/src/openrct2/object/DefaultObjects.cpp b/src/openrct2/object/DefaultObjects.cpp index 6f112ff6ed..ddb2f92acc 100644 --- a/src/openrct2/object/DefaultObjects.cpp +++ b/src/openrct2/object/DefaultObjects.cpp @@ -11,6 +11,11 @@ #include "Object.h" +const std::string_view MinimumRequiredObjects[] = { + "rct2.surface.grass", + "rct2.edge.rock" +}; + const std::string_view DefaultSelectedObjects[] = { // An initial default selection "rct2.scgtrees", // Scenery: Trees @@ -48,6 +53,74 @@ const std::string_view DefaultSelectedObjects[] = { "rct2.scgjungl", // Jungle Theming "rct2.scgsnow", // Snow and Ice Theming "rct2.scgwater", // Water Feature Theming + + // Surfaces + "rct2.surface.grass", + "rct2.surface.sand", + "rct2.surface.dirt", + "rct2.surface.rock", + "rct2.surface.martian", + "rct2.surface.chequerboard", + "rct2.surface.grassclumps", + "rct2.surface.ice", + "rct2.surface.gridred", + "rct2.surface.gridyellow", + "rct2.surface.gridpurple", + "rct2.surface.gridgreen", + "rct2.surface.sandred", + "rct2.surface.sandbrown", + + // Edges + "rct2.edge.rock", + "rct2.edge.woodred", + "rct2.edge.woodblack", + "rct2.edge.ice", + + // Stations + "rct2.station.plain", + "rct2.station.wooden", + "rct2.station.canvastent", + "rct2.station.castlegrey", + "rct2.station.castlebrown", + "rct2.station.jungle", + "rct2.station.log", + "rct2.station.classical", + "rct2.station.abstract", + "rct2.station.snow", + "rct2.station.pagoda", + "rct2.station.space", + + // Music + "rct2.music.dodgems", + "rct2.music.fairground", + "rct2.music.roman", + "rct2.music.oriental", + "rct2.music.martian", + "rct2.music.jungle", + "rct2.music.egyptian", + "rct2.music.toyland", + "rct2.music.space", + "rct2.music.horror", + "rct2.music.techno", + "rct2.music.gentle", + "rct2.music.summer", + "rct2.music.water", + "rct2.music.wildwest", + "rct2.music.jurassic", + "rct2.music.rock1", + "rct2.music.ragtime", + "rct2.music.fantasy", + "rct2.music.rock2", + "rct2.music.ice", + "rct2.music.snow", + "rct2.music.medieval", + "rct2.music.urban", + "rct2.music.organ", + "rct2.music.mechanical", + "rct2.music.modern", + "rct2.music.pirate", + "rct2.music.rock3", + "rct2.music.candy", }; const std::string_view DesignerSelectedObjects[] = { diff --git a/src/openrct2/object/DefaultObjects.h b/src/openrct2/object/DefaultObjects.h index 6453ecd008..140e5e888e 100644 --- a/src/openrct2/object/DefaultObjects.h +++ b/src/openrct2/object/DefaultObjects.h @@ -11,5 +11,6 @@ #include "Object.h" -extern const std::string_view DefaultSelectedObjects[33]; +extern const std::string_view MinimumRequiredObjects[2]; +extern const std::string_view DefaultSelectedObjects[93]; extern const std::string_view DesignerSelectedObjects[15];