diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index b47b588512..7b36b833b5 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -74,7 +74,7 @@ Vehicle* cable_lift_segment_create( current->MoveTo({ 16, 16, z }); current->track_type = (TrackElemType::CableLiftHill << 2) | (current->sprite_direction >> 3); current->track_progress = 164; - current->update_flags = VEHICLE_UPDATE_FLAG_1; + current->update_flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED; current->SetState(Vehicle::Status::MovingToEndOfStation, 0); current->num_peeps = 0; current->next_free_seat = 0; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index dea4ecf219..5eeaba051f 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4530,7 +4530,7 @@ static Vehicle* vehicle_create_car( { vehicle->track_progress = 15; } - vehicle->update_flags = VEHICLE_UPDATE_FLAG_1; + vehicle->update_flags = VEHICLE_UPDATE_FLAG_COLLISION_DISABLED; if (vehicleEntry->flags & VEHICLE_ENTRY_FLAG_HAS_INVERTED_SPRITE_SET) { if (trackElement->IsInverted()) @@ -4631,14 +4631,6 @@ static void vehicle_create_trains(ride_id_t rideIndex, const CoordsXYZ& trainsPo lastTrain.tail->next_vehicle_on_ride = firstTrain.head->sprite_index; } -static void vehicle_unset_update_flag_b1(Vehicle* head) -{ - for (auto vehicle = head; vehicle != nullptr; vehicle = GetEntity(vehicle->next_vehicle_on_train)) - { - vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); - } -} - /** * * rct2: 0x006DDE9E @@ -4783,7 +4775,7 @@ static bool ride_create_vehicles(Ride* ride, const CoordsXYE& element, int32_t i vehicle->UpdateTrackMotion(nullptr); } - vehicle_unset_update_flag_b1(vehicle); + vehicle->EnableCollisionsForTrain(); } } } @@ -4806,7 +4798,7 @@ void loc_6DDF9C(Ride* ride, TileElement* tileElement) if (i == 0) { train->UpdateTrackMotion(nullptr); - vehicle_unset_update_flag_b1(train); + train->EnableCollisionsForTrain(); continue; } @@ -4827,7 +4819,7 @@ void loc_6DDF9C(Ride* ride, TileElement* tileElement) tileElement->AsTrack()->SetBlockBrakeClosed(true); for (Vehicle* car = train; car != nullptr; car = GetEntity(car->next_vehicle_on_train)) { - car->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); + car->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); car->SetState(Vehicle::Status::Travelling, car->sub_state); if ((car->GetTrackType()) == TrackElemType::EndStation) { diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 591c7f0560..992e653ebd 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -3340,11 +3340,11 @@ void Vehicle::UpdateDeparting() if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) { SetUpdateFlag(VEHICLE_UPDATE_FLAG_ZERO_VELOCITY); - ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); + ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); } } else - ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); + ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); } } else @@ -3358,11 +3358,11 @@ void Vehicle::UpdateDeparting() if (_vehicleBreakdown == BREAKDOWN_SAFETY_CUT_OUT) { SetUpdateFlag(VEHICLE_UPDATE_FLAG_ZERO_VELOCITY); - ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); + ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); } } else - ClearUpdateFlag(VEHICLE_UPDATE_FLAG_1); + ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); } } } @@ -7620,7 +7620,7 @@ void Vehicle::UpdateReverserCarBogies() */ bool Vehicle::UpdateMotionCollisionDetection(const CoordsXYZ& loc, uint16_t* otherVehicleIndex) { - if (HasUpdateFlag(VEHICLE_UPDATE_FLAG_1)) + if (HasUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED)) return false; auto vehicleEntry = Entry(); @@ -9886,3 +9886,12 @@ bool Vehicle::IsGhost() const auto r = GetRide(); return r != nullptr && r->status == RIDE_STATUS_SIMULATING; } + +void Vehicle::EnableCollisionsForTrain() +{ + assert(this->IsHead()); + for (auto vehicle = this; vehicle != nullptr; vehicle = GetEntity(vehicle->next_vehicle_on_train)) + { + vehicle->ClearUpdateFlag(VEHICLE_UPDATE_FLAG_COLLISION_DISABLED); + } +} diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 710df9a385..8a73825e1b 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -331,6 +331,7 @@ struct Vehicle : SpriteBase Ride* GetRide() const; Vehicle* TrainHead() const; Vehicle* TrainTail() const; + void EnableCollisionsForTrain(); uint16_t GetTrackType() const { @@ -513,7 +514,7 @@ enum enum : uint32_t { VEHICLE_UPDATE_FLAG_ON_LIFT_HILL = (1 << 0), - VEHICLE_UPDATE_FLAG_1 = (1 << 1), + VEHICLE_UPDATE_FLAG_COLLISION_DISABLED = (1 << 1), VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT = (1 << 2), VEHICLE_UPDATE_FLAG_REVERSING_SHUTTLE = (1 << 3), // Shuttle is in reverse VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART = (1 << 4),