mirror of https://github.com/OpenRCT2/OpenRCT2.git
Make smart follow functions easier to follow
Opted for a switch case instead of if-else if-else if-else Reuse entity - is already checked for null and doesn't change Remove unnecessary else blocks after if-block that returns
This commit is contained in:
parent
0fcef925b6
commit
d3263ef6b7
|
@ -669,40 +669,34 @@ void viewport_update_sprite_follow(rct_window* window)
|
|||
void viewport_update_smart_sprite_follow(rct_window* window)
|
||||
{
|
||||
auto entity = TryGetEntity(window->viewport_smart_follow_sprite);
|
||||
if (entity == nullptr)
|
||||
if (entity == nullptr || entity->Type == EntityType::Null)
|
||||
{
|
||||
window->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
}
|
||||
else if (entity->Type == EntityType::Guest || entity->Type == EntityType::Staff)
|
||||
{
|
||||
Peep* peep = TryGetEntity<Peep>(window->viewport_smart_follow_sprite);
|
||||
if (peep == nullptr)
|
||||
{
|
||||
// will never happen
|
||||
window->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (entity->Type)
|
||||
{
|
||||
case EntityType::Vehicle:
|
||||
viewport_update_smart_vehicle_follow(window);
|
||||
break;
|
||||
|
||||
case EntityType::Guest:
|
||||
case EntityType::Staff:
|
||||
{
|
||||
Peep* peep = static_cast<Peep*>(entity);
|
||||
if (peep->Is<Guest>())
|
||||
viewport_update_smart_guest_follow(window, peep);
|
||||
else if (peep->Is<Staff>())
|
||||
viewport_update_smart_staff_follow(window, peep);
|
||||
break;
|
||||
}
|
||||
else if (entity->Type == EntityType::Vehicle)
|
||||
{
|
||||
viewport_update_smart_vehicle_follow(window);
|
||||
}
|
||||
else if (entity->Type != EntityType::Null)
|
||||
{
|
||||
|
||||
default: // All other types don't need any "smart" following; steam particle, duck, money effect, etc.
|
||||
window->viewport_focus_sprite.sprite_id = window->viewport_smart_follow_sprite;
|
||||
window->viewport_target_sprite = window->viewport_smart_follow_sprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -719,8 +713,7 @@ viewport_focus viewport_update_smart_guest_follow(rct_window* window, Peep* peep
|
|||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
return focus;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
bool overallFocus = true;
|
||||
if (peep->State == PeepState::OnRide || peep->State == PeepState::EnteringRide
|
||||
|| (peep->State == PeepState::LeavingRide && peep->x == LOCATION_NULL))
|
||||
|
@ -740,6 +733,7 @@ viewport_focus viewport_update_smart_guest_follow(rct_window* window, Peep* peep
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (peep->x == LOCATION_NULL && overallFocus)
|
||||
{
|
||||
auto ride = get_ride(peep->CurrentRide);
|
||||
|
@ -759,7 +753,6 @@ viewport_focus viewport_update_smart_guest_follow(rct_window* window, Peep* peep
|
|||
focus.sprite.pad_486 &= 0xFFFF;
|
||||
}
|
||||
focus.coordinate.rotation = get_current_rotation();
|
||||
}
|
||||
|
||||
window->viewport_focus_sprite = focus.sprite;
|
||||
window->viewport_target_sprite = window->viewport_focus_sprite.sprite_id;
|
||||
|
@ -774,15 +767,12 @@ void viewport_update_smart_staff_follow(rct_window* window, Peep* peep)
|
|||
|
||||
if (peep->State == PeepState::Picked)
|
||||
{
|
||||
// focus.sprite.sprite_id = SPRITE_INDEX_NULL;
|
||||
window->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
focus.type |= VIEWPORT_FOCUS_TYPE_SPRITE | VIEWPORT_FOCUS_TYPE_COORDINATE;
|
||||
}
|
||||
|
||||
window->viewport_focus_sprite = focus;
|
||||
window->viewport_target_sprite = window->viewport_focus_sprite.sprite_id;
|
||||
|
@ -790,9 +780,7 @@ void viewport_update_smart_staff_follow(rct_window* window, Peep* peep)
|
|||
|
||||
void viewport_update_smart_vehicle_follow(rct_window* window)
|
||||
{
|
||||
// Can be expanded in the future if needed
|
||||
sprite_focus focus = {};
|
||||
|
||||
focus.sprite_id = window->viewport_smart_follow_sprite;
|
||||
|
||||
window->viewport_focus_sprite = focus;
|
||||
|
|
Loading…
Reference in New Issue