Split Ride::Test into Ride::Test and Ride::Simulate

This commit is contained in:
spacek531 2022-12-20 22:54:38 +01:00 committed by Gymnasiast
parent 3af26d2fe7
commit ecef614c93
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
3 changed files with 69 additions and 39 deletions

View File

@ -90,25 +90,27 @@ GameActions::Result RideSetStatusAction::Query() const
return res;
}
if (_status == RideStatus::Testing || _status == RideStatus::Simulating)
ResultWithMessage modeSwitchResult = { true };
switch (_status)
{
const auto modeSwitchResult = ride->Test(_status, false);
if (!modeSwitchResult.Successful)
{
res.Error = GameActions::Status::Unknown;
res.ErrorMessage = modeSwitchResult.Message;
return res;
}
case RideStatus::Open:
modeSwitchResult = ride->Open(false);
break;
case RideStatus::Testing:
modeSwitchResult = ride->Test(false);
break;
case RideStatus::Simulating:
modeSwitchResult = ride->Simulate(false);
break;
default:
break;
}
else if (_status == RideStatus::Open)
if (!modeSwitchResult.Successful)
{
const auto modeSwitchResult = ride->Open(false);
if (!modeSwitchResult.Successful)
{
res.Error = GameActions::Status::Unknown;
res.ErrorMessage = modeSwitchResult.Message;
return res;
}
res.Error = GameActions::Status::Unknown;
res.ErrorMessage = modeSwitchResult.Message;
return res;
}
}
return GameActions::Result();
@ -165,7 +167,7 @@ GameActions::Result RideSetStatusAction::Execute() const
ride_clear_for_construction(ride);
ride->RemovePeeps();
const auto modeSwitchResult = ride->Test(_status, true);
const auto modeSwitchResult = ride->Simulate(true);
if (!modeSwitchResult.Successful)
{
res.Error = GameActions::Status::Unknown;
@ -207,7 +209,7 @@ GameActions::Result RideSetStatusAction::Execute() const
if (_status == RideStatus::Testing)
{
const auto modeSwitchResult = ride->Test(_status, true);
const auto modeSwitchResult = ride->Test(true);
if (!modeSwitchResult.Successful)
{
res.Error = GameActions::Status::Unknown;

View File

@ -3881,20 +3881,15 @@ TrackElement* Ride::GetOriginElement(StationIndex stationIndex) const
return nullptr;
}
ResultWithMessage Ride::Test(RideStatus newStatus, bool isApplying)
ResultWithMessage Ride::Test(bool isApplying)
{
CoordsXYE problematicTrackElement = {};
if (type == RIDE_TYPE_NULL)
{
log_warning("Invalid ride type for ride %u", id.ToUnderlying());
return { false };
}
if (newStatus != RideStatus::Simulating)
{
window_close_by_number(WindowClass::RideConstruction, id.ToUnderlying());
}
window_close_by_number(WindowClass::RideConstruction, id.ToUnderlying());
StationIndex stationIndex = {};
auto message = ChangeStatusDoStationChecks(stationIndex);
@ -3903,14 +3898,11 @@ ResultWithMessage Ride::Test(RideStatus newStatus, bool isApplying)
return message;
}
if (newStatus != RideStatus::Simulating)
auto entranceExitCheck = ride_check_for_entrance_exit(id);
if (!entranceExitCheck.Successful)
{
auto entranceExitCheck = ride_check_for_entrance_exit(id);
if (!entranceExitCheck.Successful)
{
ConstructMissingEntranceOrExit();
return { false, entranceExitCheck.Message };
}
ConstructMissingEntranceOrExit();
return { false, entranceExitCheck.Message };
}
CoordsXYE trackElement = {};
@ -3920,13 +3912,10 @@ ResultWithMessage Ride::Test(RideStatus newStatus, bool isApplying)
return message;
}
if (mode == RideMode::ContinuousCircuit || IsBlockSectioned())
message = ChangeStatusCheckCompleteCircuit(trackElement);
if (!message.Successful)
{
if (FindTrackGap(trackElement, &problematicTrackElement) && (newStatus != RideStatus::Simulating || IsBlockSectioned()))
{
ride_scroll_to_track_error(problematicTrackElement);
return { false, STR_TRACK_IS_NOT_A_COMPLETE_CIRCUIT };
}
return message;
}
message = ChangeStatusCheckTrackValidity(trackElement);
@ -3937,6 +3926,44 @@ ResultWithMessage Ride::Test(RideStatus newStatus, bool isApplying)
return ChangeStatusCreateVehicles(isApplying, trackElement);
}
ResultWithMessage Ride::Simulate(bool isApplying)
{
CoordsXYE trackElement, problematicTrackElement = {};
if (type == RIDE_TYPE_NULL)
{
log_warning("Invalid ride type for ride %u", id.ToUnderlying());
return { false };
}
StationIndex stationIndex = {};
auto message = ChangeStatusDoStationChecks(stationIndex);
if (!message.Successful)
{
return message;
}
message = ChangeStatusGetStartElement(stationIndex, trackElement);
if (!message.Successful)
{
return message;
}
if (IsBlockSectioned() && FindTrackGap(trackElement, &problematicTrackElement))
{
ride_scroll_to_track_error(problematicTrackElement);
return { false, STR_TRACK_IS_NOT_A_COMPLETE_CIRCUIT };
}
message = ChangeStatusCheckTrackValidity(trackElement);
if (!message.Successful)
{
return message;
}
return ChangeStatusCreateVehicles(isApplying, trackElement);
}
/**
*
* rct2: 0x006B4EEA

View File

@ -346,7 +346,8 @@ public:
void ValidateStations();
ResultWithMessage Open(bool isApplying);
ResultWithMessage Test(RideStatus newStatus, bool isApplying);
ResultWithMessage Test(bool isApplying);
ResultWithMessage Simulate(bool isApplying);
RideMode GetDefaultMode() const;