mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
Move FootpathGetDefaultSurface() into window
This commit is contained in:
@@ -1570,7 +1570,7 @@ namespace OpenRCT2::Ui::Windows
|
|||||||
*/
|
*/
|
||||||
WindowBase* FootpathOpen()
|
WindowBase* FootpathOpen()
|
||||||
{
|
{
|
||||||
if (!FootpathSelectDefault())
|
if (!WindowFootpathSelectDefault())
|
||||||
{
|
{
|
||||||
// No path objects to select from, don't open window
|
// No path objects to select from, don't open window
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -1803,4 +1803,139 @@ namespace OpenRCT2::Ui::Windows
|
|||||||
{
|
{
|
||||||
_provisionalFootpath.flags.set(ProvisionalPathFlag::forceRecheck);
|
_provisionalFootpath.flags.set(ProvisionalPathFlag::forceRecheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ObjectEntryIndex FootpathGetDefaultSurface(bool queue)
|
||||||
|
{
|
||||||
|
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
||||||
|
for (ObjectEntryIndex i = 0; i < kMaxFootpathSurfaceObjects; i++)
|
||||||
|
{
|
||||||
|
auto pathEntry = GetPathSurfaceEntry(i);
|
||||||
|
if (pathEntry != nullptr)
|
||||||
|
{
|
||||||
|
if (!showEditorPaths && (pathEntry->Flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (queue == ((pathEntry->Flags & FOOTPATH_ENTRY_FLAG_IS_QUEUE) != 0))
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return kObjectEntryIndexNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FootpathIsSurfaceEntryOkay(ObjectEntryIndex index, bool queue)
|
||||||
|
{
|
||||||
|
auto pathEntry = GetPathSurfaceEntry(index);
|
||||||
|
if (pathEntry != nullptr)
|
||||||
|
{
|
||||||
|
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
||||||
|
if (!showEditorPaths && (pathEntry->Flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (queue == ((pathEntry->Flags & FOOTPATH_ENTRY_FLAG_IS_QUEUE) != 0))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ObjectEntryIndex FootpathGetDefaultRailings()
|
||||||
|
{
|
||||||
|
for (ObjectEntryIndex i = 0; i < kMaxFootpathRailingsObjects; i++)
|
||||||
|
{
|
||||||
|
const auto* railingEntry = GetPathRailingsEntry(i);
|
||||||
|
if (railingEntry != nullptr)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return kObjectEntryIndexNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FootpathIsLegacyPathEntryOkay(ObjectEntryIndex index)
|
||||||
|
{
|
||||||
|
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
||||||
|
auto& objManager = OpenRCT2::GetContext()->GetObjectManager();
|
||||||
|
auto footpathObj = objManager.GetLoadedObject<FootpathObject>(index);
|
||||||
|
if (footpathObj != nullptr)
|
||||||
|
{
|
||||||
|
auto pathEntry = reinterpret_cast<FootpathEntry*>(footpathObj->GetLegacyData());
|
||||||
|
return showEditorPaths || !(pathEntry->flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ObjectEntryIndex FootpathGetDefaultLegacyPath()
|
||||||
|
{
|
||||||
|
for (ObjectEntryIndex i = 0; i < kMaxPathObjects; i++)
|
||||||
|
{
|
||||||
|
if (FootpathIsLegacyPathEntryOkay(i))
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return kObjectEntryIndexNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WindowFootpathSelectDefault()
|
||||||
|
{
|
||||||
|
// Select default footpath
|
||||||
|
auto surfaceIndex = FootpathGetDefaultSurface(false);
|
||||||
|
if (FootpathIsSurfaceEntryOkay(gFootpathSelection.NormalSurface, false))
|
||||||
|
{
|
||||||
|
surfaceIndex = gFootpathSelection.NormalSurface;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select default queue
|
||||||
|
auto queueIndex = FootpathGetDefaultSurface(true);
|
||||||
|
if (FootpathIsSurfaceEntryOkay(gFootpathSelection.QueueSurface, true))
|
||||||
|
{
|
||||||
|
queueIndex = gFootpathSelection.QueueSurface;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select default railing
|
||||||
|
auto railingIndex = FootpathGetDefaultRailings();
|
||||||
|
const auto* railingEntry = GetPathRailingsEntry(gFootpathSelection.Railings);
|
||||||
|
if (railingEntry != nullptr)
|
||||||
|
{
|
||||||
|
railingIndex = gFootpathSelection.Railings;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select default legacy path
|
||||||
|
auto legacyPathIndex = FootpathGetDefaultLegacyPath();
|
||||||
|
if (gFootpathSelection.LegacyPath != kObjectEntryIndexNull)
|
||||||
|
{
|
||||||
|
if (FootpathIsLegacyPathEntryOkay(gFootpathSelection.LegacyPath))
|
||||||
|
{
|
||||||
|
// Keep legacy path selected
|
||||||
|
legacyPathIndex = gFootpathSelection.LegacyPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Reset legacy path, we default to a surface (if there are any)
|
||||||
|
gFootpathSelection.LegacyPath = kObjectEntryIndexNull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (surfaceIndex == kObjectEntryIndexNull)
|
||||||
|
{
|
||||||
|
if (legacyPathIndex == kObjectEntryIndexNull)
|
||||||
|
{
|
||||||
|
// No surfaces or legacy paths available
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No surfaces available, so default to legacy path
|
||||||
|
gFootpathSelection.LegacyPath = legacyPathIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
gFootpathSelection.NormalSurface = surfaceIndex;
|
||||||
|
gFootpathSelection.QueueSurface = queueIndex;
|
||||||
|
gFootpathSelection.Railings = railingIndex;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
} // namespace OpenRCT2::Ui::Windows
|
} // namespace OpenRCT2::Ui::Windows
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ namespace OpenRCT2::Ui::Windows
|
|||||||
InitMap();
|
InitMap();
|
||||||
gWindowSceneryRotation = 0;
|
gWindowSceneryRotation = 0;
|
||||||
CentreMapOnViewPoint();
|
CentreMapOnViewPoint();
|
||||||
FootpathSelectDefault();
|
WindowFootpathSelectDefault();
|
||||||
|
|
||||||
auto& gameState = getGameState();
|
auto& gameState = getGameState();
|
||||||
_mapWidthAndHeightLinked = gameState.mapSize.x == gameState.mapSize.y;
|
_mapWidthAndHeightLinked = gameState.mapSize.x == gameState.mapSize.y;
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ namespace OpenRCT2::Ui::Windows
|
|||||||
void WindowFootpathKeyboardShortcutSlopeUp();
|
void WindowFootpathKeyboardShortcutSlopeUp();
|
||||||
void WindowFootpathKeyboardShortcutBuildCurrent();
|
void WindowFootpathKeyboardShortcutBuildCurrent();
|
||||||
void WindowFootpathKeyboardShortcutDemolishCurrent();
|
void WindowFootpathKeyboardShortcutDemolishCurrent();
|
||||||
|
bool WindowFootpathSelectDefault();
|
||||||
|
|
||||||
// GameBottomToolbar
|
// GameBottomToolbar
|
||||||
extern uint8_t gToolbarDirtyFlags;
|
extern uint8_t gToolbarDirtyFlags;
|
||||||
|
|||||||
@@ -1824,141 +1824,6 @@ void FootpathRemoveEdgesAt(const CoordsXY& footpathPos, TileElement* tileElement
|
|||||||
tileElement->AsPath()->SetEdgesAndCorners(0);
|
tileElement->AsPath()->SetEdgesAndCorners(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ObjectEntryIndex FootpathGetDefaultSurface(bool queue)
|
|
||||||
{
|
|
||||||
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
|
||||||
for (ObjectEntryIndex i = 0; i < kMaxFootpathSurfaceObjects; i++)
|
|
||||||
{
|
|
||||||
auto pathEntry = GetPathSurfaceEntry(i);
|
|
||||||
if (pathEntry != nullptr)
|
|
||||||
{
|
|
||||||
if (!showEditorPaths && (pathEntry->Flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (queue == ((pathEntry->Flags & FOOTPATH_ENTRY_FLAG_IS_QUEUE) != 0))
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return kObjectEntryIndexNull;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool FootpathIsSurfaceEntryOkay(ObjectEntryIndex index, bool queue)
|
|
||||||
{
|
|
||||||
auto pathEntry = GetPathSurfaceEntry(index);
|
|
||||||
if (pathEntry != nullptr)
|
|
||||||
{
|
|
||||||
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
|
||||||
if (!showEditorPaths && (pathEntry->Flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (queue == ((pathEntry->Flags & FOOTPATH_ENTRY_FLAG_IS_QUEUE) != 0))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ObjectEntryIndex FootpathGetDefaultRailings()
|
|
||||||
{
|
|
||||||
for (ObjectEntryIndex i = 0; i < kMaxFootpathRailingsObjects; i++)
|
|
||||||
{
|
|
||||||
const auto* railingEntry = GetPathRailingsEntry(i);
|
|
||||||
if (railingEntry != nullptr)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return kObjectEntryIndexNull;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool FootpathIsLegacyPathEntryOkay(ObjectEntryIndex index)
|
|
||||||
{
|
|
||||||
bool showEditorPaths = (gLegacyScene == LegacyScene::scenarioEditor || getGameState().cheats.sandboxMode);
|
|
||||||
auto& objManager = OpenRCT2::GetContext()->GetObjectManager();
|
|
||||||
auto footpathObj = objManager.GetLoadedObject<FootpathObject>(index);
|
|
||||||
if (footpathObj != nullptr)
|
|
||||||
{
|
|
||||||
auto pathEntry = reinterpret_cast<FootpathEntry*>(footpathObj->GetLegacyData());
|
|
||||||
return showEditorPaths || !(pathEntry->flags & FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ObjectEntryIndex FootpathGetDefaultLegacyPath()
|
|
||||||
{
|
|
||||||
for (ObjectEntryIndex i = 0; i < kMaxPathObjects; i++)
|
|
||||||
{
|
|
||||||
if (FootpathIsLegacyPathEntryOkay(i))
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return kObjectEntryIndexNull;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FootpathSelectDefault()
|
|
||||||
{
|
|
||||||
// Select default footpath
|
|
||||||
auto surfaceIndex = FootpathGetDefaultSurface(false);
|
|
||||||
if (FootpathIsSurfaceEntryOkay(gFootpathSelection.NormalSurface, false))
|
|
||||||
{
|
|
||||||
surfaceIndex = gFootpathSelection.NormalSurface;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Select default queue
|
|
||||||
auto queueIndex = FootpathGetDefaultSurface(true);
|
|
||||||
if (FootpathIsSurfaceEntryOkay(gFootpathSelection.QueueSurface, true))
|
|
||||||
{
|
|
||||||
queueIndex = gFootpathSelection.QueueSurface;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Select default railing
|
|
||||||
auto railingIndex = FootpathGetDefaultRailings();
|
|
||||||
const auto* railingEntry = GetPathRailingsEntry(gFootpathSelection.Railings);
|
|
||||||
if (railingEntry != nullptr)
|
|
||||||
{
|
|
||||||
railingIndex = gFootpathSelection.Railings;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Select default legacy path
|
|
||||||
auto legacyPathIndex = FootpathGetDefaultLegacyPath();
|
|
||||||
if (gFootpathSelection.LegacyPath != kObjectEntryIndexNull)
|
|
||||||
{
|
|
||||||
if (FootpathIsLegacyPathEntryOkay(gFootpathSelection.LegacyPath))
|
|
||||||
{
|
|
||||||
// Keep legacy path selected
|
|
||||||
legacyPathIndex = gFootpathSelection.LegacyPath;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Reset legacy path, we default to a surface (if there are any)
|
|
||||||
gFootpathSelection.LegacyPath = kObjectEntryIndexNull;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (surfaceIndex == kObjectEntryIndexNull)
|
|
||||||
{
|
|
||||||
if (legacyPathIndex == kObjectEntryIndexNull)
|
|
||||||
{
|
|
||||||
// No surfaces or legacy paths available
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// No surfaces available, so default to legacy path
|
|
||||||
gFootpathSelection.LegacyPath = legacyPathIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
gFootpathSelection.NormalSurface = surfaceIndex;
|
|
||||||
gFootpathSelection.QueueSurface = queueIndex;
|
|
||||||
gFootpathSelection.Railings = railingIndex;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const FootpathObject* GetLegacyFootpathEntry(ObjectEntryIndex entryIndex)
|
const FootpathObject* GetLegacyFootpathEntry(ObjectEntryIndex entryIndex)
|
||||||
{
|
{
|
||||||
auto& objMgr = OpenRCT2::GetContext()->GetObjectManager();
|
auto& objMgr = OpenRCT2::GetContext()->GetObjectManager();
|
||||||
|
|||||||
@@ -158,7 +158,6 @@ bool FootpathIsBlockedByVehicle(const TileCoordsXYZ& position);
|
|||||||
int32_t FootpathIsConnectedToMapEdge(const CoordsXYZ& footpathPos, int32_t direction, int32_t flags);
|
int32_t FootpathIsConnectedToMapEdge(const CoordsXYZ& footpathPos, int32_t direction, int32_t flags);
|
||||||
void FootpathRemoveEdgesAt(const CoordsXY& footpathPos, OpenRCT2::TileElement* tileElement);
|
void FootpathRemoveEdgesAt(const CoordsXY& footpathPos, OpenRCT2::TileElement* tileElement);
|
||||||
|
|
||||||
bool FootpathSelectDefault();
|
|
||||||
const OpenRCT2::FootpathObject* GetLegacyFootpathEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
const OpenRCT2::FootpathObject* GetLegacyFootpathEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
||||||
const OpenRCT2::FootpathSurfaceObject* GetPathSurfaceEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
const OpenRCT2::FootpathSurfaceObject* GetPathSurfaceEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
||||||
const OpenRCT2::FootpathRailingsObject* GetPathRailingsEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
const OpenRCT2::FootpathRailingsObject* GetPathRailingsEntry(OpenRCT2::ObjectEntryIndex entryIndex);
|
||||||
|
|||||||
Reference in New Issue
Block a user