Refactor format peep action

This commit is contained in:
Ted John 2019-07-21 00:23:10 +01:00
parent 6fff2079f9
commit 3155c661fa
6 changed files with 127 additions and 106 deletions

View File

@ -1080,11 +1080,8 @@ void window_guest_overview_paint(rct_window* w, rct_drawpixelinfo* dpi)
} }
// Draw the centred label // Draw the centred label
uint32_t argument1, argument2;
Peep* peep = GET_PEEP(w->number); Peep* peep = GET_PEEP(w->number);
get_arguments_from_action(peep, &argument1, &argument2); peep->FormatActionTo(gCommonFormatArgs);
set_format_arg(0, uint32_t, argument1);
set_format_arg(4, uint32_t, argument2);
rct_widget* widget = &w->widgets[WIDX_ACTION_LBL]; rct_widget* widget = &w->widgets[WIDX_ACTION_LBL];
int32_t x = (widget->left + widget->right) / 2 + w->x; int32_t x = (widget->left + widget->right) / 2 + w->x;
int32_t y = w->y + widget->top - 1; int32_t y = w->y + widget->top - 1;

View File

@ -774,11 +774,7 @@ static void window_guest_list_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi,
gfx_draw_sprite(dpi, STR_ENTER_SELECTION_SIZE, 112, y + 1, 0); gfx_draw_sprite(dpi, STR_ENTER_SELECTION_SIZE, 112, y + 1, 0);
// Action // Action
peep->FormatActionTo(gCommonFormatArgs);
get_arguments_from_action(peep, &argument_1, &argument_2);
set_format_arg(0, uint32_t, argument_1);
set_format_arg(4, uint32_t, argument_2);
gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 133, y, 314); gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 133, y, 314);
break; break;
case VIEW_THOUGHTS: case VIEW_THOUGHTS:

View File

@ -955,9 +955,7 @@ void window_staff_overview_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Draw the centred label // Draw the centred label
uint32_t argument1, argument2; uint32_t argument1, argument2;
Peep* peep = GET_PEEP(w->number); Peep* peep = GET_PEEP(w->number);
get_arguments_from_action(peep, &argument1, &argument2); peep->FormatActionTo(gCommonFormatArgs);
set_format_arg(0, uint32_t, argument1);
set_format_arg(4, uint32_t, argument2);
rct_widget* widget = &w->widgets[WIDX_BTM_LABEL]; rct_widget* widget = &w->widgets[WIDX_BTM_LABEL];
int32_t x = (widget->left + widget->right) / 2 + w->x; int32_t x = (widget->left + widget->right) / 2 + w->x;
int32_t y = w->y + widget->top; int32_t y = w->y + widget->top;

View File

@ -698,9 +698,7 @@ void window_staff_list_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_
set_format_arg(2, uint32_t, peep->id); set_format_arg(2, uint32_t, peep->id);
gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y, nameColumnSize); gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y, nameColumnSize);
get_arguments_from_action(peep, &argument_1, &argument_2); peep->FormatActionTo(gCommonFormatArgs);
set_format_arg(0, uint32_t, argument_1);
set_format_arg(4, uint32_t, argument_2);
gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, actionOffset, y, actionColumnSize); gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, actionOffset, y, actionColumnSize);
// True if a patrol path is set for the worker // True if a patrol path is set for the worker

View File

