Split object_move_all for game/endlevel
endlevel wants to freeze the console player's last in-mine position. Instead of copying the position out and back, refactor the flow to let endlevel skip the update of the position.
This commit is contained in:
parent
36873ec12d
commit
dfae1c7203
|
@ -244,7 +244,8 @@ void reset_objects(d_level_unique_object_state &, unsigned n_objs);
|
|||
void compress_objects();
|
||||
|
||||
// move all objects for the current frame
|
||||
window_event_result object_move_all(); // moves all objects
|
||||
window_event_result game_move_all_objects(); // moves all objects
|
||||
window_event_result endlevel_move_all_objects();
|
||||
|
||||
// set viewer object to next object in array
|
||||
void object_goto_next_viewer();
|
||||
|
|
|
@ -531,9 +531,7 @@ window_event_result do_endlevel_frame()
|
|||
static fix explosion_wait2=0;
|
||||
static fix ext_expl_halflife;
|
||||
|
||||
const auto save_last_pos = LevelUniqueObjectState.last_console_player_position; //don't let move code change this
|
||||
auto result = object_move_all();
|
||||
LevelUniqueObjectState.last_console_player_position = save_last_pos;
|
||||
auto result = endlevel_move_all_objects();
|
||||
|
||||
if (ext_expl_playing) {
|
||||
|
||||
|
|
|
@ -1856,7 +1856,7 @@ window_event_result GameProcessFrame()
|
|||
#ifndef NEWHOMER
|
||||
player_info.homing_object_dist = -1; // Assume not being tracked. Laser_do_weapon_sequence modifies this.
|
||||
#endif
|
||||
result = std::max(object_move_all(), result);
|
||||
result = std::max(game_move_all_objects(), result);
|
||||
powerup_grab_cheat_all();
|
||||
|
||||
if (Endlevel_sequence) //might have been started during move
|
||||
|
|
|
@ -2019,7 +2019,7 @@ static window_event_result object_move_one(const vmobjptridx_t obj)
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
//move all objects for the current frame
|
||||
window_event_result object_move_all()
|
||||
static window_event_result object_move_all()
|
||||
{
|
||||
auto &Objects = LevelUniqueObjectState.Objects;
|
||||
auto &vmobjptridx = Objects.vmptridx;
|
||||
|
@ -2034,7 +2034,6 @@ window_event_result object_move_all()
|
|||
ConsoleObject->mtype.phys_info.flags |= PF_LEVELLING;
|
||||
else
|
||||
ConsoleObject->mtype.phys_info.flags &= ~PF_LEVELLING;
|
||||
LevelUniqueObjectState.last_console_player_position = ConsoleObject->pos;
|
||||
|
||||
// Move all objects
|
||||
range_for (const auto &&objp, vmobjptridx)
|
||||
|
@ -2050,6 +2049,16 @@ window_event_result object_move_all()
|
|||
return result;
|
||||
}
|
||||
|
||||
window_event_result game_move_all_objects()
|
||||
{
|
||||
LevelUniqueObjectState.last_console_player_position = ConsoleObject->pos;
|
||||
return object_move_all();
|
||||
}
|
||||
|
||||
window_event_result endlevel_move_all_objects()
|
||||
{
|
||||
return object_move_all();
|
||||
}
|
||||
|
||||
//--unused-- // -----------------------------------------------------------
|
||||
//--unused-- // Moved here from eobject.c on 02/09/94 by MK.
|
||||
|
|
Loading…
Reference in a new issue