Move CloakingWalls to d_level_unique_cloaking_wall_state
This commit is contained in:
parent
9be3c8e2e8
commit
865bad8607
|
@ -190,7 +190,11 @@ struct cloaking_wall : public prohibit_void_ptr<cloaking_wall>
|
|||
array<fix, 4> back_ls; // back wall saved light values
|
||||
fix time; // how long been cloaking or decloaking
|
||||
};
|
||||
DXX_VALPTRIDX_DEFINE_GLOBAL_FACTORIES(cloaking_wall, clwall, CloakingWalls);
|
||||
|
||||
struct d_level_unique_cloaking_wall_state
|
||||
{
|
||||
cloaking_wall_array CloakingWalls;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct d_level_unique_wall_state
|
||||
|
@ -200,6 +204,9 @@ struct d_level_unique_wall_state
|
|||
|
||||
struct d_level_unique_wall_subsystem_state :
|
||||
d_level_unique_wall_state
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
, d_level_unique_cloaking_wall_state
|
||||
#endif
|
||||
{
|
||||
};
|
||||
|
||||
|
|
|
@ -93,9 +93,6 @@ valptridx<managed_type>::array_managed_type::array_managed_type()
|
|||
|
||||
namespace dsx {
|
||||
d_level_shared_segment_state LevelSharedSegmentState;
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
valptridx<cloaking_wall>::array_managed_type CloakingWalls;
|
||||
#endif
|
||||
d_level_unique_object_state LevelUniqueObjectState;
|
||||
valptridx<object>::array_managed_type Objects;
|
||||
valptridx<trigger>::array_managed_type Triggers;
|
||||
|
|
|
@ -1126,12 +1126,15 @@ int state_save_all_sub(const char *filename, const char *desc)
|
|||
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
//Save cloaking wall info
|
||||
{
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
{
|
||||
const int i = CloakingWalls.get_count();
|
||||
PHYSFS_write(fp, &i, sizeof(int), 1);
|
||||
}
|
||||
range_for (auto &&w, vcclwallptr)
|
||||
range_for (auto &&w, CloakingWalls.vcptr)
|
||||
cloaking_wall_write(w, fp);
|
||||
}
|
||||
#endif
|
||||
|
||||
//Save trigger info
|
||||
|
@ -1720,8 +1723,9 @@ int state_restore_all_sub(const d_level_shared_destructible_light_state &LevelSh
|
|||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
if (version >= 14) { //Restore cloaking wall info
|
||||
unsigned num_cloaking_walls = PHYSFSX_readSXE32(fp, swap);
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
CloakingWalls.set_count(num_cloaking_walls);
|
||||
range_for (auto &&w, vmclwallptr)
|
||||
range_for (auto &&w, CloakingWalls.vmptr)
|
||||
cloaking_wall_read(w, fp);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -246,6 +246,7 @@ void wall_init()
|
|||
}
|
||||
ActiveDoors.set_count(0);
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
CloakingWalls.set_count(0);
|
||||
#endif
|
||||
|
||||
|
@ -517,8 +518,9 @@ void start_wall_cloak(const vmsegptridx_t seg, const unsigned side)
|
|||
Assert(Connectside != side_none);
|
||||
const auto cwall_num = csegp->shared_segment::sides[Connectside].wall_num;
|
||||
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
if (w->state == WALL_DOOR_DECLOAKING) { //decloaking, so reuse door
|
||||
const auto &&r = make_range(vmclwallptr);
|
||||
const auto &&r = make_range(CloakingWalls.vmptr);
|
||||
const auto i = std::find_if(r.begin(), r.end(), find_cloaked_wall_predicate(w));
|
||||
if (i == r.end())
|
||||
{
|
||||
|
@ -539,7 +541,7 @@ void start_wall_cloak(const vmsegptridx_t seg, const unsigned side)
|
|||
return;
|
||||
}
|
||||
CloakingWalls.set_count(c + 1);
|
||||
d = vmclwallptr(c);
|
||||
d = CloakingWalls.vmptr(c);
|
||||
d->time = 0;
|
||||
}
|
||||
else {
|
||||
|
@ -591,8 +593,9 @@ void start_wall_decloak(const vmsegptridx_t seg, const unsigned side)
|
|||
if (w->type == WALL_CLOSED || w->state == WALL_DOOR_DECLOAKING) //already closed or decloaking
|
||||
return;
|
||||
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
if (w->state == WALL_DOOR_CLOAKING) { //cloaking, so reuse door
|
||||
const auto &&r = make_range(vmclwallptr);
|
||||
const auto &&r = make_range(CloakingWalls.vmptr);
|
||||
const auto i = std::find_if(r.begin(), r.end(), find_cloaked_wall_predicate(w));
|
||||
if (i == r.end())
|
||||
{
|
||||
|
@ -614,7 +617,7 @@ void start_wall_decloak(const vmsegptridx_t seg, const unsigned side)
|
|||
return;
|
||||
}
|
||||
CloakingWalls.set_count(c + 1);
|
||||
d = vmclwallptr(c);
|
||||
d = CloakingWalls.vmptr(c);
|
||||
d->time = 0;
|
||||
}
|
||||
else {
|
||||
|
@ -1346,6 +1349,7 @@ void wall_frame_process()
|
|||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
if (Newdemo_state != ND_STATE_PLAYBACK)
|
||||
{
|
||||
auto &CloakingWalls = LevelUniqueWallSubsystemState.CloakingWalls;
|
||||
const auto &&r = partial_range(CloakingWalls, CloakingWalls.get_count());
|
||||
auto &Walls = LevelUniqueWallSubsystemState.Walls;
|
||||
cw_removal_predicate rp{Segments.vmptr, Walls};
|
||||
|
|
Loading…
Reference in a new issue