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:
Kp 2019-12-22 05:34:08 +00:00
parent 36873ec12d
commit dfae1c7203
4 changed files with 15 additions and 7 deletions

View file

@ -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();

View file

@ -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) {

View file

@ -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

View file

@ -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.