@ -1819,142 +1819,182 @@ Peep* Peep::Generate(const CoordsXYZ coords)
return peep; return peep;
} }
/** void Peep::FormatActionTo(void* argsV) const
* rct2: 0x00698B0D
* peep.sprite_index (eax)
* thought.type (ebx)
* argument_1 (ecx & ebx)
* argument_2 (edx)
*/
void get_arguments_from_action(Peep* peep, uint32_t* argument_1, uint32_t* argument_2)
{ {
Ride* ride; auto args = (uint8_t*)argsV;
switch (state)
switch (peep->state)
{ {
case PEEP_STATE_FALLING: case PEEP_STATE_FALLING:
*argument_1 = peep->action == PEEP_ACTION_DROWNING ? STR_DROWNING : STR_WALKING; set_format_arg_on(args, 0, rct_string_id, action == PEEP_ACTION_DROWNING ? STR_DROWNING : STR_WALKING);
*argument_2 = 0;
break; break;
case PEEP_STATE_1: case PEEP_STATE_1:
*argument_1 = STR_WALKING; set_format_arg_on(args, 0, rct_string_id, STR_WALKING);
*argument_2 = 0;
break; break;
case PEEP_STATE_ON_RIDE: case PEEP_STATE_ON_RIDE:
case PEEP_STATE_LEAVING_RIDE: case PEEP_STATE_LEAVING_RIDE:
case PEEP_STATE_ENTERING_RIDE: case PEEP_STATE_ENTERING_RIDE:
*argument_1 = STR_ON_RIDE; {
ride = get_ride(peep->current_ride); auto ride = get_ride(current_ride);
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE)) if (ride != nullptr)
*argument_1 = STR_IN_RIDE;
*argument_1 |= ((uint32_t)ride->name << 16);
*argument_2 = ride->name_arguments;
break;
case PEEP_STATE_BUYING:
ride = get_ride(peep->current_ride);
*argument_1 = STR_AT_RIDE | ((uint32_t)ride->name << 16);
*argument_2 = ride->name_arguments;
break;
case PEEP_STATE_WALKING:
case PEEP_STATE_USING_BIN:
if (peep->guest_heading_to_ride_id != 0xFF)
{ {
ride = get_ride(peep->guest_heading_to_ride_id); set_format_arg_on(
*argument_1 = STR_HEADING_FOR | ((uint32_t)ride->name << 16); args, 0, rct_string_id, ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) ? STR_IN_RIDE : STR_ON_RIDE);
*argument_2 = ride->name_arguments; ride->FormatNameTo(args + 2);
} }
else else
{ {
*argument_1 = (peep->peep_flags & PEEP_FLAGS_LEAVING_PARK) ? STR_LEAVING_PARK : STR_WALKING; set_format_arg_on(args, 0, rct_string_id, STR_ON_RIDE);
*argument_2 = 0; set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
}
case PEEP_STATE_BUYING:
{
set_format_arg_on(args, 0, rct_string_id, STR_AT_RIDE);
auto ride = get_ride(current_ride);
if (ride != nullptr)
{
ride->FormatNameTo(args + 2);
}
else
{
set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
break;
}
case PEEP_STATE_WALKING:
case PEEP_STATE_USING_BIN:
if (guest_heading_to_ride_id != RIDE_ID_NULL)
{
auto ride = get_ride(guest_heading_to_ride_id);
if (ride != nullptr)
{
set_format_arg_on(args, 0, rct_string_id, STR_HEADING_FOR);
ride->FormatNameTo(args + 2);
}
}
else
{
set_format_arg_on(
args, 0, rct_string_id, (peep_flags & PEEP_FLAGS_LEAVING_PARK) ? STR_LEAVING_PARK : STR_WALKING);
} }
break; break;
case PEEP_STATE_QUEUING_FRONT: case PEEP_STATE_QUEUING_FRONT:
case PEEP_STATE_QUEUING: case PEEP_STATE_QUEUING:
ride = get_ride(peep->current_ride); {
*argument_1 = STR_QUEUING_FOR | ((uint32_t)ride->name << 16); auto ride = get_ride(current_ride);
*argument_2 = ride->name_arguments; if (ride != nullptr)
{
set_format_arg_on(args, 0, rct_string_id, STR_QUEUING_FOR);
ride->FormatNameTo(args + 2);
}
break; break;
}
case PEEP_STATE_SITTING: case PEEP_STATE_SITTING:
*argument_1 = STR_SITTING; set_format_arg_on(args, 0, rct_string_id, STR_SITTING);
*argument_2 = 0;
break; break;
case PEEP_STATE_WATCHING: case PEEP_STATE_WATCHING:
if (peep->current_ride != 0xFF) if (current_ride != RIDE_ID_NULL)
{ {
ride = get_ride(peep->current_ride); auto ride = get_ride(current_ride);
*argument_1 = STR_WATCHING_RIDE | ((uint32_t)ride->name << 16); if (ride != nullptr)
*argument_2 = ride->name_arguments; {
if (peep->current_seat & 0x1) set_format_arg_on(
*argument_1 = STR_WATCHING_CONSTRUCTION_OF | ((uint32_t)ride->name << 16); args, 0, rct_string_id, (current_seat & 0x1) ? STR_WATCHING_CONSTRUCTION_OF : STR_WATCHING_RIDE);
else ride->FormatNameTo(args + 2);
*argument_1 = STR_WATCHING_RIDE | ((uint32_t)ride->name << 16); }
} }
else else
{ {
*argument_1 = (peep->current_seat & 0x1) ? STR_WATCHING_NEW_RIDE_BEING_CONSTRUCTED : STR_LOOKING_AT_SCENERY; set_format_arg_on(
*argument_2 = 0; args, 0, rct_string_id,
(current_seat & 0x1) ? STR_WATCHING_NEW_RIDE_BEING_CONSTRUCTED : STR_LOOKING_AT_SCENERY);
} }
break; break;
case PEEP_STATE_PICKED: case PEEP_STATE_PICKED:
*argument_1 = STR_SELECT_LOCATION; set_format_arg_on(args, 0, rct_string_id, STR_SELECT_LOCATION);
*argument_2 = 0;
break; break;
case PEEP_STATE_PATROLLING: case PEEP_STATE_PATROLLING:
case PEEP_STATE_ENTERING_PARK: case PEEP_STATE_ENTERING_PARK:
case PEEP_STATE_LEAVING_PARK: case PEEP_STATE_LEAVING_PARK:
*argument_1 = STR_WALKING; set_format_arg_on(args, 0, rct_string_id, STR_WALKING);
*argument_2 = 0;
break; break;
case PEEP_STATE_MOWING: case PEEP_STATE_MOWING:
*argument_1 = STR_MOWING_GRASS; set_format_arg_on(args, 0, rct_string_id, STR_MOWING_GRASS);
*argument_2 = 0;
break; break;
case PEEP_STATE_SWEEPING: case PEEP_STATE_SWEEPING:
*argument_1 = STR_SWEEPING_FOOTPATH; set_format_arg_on(args, 0, rct_string_id, STR_SWEEPING_FOOTPATH);
*argument_2 = 0;
break; break;
case PEEP_STATE_WATERING: case PEEP_STATE_WATERING:
*argument_1 = STR_WATERING_GARDENS; set_format_arg_on(args, 0, rct_string_id, STR_WATERING_GARDENS);
*argument_2 = 0;
break; break;
case PEEP_STATE_EMPTYING_BIN: case PEEP_STATE_EMPTYING_BIN:
*argument_1 = STR_EMPTYING_LITTER_BIN; set_format_arg_on(args, 0, rct_string_id, STR_EMPTYING_LITTER_BIN);
*argument_2 = 0;
break; break;
case PEEP_STATE_ANSWERING: case PEEP_STATE_ANSWERING:
if (peep->sub_state == 0) if (sub_state == 0)
{ {
*argument_1 = STR_WALKING; set_format_arg_on(args, 0, rct_string_id, STR_WALKING);
*argument_2 = 0;
} }
else if (peep->sub_state == 1) else if (sub_state == 1)
{ {
*argument_1 = STR_ANSWERING_RADIO_CALL; set_format_arg_on(args, 0, rct_string_id, STR_ANSWERING_RADIO_CALL);
*argument_2 = 0;
} }
else else
{ {
ride = get_ride(peep->current_ride); set_format_arg_on(args, 0, rct_string_id, STR_RESPONDING_TO_RIDE_BREAKDOWN_CALL);
*argument_1 = STR_RESPONDING_TO_RIDE_BREAKDOWN_CALL | ((uint32_t)ride->name << 16); auto ride = get_ride(current_ride);
*argument_2 = ride->name_arguments; if (ride != nullptr)
{
ride->FormatNameTo(args + 2);
}
else
{
set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
} }
break; break;
case PEEP_STATE_FIXING: case PEEP_STATE_FIXING:
ride = get_ride(peep->current_ride); {
*argument_1 = STR_FIXING_RIDE | ((uint32_t)ride->name << 16); set_format_arg_on(args, 0, rct_string_id, STR_FIXING_RIDE);
*argument_2 = ride->name_arguments; auto ride = get_ride(current_ride);
if (ride != nullptr)
{
ride->FormatNameTo(args + 2);
}
else
{
set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
break; break;
}
case PEEP_STATE_HEADING_TO_INSPECTION: case PEEP_STATE_HEADING_TO_INSPECTION:
ride = get_ride(peep->current_ride); {
*argument_1 = STR_HEADING_TO_RIDE_FOR_INSPECTION | ((uint32_t)ride->name << 16); set_format_arg_on(args, 0, rct_string_id, STR_HEADING_TO_RIDE_FOR_INSPECTION);
*argument_2 = ride->name_arguments; auto ride = get_ride(current_ride);
if (ride != nullptr)
{
ride->FormatNameTo(args + 2);
}
else
{
set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
break; break;
}
case PEEP_STATE_INSPECTING: case PEEP_STATE_INSPECTING:
ride = get_ride(peep->current_ride); {
*argument_1 = STR_INSPECTING_RIDE | ((uint32_t)ride->name << 16); set_format_arg_on(args, 0, rct_string_id, STR_INSPECTING_RIDE);
*argument_2 = ride->name_arguments; auto ride = get_ride(current_ride);
if (ride != nullptr)
{
ride->FormatNameTo(args + 2);
}
else
{
set_format_arg_on(args, 2, rct_string_id, STR_NONE);
}
break; break;
}
} }
} }
@ -2142,22 +2182,14 @@ void peep_set_map_tooltip(Peep* peep)
set_map_tooltip_format_arg(2, uint32_t, get_peep_face_sprite_small(peep)); set_map_tooltip_format_arg(2, uint32_t, get_peep_face_sprite_small(peep));
set_map_tooltip_format_arg(6, rct_string_id, peep->name_string_idx); set_map_tooltip_format_arg(6, rct_string_id, peep->name_string_idx);
set_map_tooltip_format_arg(8, uint32_t, peep->id); set_map_tooltip_format_arg(8, uint32_t, peep->id);
peep->FormatActionTo(gMapTooltipFormatArgs + 12);
uint32_t arg0 = 0, arg1 = 0;
get_arguments_from_action(peep, &arg0, &arg1);
set_map_tooltip_format_arg(12, uint32_t, arg0);
set_map_tooltip_format_arg(16, uint32_t, arg1);
} }
else else
{ {
set_map_tooltip_format_arg(0, rct_string_id, STR_STAFF_MAP_TIP); set_map_tooltip_format_arg(0, rct_string_id, STR_STAFF_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, peep->name_string_idx); set_map_tooltip_format_arg(2, rct_string_id, peep->name_string_idx);
set_map_tooltip_format_arg(4, uint32_t, peep->id); set_map_tooltip_format_arg(4, uint32_t, peep->id);
peep->FormatActionTo(gMapTooltipFormatArgs + 8);
uint32_t arg0 = 0, arg1 = 0;
get_arguments_from_action(peep, &arg0, &arg1);
set_map_tooltip_format_arg(8, uint32_t, arg0);
set_map_tooltip_format_arg(12, uint32_t, arg1);
} }
} }

View File

@ -718,6 +718,7 @@ public: // Peep
void RemoveFromQueue(); void RemoveFromQueue();
void RemoveFromRide(); void RemoveFromRide();
void InsertNewThought(PeepThoughtType thought_type, uint8_t thought_arguments); void InsertNewThought(PeepThoughtType thought_type, uint8_t thought_arguments);
void FormatActionTo(void* args) const;
// TODO: Make these private again when done refactoring // TODO: Make these private again when done refactoring
public: // Peep public: // Peep
@ -957,7 +958,6 @@ void peep_stop_crowd_noise();
void peep_update_crowd_noise(); void peep_update_crowd_noise();
void peep_update_days_in_queue(); void peep_update_days_in_queue();
void peep_applause(); void peep_applause();
void get_arguments_from_action(Peep* peep, uint32_t* argument_1, uint32_t* argument_2);
void peep_thought_set_format_args(rct_peep_thought* thought); void peep_thought_set_format_args(rct_peep_thought* thought);
int32_t get_peep_face_sprite_small(Peep* peep); int32_t get_peep_face_sprite_small(Peep* peep);
int32_t get_peep_face_sprite_large(Peep* peep); int32_t get_peep_face_sprite_large(Peep* peep);