Use helper function GetPeepAnimation

It's intended to retrieve a rct_peep_animation_entry from the global
array g_peep_animation_entries, given PeepSpriteType and
PeepActionSpriteType as parameters.
This commit is contained in:
Vinicius Sa 2020-10-07 12:01:43 -03:00
parent 4d28901cb0
commit 80718f1774
No known key found for this signature in database
GPG Key ID: 9A1AEFB29F082C26
12 changed files with 30 additions and 30 deletions

View File

@ -597,7 +597,7 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc
clipCoords.y += 3;
}
uint32_t image_id_base = g_peep_animation_entries[EnumValue(peep->SpriteType)].sprite_animation->base_image;
uint32_t image_id_base = GetPeepAnimation(peep->SpriteType).base_image;
image_id_base += w->frame_no & 0xFFFFFFFC;
image_id_base++;

View File

@ -761,7 +761,7 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp
if (peep->AssignedPeepType == PeepType::Staff && peep->AssignedStaffType == StaffType::Entertainer)
screenCoords.y++;
int32_t animationFrame = g_peep_animation_entries[EnumValue(peep->SpriteType)].sprite_animation->base_image + 1;
int32_t animationFrame = GetPeepAnimation(peep->SpriteType).base_image + 1;
int32_t animationFrameOffset = 0;
@ -1163,9 +1163,7 @@ void window_guest_overview_tool_update(rct_window* w, rct_widgetindex widgetInde
return;
}
uint32_t imageId = g_peep_animation_entries[EnumValue(peep->SpriteType)]
.sprite_animation[EnumValue(PeepActionSpriteType::Ui)]
.base_image;
uint32_t imageId = GetPeepAnimation(peep->SpriteType, PeepActionSpriteType::Ui).base_image;
imageId += w->picked_peep_frame >> 2;
imageId |= (peep->TshirtColour << 19) | (peep->TrousersColour << 24) | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS;

View File

@ -670,7 +670,7 @@ static void window_guest_list_paint(rct_window* w, rct_drawpixelinfo* dpi)
window_draw_widgets(w, dpi);
// Tab 1 image
i = (_window_guest_list_selected_tab == 0 ? w->list_information_type & 0x0FFFFFFFC : 0);
i += g_peep_animation_entries[EnumValue(PeepSpriteType::Normal)].sprite_animation->base_image + 1;
i += GetPeepAnimation(PeepSpriteType::Normal).base_image + 1;
i |= 0xA1600000;
gfx_draw_sprite(
dpi, i,

View File

@ -15,6 +15,7 @@
#include <openrct2/drawing/Drawing.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/management/NewsItem.h>
#include <openrct2/peep/Peep.h>
#include <openrct2/peep/Staff.h>
#include <openrct2/sprites.h>
#include <openrct2/world/Sprite.h>
@ -287,17 +288,17 @@ static void window_news_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32
// If normal peep set sprite to normal (no food)
// If staff set sprite to staff sprite
int32_t sprite_type = 0;
auto spriteType = PeepSpriteType::Normal;
if (peep->AssignedPeepType == PeepType::Staff)
{
sprite_type = EnumValue(peep->SpriteType);
spriteType = peep->SpriteType;
if (peep->AssignedStaffType == StaffType::Entertainer)
{
clipCoords.y += 3;
}
}
uint32_t image_id = g_peep_animation_entries[sprite_type].sprite_animation->base_image;
uint32_t image_id = GetPeepAnimation(spriteType).base_image;
image_id += 0xA0000001;
image_id |= (peep->TshirtColour << 19) | (peep->TrousersColour << 24);

View File

@ -1726,7 +1726,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w)
gfx_draw_sprite(
dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }, 0);
sprite_idx = g_peep_animation_entries[EnumValue(PeepSpriteType::Normal)].sprite_animation->base_image + 1;
sprite_idx = GetPeepAnimation(PeepSpriteType::Normal).base_image + 1;
if (w->page == WINDOW_PARK_PAGE_GUESTS)
sprite_idx += w->var_492 & 0xFFFFFFFC;

View File

