Use range_for for Delta_lights
This commit is contained in:
parent
80bbc9c69c
commit
80f3f83577
|
@ -343,8 +343,8 @@ struct delta_light {
|
||||||
struct dl_index {
|
struct dl_index {
|
||||||
segnum_t segnum;
|
segnum_t segnum;
|
||||||
sbyte sidenum;
|
sbyte sidenum;
|
||||||
sbyte count;
|
uint8_t count;
|
||||||
short index;
|
uint16_t index;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_DL_INDICES 500
|
#define MAX_DL_INDICES 500
|
||||||
|
@ -353,7 +353,7 @@ struct dl_index {
|
||||||
#define DL_SCALE 2048 // Divide light to allow 3 bits integer, 5 bits fraction.
|
#define DL_SCALE 2048 // Divide light to allow 3 bits integer, 5 bits fraction.
|
||||||
|
|
||||||
extern array<dl_index, MAX_DL_INDICES> Dl_indices;
|
extern array<dl_index, MAX_DL_INDICES> Dl_indices;
|
||||||
extern delta_light Delta_lights[MAX_DELTA_LIGHTS];
|
extern array<delta_light, MAX_DELTA_LIGHTS> Delta_lights;
|
||||||
extern unsigned Num_static_lights;
|
extern unsigned Num_static_lights;
|
||||||
|
|
||||||
int subtract_light(segnum_t segnum, int sidenum);
|
int subtract_light(segnum_t segnum, int sidenum);
|
||||||
|
|
|
@ -801,7 +801,6 @@ static int load_game_data(PHYSFS_file *LoadFile)
|
||||||
short game_top_fileinfo_version;
|
short game_top_fileinfo_version;
|
||||||
int object_offset;
|
int object_offset;
|
||||||
int gs_num_objects;
|
int gs_num_objects;
|
||||||
int num_delta_lights;
|
|
||||||
int trig_size;
|
int trig_size;
|
||||||
|
|
||||||
//===================== READ FILE INFO ========================
|
//===================== READ FILE INFO ========================
|
||||||
|
@ -837,8 +836,8 @@ static int load_game_data(PHYSFS_file *LoadFile)
|
||||||
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
|
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
|
||||||
|
|
||||||
#if defined(DXX_BUILD_DESCENT_I)
|
#if defined(DXX_BUILD_DESCENT_I)
|
||||||
(void)num_delta_lights;
|
|
||||||
#elif defined(DXX_BUILD_DESCENT_II)
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
|
unsigned num_delta_lights;
|
||||||
if (game_top_fileinfo_version >= 29) {
|
if (game_top_fileinfo_version >= 29) {
|
||||||
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
|
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
|
||||||
Num_static_lights = PHYSFSX_readInt(LoadFile);
|
Num_static_lights = PHYSFSX_readInt(LoadFile);
|
||||||
|
@ -1011,11 +1010,12 @@ static int load_game_data(PHYSFS_file *LoadFile)
|
||||||
|
|
||||||
//================ READ DELTA LIGHT INFO ===============
|
//================ READ DELTA LIGHT INFO ===============
|
||||||
|
|
||||||
for (int i = 0; i < num_delta_lights; i++) {
|
|
||||||
if (game_top_fileinfo_version < 29) {
|
if (game_top_fileinfo_version < 29) {
|
||||||
;
|
;
|
||||||
} else
|
} else
|
||||||
delta_light_read(&Delta_lights[i], LoadFile);
|
{
|
||||||
|
range_for (auto &i, partial_range(Delta_lights, num_delta_lights))
|
||||||
|
delta_light_read(&i, LoadFile);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1531,7 +1531,6 @@ static int save_game_data(PHYSFS_file *SaveFile)
|
||||||
#elif defined(DXX_BUILD_DESCENT_II)
|
#elif defined(DXX_BUILD_DESCENT_II)
|
||||||
short game_top_fileinfo_version = Gamesave_current_version >= 5 ? 31 : 25;
|
short game_top_fileinfo_version = Gamesave_current_version >= 5 ? 31 : 25;
|
||||||
int dl_indices_offset=0, delta_light_offset=0;
|
int dl_indices_offset=0, delta_light_offset=0;
|
||||||
int num_delta_lights=0;
|
|
||||||
#endif
|
#endif
|
||||||
int player_offset=0, object_offset=0, walls_offset=0, doors_offset=0, triggers_offset=0, control_offset=0, matcen_offset=0; //, links_offset;
|
int player_offset=0, object_offset=0, walls_offset=0, doors_offset=0, triggers_offset=0, control_offset=0, matcen_offset=0; //, links_offset;
|
||||||
int offset_offset=0, end_offset=0;
|
int offset_offset=0, end_offset=0;
|
||||||
|
@ -1557,6 +1556,7 @@ static int save_game_data(PHYSFS_file *SaveFile)
|
||||||
WRITE_HEADER_ENTRY(matcen_info, Num_robot_centers);
|
WRITE_HEADER_ENTRY(matcen_info, Num_robot_centers);
|
||||||
|
|
||||||
#if defined(DXX_BUILD_DESCENT_II)
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
|
unsigned num_delta_lights = 0;
|
||||||
if (game_top_fileinfo_version >= 29)
|
if (game_top_fileinfo_version >= 29)
|
||||||
{
|
{
|
||||||
WRITE_HEADER_ENTRY(dl_index, Num_static_lights);
|
WRITE_HEADER_ENTRY(dl_index, Num_static_lights);
|
||||||
|
@ -1628,8 +1628,8 @@ static int save_game_data(PHYSFS_file *SaveFile)
|
||||||
dl_index_write(&i, SaveFile);
|
dl_index_write(&i, SaveFile);
|
||||||
|
|
||||||
delta_light_offset = PHYSFS_tell(SaveFile);
|
delta_light_offset = PHYSFS_tell(SaveFile);
|
||||||
for (int i = 0; i < num_delta_lights; i++)
|
range_for (auto &i, partial_range(Delta_lights, num_delta_lights))
|
||||||
delta_light_write(&Delta_lights[i], SaveFile);
|
delta_light_write(&i, SaveFile);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ using std::min;
|
||||||
|
|
||||||
#if defined(DXX_BUILD_DESCENT_II)
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
array<dl_index, MAX_DL_INDICES> Dl_indices;
|
array<dl_index, MAX_DL_INDICES> Dl_indices;
|
||||||
delta_light Delta_lights[MAX_DELTA_LIGHTS];
|
array<delta_light, MAX_DELTA_LIGHTS> Delta_lights;
|
||||||
unsigned Num_static_lights;
|
unsigned Num_static_lights;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1691,18 +1691,17 @@ static void change_light(segnum_t segnum, int sidenum, int dir)
|
||||||
range_for (auto &i, partial_range(Dl_indices, Num_static_lights))
|
range_for (auto &i, partial_range(Dl_indices, Num_static_lights))
|
||||||
if (i.segnum == segnum && i.sidenum == sidenum)
|
if (i.segnum == segnum && i.sidenum == sidenum)
|
||||||
{
|
{
|
||||||
auto dlp = &Delta_lights[i.index];
|
range_for (auto &j, partial_range(Delta_lights, static_cast<uint_fast32_t>(i.index), static_cast<uint_fast32_t>(i.count)))
|
||||||
for (int j=0; j < i.count; j++) {
|
{
|
||||||
for (int k=0; k<4; k++) {
|
for (int k=0; k<4; k++) {
|
||||||
fix dl,new_l;
|
fix dl,new_l;
|
||||||
dl = dir * dlp->vert_light[k] * DL_SCALE;
|
dl = dir * j.vert_light[k] * DL_SCALE;
|
||||||
Assert((dlp->segnum >= 0) && (dlp->segnum <= Highest_segment_index));
|
Assert(j.segnum >= 0 && j.segnum <= Highest_segment_index);
|
||||||
Assert((dlp->sidenum >= 0) && (dlp->sidenum < MAX_SIDES_PER_SEGMENT));
|
Assert(j.sidenum >= 0 && j.sidenum < MAX_SIDES_PER_SEGMENT);
|
||||||
new_l = (Segments[dlp->segnum].sides[dlp->sidenum].uvls[k].l += dl);
|
new_l = (Segments[j.segnum].sides[j.sidenum].uvls[k].l += dl);
|
||||||
if (new_l < 0)
|
if (new_l < 0)
|
||||||
Segments[dlp->segnum].sides[dlp->sidenum].uvls[k].l = 0;
|
Segments[j.segnum].sides[j.sidenum].uvls[k].l = 0;
|
||||||
}
|
}
|
||||||
dlp++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue