Move Control_center_player_been_seen to d_level_unique_control_center_state

This commit is contained in:
Kp 2019-08-15 01:34:22 +00:00
parent 0826881fa0
commit d9d536afda
4 changed files with 10 additions and 18 deletions

View file

@ -173,8 +173,6 @@ static inline vms_vector make_random_vector()
return make_random_vector(v), v;
}
extern player_visibility_state Control_center_player_been_seen;
}
#ifdef dsx
namespace dsx {

View file

@ -570,6 +570,7 @@ struct d_level_unique_control_center_state
uint8_t Control_center_destroyed;
uint8_t Control_center_been_hit;
uint8_t Control_center_present;
player_visibility_state Control_center_player_been_seen;
objnum_t Dead_controlcen_object_num;
int Countdown_seconds_left;
fix Countdown_timer;

View file

@ -67,12 +67,6 @@ int Reactor_strength=-1; //-1 mean not set by designer
control_center_triggers ControlCenterTriggers;
namespace dcx {
player_visibility_state Control_center_player_been_seen;
}
namespace dsx {
static window_event_result do_countdown_frame();
@ -338,7 +332,7 @@ void do_controlcen_frame(const vmobjptridx_t obj)
#endif
auto &plrobj = get_local_plrobj();
if (!(LevelUniqueControlCenterState.Control_center_been_hit || player_is_visible(Control_center_player_been_seen)))
if (!(LevelUniqueControlCenterState.Control_center_been_hit || player_is_visible(LevelUniqueControlCenterState.Control_center_player_been_seen)))
{
if (!(d_tick_count % 8)) { // Do every so often...
// This is a hack. Since the control center is not processed by
@ -361,7 +355,7 @@ void do_controlcen_frame(const vmobjptridx_t obj)
auto vec_to_player = vm_vec_sub(ConsoleObject->pos, obj->pos);
auto dist_to_player = vm_vec_normalize_quick(vec_to_player);
if (dist_to_player < F1_0*200) {
Control_center_player_been_seen = player_is_visible_from_object(obj, obj->pos, 0, vec_to_player);
LevelUniqueControlCenterState.Control_center_player_been_seen = player_is_visible_from_object(obj, obj->pos, 0, vec_to_player);
LevelUniqueControlCenterState.Frametime_until_next_fire = 0;
}
}
@ -371,7 +365,7 @@ void do_controlcen_frame(const vmobjptridx_t obj)
#if defined(DXX_BUILD_DESCENT_II)
// Periodically, make the reactor fall asleep if player not visible.
if (LevelUniqueControlCenterState.Control_center_been_hit || player_is_visible(Control_center_player_been_seen))
if (LevelUniqueControlCenterState.Control_center_been_hit || player_is_visible(LevelUniqueControlCenterState.Control_center_player_been_seen))
{
if ((Last_time_cc_vis_check + F1_0*5 < GameTime64) || (Last_time_cc_vis_check > GameTime64)) {
fix dist_to_player;
@ -380,8 +374,8 @@ void do_controlcen_frame(const vmobjptridx_t obj)
dist_to_player = vm_vec_normalize_quick(vec_to_player);
Last_time_cc_vis_check = GameTime64;
if (dist_to_player < F1_0*120) {
Control_center_player_been_seen = player_is_visible_from_object(obj, obj->pos, 0, vec_to_player);
if (!player_is_visible(Control_center_player_been_seen))
LevelUniqueControlCenterState.Control_center_player_been_seen = player_is_visible_from_object(obj, obj->pos, 0, vec_to_player);
if (!player_is_visible(LevelUniqueControlCenterState.Control_center_player_been_seen))
LevelUniqueControlCenterState.Control_center_been_hit = 0;
}
}
@ -413,7 +407,7 @@ void do_controlcen_frame(const vmobjptridx_t obj)
if (dist_to_player > F1_0*300)
{
LevelUniqueControlCenterState.Control_center_been_hit = 0;
Control_center_player_been_seen = player_visibility_state::no_line_of_sight;
LevelUniqueControlCenterState.Control_center_player_been_seen = player_visibility_state::no_line_of_sight;
return;
}
@ -521,9 +515,8 @@ void init_controlcen_for_level(void)
// Say the control center has not yet been hit.
LevelUniqueControlCenterState.Control_center_been_hit = 0;
Control_center_player_been_seen = player_visibility_state::no_line_of_sight;
LevelUniqueControlCenterState.Control_center_player_been_seen = player_visibility_state::no_line_of_sight;
LevelUniqueControlCenterState.Frametime_until_next_fire = 0;
LevelUniqueControlCenterState.Dead_controlcen_object_num = object_none;
}

View file

@ -1234,7 +1234,7 @@ int state_save_all_sub(const char *filename, const char *desc)
PHYSFS_write(fp, &Control_center_been_hit, sizeof(int), 1);
}
{
const auto cc = static_cast<int>(Control_center_player_been_seen);
const auto cc = static_cast<int>(LevelUniqueControlCenterState.Control_center_player_been_seen);
PHYSFS_write(fp, &cc, sizeof(int), 1);
}
PHYSFS_write(fp, &LevelUniqueControlCenterState.Frametime_until_next_fire, sizeof(int), 1);
@ -1865,7 +1865,7 @@ int state_restore_all_sub(const d_level_shared_destructible_light_state &LevelSh
LevelUniqueControlCenterState.Control_center_been_hit = PHYSFSX_readSXE32(fp, swap);
{
const int cc = PHYSFSX_readSXE32(fp, swap);
Control_center_player_been_seen = static_cast<player_visibility_state>(cc);
LevelUniqueControlCenterState.Control_center_player_been_seen = static_cast<player_visibility_state>(cc);
}
LevelUniqueControlCenterState.Frametime_until_next_fire = PHYSFSX_readSXE32(fp, swap);
LevelUniqueControlCenterState.Control_center_present = PHYSFSX_readSXE32(fp, swap);