@ -1098,7 +1098,7 @@ static void window_ride_draw_tab_customer(rct_drawpixelinfo* dpi, rct_window* w)
if (w->page == WINDOW_RIDE_PAGE_CUSTOMER)
spriteIndex = w->picked_peep_frame & ~3;
spriteIndex += g_peep_animation_entries[EnumValue(PeepSpriteType::Normal)].sprite_animation->base_image;
spriteIndex += GetPeepAnimation(PeepSpriteType::Normal).base_image;
spriteIndex += 1;
spriteIndex |= 0xA9E00000;

View File

@ -26,7 +26,6 @@
#include <openrct2/network/network.h>
#include <openrct2/peep/Staff.h>
#include <openrct2/sprites.h>
#include <openrct2/util/Util.h>
#include <openrct2/windows/Intent.h>
#include <openrct2/world/Footpath.h>
#include <openrct2/world/Park.h>
@ -1023,7 +1022,7 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi)
if (peep->AssignedPeepType == PeepType::Staff && peep->AssignedStaffType == StaffType::Entertainer)
screenCoords.y++;
int32_t ebx = g_peep_animation_entries[EnumValue(peep->SpriteType)].sprite_animation->base_image + 1;
int32_t ebx = GetPeepAnimation(peep->SpriteType).base_image + 1;
int32_t eax = 0;
@ -1189,9 +1188,7 @@ void window_staff_overview_tool_update(rct_window* w, rct_widgetindex widgetInde
return;
}
uint32_t imageId = g_peep_animation_entries[EnumValue(peep->SpriteType)]
.sprite_animation[EnumValue(PeepActionSpriteType::Ui)]
.base_image;
uint32_t imageId = GetPeepAnimation(peep->SpriteType, PeepActionSpriteType::Ui).base_image;
imageId += w->picked_peep_frame >> 2;
imageId |= (peep->TshirtColour << 19) | (peep->TrousersColour << 24) | IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS;

View File

@ -563,7 +563,7 @@ void window_staff_list_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Handymen tab image
i = (selectedTab == 0 ? (w->list_information_type & ~3) : 0);
i += g_peep_animation_entries[EnumValue(PeepSpriteType::Handyman)].sprite_animation->base_image + 1;
i += GetPeepAnimation(PeepSpriteType::Handyman).base_image + 1;
i |= SPRITE_ID_PALETTE_COLOUR_1(gStaffHandymanColour);
gfx_draw_sprite(
dpi, i,
@ -576,7 +576,7 @@ void window_staff_list_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Mechanic tab image
i = (selectedTab == 1 ? (w->list_information_type & ~3) : 0);
i += g_peep_animation_entries[EnumValue(PeepSpriteType::Mechanic)].sprite_animation->base_image + 1;
i += GetPeepAnimation(PeepSpriteType::Mechanic).base_image + 1;
i |= SPRITE_ID_PALETTE_COLOUR_1(gStaffMechanicColour);
gfx_draw_sprite(
dpi, i,
@ -589,7 +589,7 @@ void window_staff_list_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Security tab image
i = (selectedTab == 2 ? (w->list_information_type & ~3) : 0);
i += g_peep_animation_entries[EnumValue(PeepSpriteType::Security)].sprite_animation->base_image + 1;
i += GetPeepAnimation(PeepSpriteType::Security).base_image + 1;
i |= SPRITE_ID_PALETTE_COLOUR_1(gStaffSecurityColour);
gfx_draw_sprite(
dpi, i,
@ -613,7 +613,7 @@ void window_staff_list_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
// Entertainers tab image
i = (selectedTab == 3 ? (w->list_information_type & ~3) : 0);
i += g_peep_animation_entries[EnumValue(PeepSpriteType::EntertainerElephant)].sprite_animation->base_image + 1;
i += GetPeepAnimation(PeepSpriteType::EntertainerElephant).base_image + 1;
gfx_draw_sprite(&sprite_dpi, i, { 0x0F, 0x17 }, 0);
}

View File

@ -11,7 +11,6 @@
#include "../../drawing/LightFX.h"
#include "../../interface/Viewport.h"
#include "../../peep/Peep.h"
#include "../../util/Util.h"
#include "../../world/Sprite.h"
#include "../Paint.h"
#include "Paint.Sprite.h"
@ -68,20 +67,19 @@ void peep_paint(paint_session* session, const Peep* peep, int32_t imageDirection
return;
}
rct_peep_animation_entry sprite = g_peep_animation_entries[EnumValue(peep->SpriteType)];
PeepActionSpriteType spriteType = peep->ActionSpriteType;
PeepActionSpriteType actionSpriteType = peep->ActionSpriteType;
uint8_t imageOffset = peep->ActionSpriteImageOffset;
if (peep->Action == PeepActionType::None1)
{
spriteType = peep->NextActionSpriteType;
actionSpriteType = peep->NextActionSpriteType;
imageOffset = 0;
}
// In the following 4 calls to sub_98197C/sub_98199C, we add 5 (instead of 3) to the
// bound_box_offset_z to make sure peeps are drawn on top of railways
uint32_t baseImageId = (imageDirection >> 3) + sprite.sprite_animation[EnumValue(spriteType)].base_image + imageOffset * 4;
uint32_t baseImageId = (imageDirection >> 3) + GetPeepAnimation(peep->SpriteType, actionSpriteType).base_image
+ imageOffset * 4;
uint32_t imageId = baseImageId | peep->TshirtColour << 19 | peep->TrousersColour << 24 | IMAGE_TYPE_REMAP
| IMAGE_TYPE_REMAP_2_PLUS;
sub_98197C(session, imageId, 0, 0, 1, 1, 11, peep->z, 0, 0, peep->z + 5);

View File

@ -598,7 +598,7 @@ std::optional<CoordsXY> Peep::UpdateAction(int16_t& xy_distance)
CoordsXY loc = { x, y };
loc += word_981D7C[nextDirection / 8];
WalkingFrameNum++;
const rct_peep_animation* peepAnimation = g_peep_animation_entries[EnumValue(SpriteType)].sprite_animation;
const rct_peep_animation* peepAnimation = &GetPeepAnimation(SpriteType);
const uint8_t* imageOffset = peepAnimation[EnumValue(ActionSpriteType)].frame_offsets;
if (WalkingFrameNum >= peepAnimation[EnumValue(ActionSpriteType)].num_frames)
{
@ -608,7 +608,7 @@ std::optional<CoordsXY> Peep::UpdateAction(int16_t& xy_distance)
return loc;
}
const rct_peep_animation* peepAnimation = g_peep_animation_entries[EnumValue(SpriteType)].sprite_animation;
const rct_peep_animation* peepAnimation = &GetPeepAnimation(SpriteType);
ActionFrame++;
// If last frame of action

View File

@ -1037,7 +1037,7 @@ enum
};
// rct2: 0x00982708
extern rct_peep_animation_entry g_peep_animation_entries[EnumValue(PeepSpriteType::Count)];
extern const rct_peep_animation_entry g_peep_animation_entries[EnumValue(PeepSpriteType::Count)];
extern const bool gSpriteTypeToSlowWalkMap[48];
extern uint8_t gGuestChangeModifier;
@ -1085,4 +1085,10 @@ void decrement_guests_heading_for_park();
rct_string_id get_real_name_string_id_from_id(uint32_t id);
inline const rct_peep_animation& GetPeepAnimation(
PeepSpriteType spriteType, PeepActionSpriteType actionSpriteType = PeepActionSpriteType::None)
{
return g_peep_animation_entries[EnumValue(spriteType)].sprite_animation[EnumValue(actionSpriteType)];
};
#endif

View File

@ -5399,7 +5399,7 @@ static constexpr const rct_sprite_bounds PeepSpriteBounds_Sandwich[] = {
};
rct_peep_animation_entry g_peep_animation_entries[] =
constexpr rct_peep_animation_entry g_peep_animation_entries[] =
{
{ PeepSpriteImage_Normal, PeepSpriteBounds_Normal },
{ PeepSpriteImage_Handyman, PeepSpriteBounds_Handyman },