Use range_for for Delta_lights

This commit is contained in:
Kp 2014-11-23 04:36:59 +00:00
parent 80bbc9c69c
commit 80f3f83577
3 changed files with 18 additions and 19 deletions

View file

@ -343,8 +343,8 @@ struct delta_light {
struct dl_index {
segnum_t segnum;
sbyte sidenum;
sbyte count;
short index;
uint8_t count;
uint16_t index;
};
#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.
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;
int subtract_light(segnum_t segnum, int sidenum);

View file

@ -801,7 +801,6 @@ static int load_game_data(PHYSFS_file *LoadFile)
short game_top_fileinfo_version;
int object_offset;
int gs_num_objects;
int num_delta_lights;
int trig_size;
//===================== READ FILE INFO ========================
@ -837,8 +836,8 @@ static int load_game_data(PHYSFS_file *LoadFile)
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
#if defined(DXX_BUILD_DESCENT_I)
(void)num_delta_lights;
#elif defined(DXX_BUILD_DESCENT_II)
unsigned num_delta_lights;
if (game_top_fileinfo_version >= 29) {
PHYSFSX_fseek(LoadFile, 4, SEEK_CUR);
Num_static_lights = PHYSFSX_readInt(LoadFile);
@ -1011,11 +1010,12 @@ static int load_game_data(PHYSFS_file *LoadFile)
//================ READ DELTA LIGHT INFO ===============
for (int i = 0; i < num_delta_lights; i++) {
if (game_top_fileinfo_version < 29) {
;
} 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
@ -1531,7 +1531,6 @@ static int save_game_data(PHYSFS_file *SaveFile)
#elif defined(DXX_BUILD_DESCENT_II)
short game_top_fileinfo_version = Gamesave_current_version >= 5 ? 31 : 25;
int dl_indices_offset=0, delta_light_offset=0;
int num_delta_lights=0;
#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 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);
#if defined(DXX_BUILD_DESCENT_II)
unsigned num_delta_lights = 0;
if (game_top_fileinfo_version >= 29)
{
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);
delta_light_offset = PHYSFS_tell(SaveFile);
for (int i = 0; i < num_delta_lights; i++)
delta_light_write(&Delta_lights[i], SaveFile);
range_for (auto &i, partial_range(Delta_lights, num_delta_lights))
delta_light_write(&i, SaveFile);
}
#endif

View file

@ -59,7 +59,7 @@ using std::min;
#if defined(DXX_BUILD_DESCENT_II)
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;
#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))
if (i.segnum == segnum && i.sidenum == sidenum)
{
auto dlp = &Delta_lights[i.index];
for (int j=0; j < i.count; j++) {
range_for (auto &j, partial_range(Delta_lights, static_cast<uint_fast32_t>(i.index), static_cast<uint_fast32_t>(i.count)))
{
for (int k=0; k<4; k++) {
fix dl,new_l;
dl = dir * dlp->vert_light[k] * DL_SCALE;
Assert((dlp->segnum >= 0) && (dlp->segnum <= Highest_segment_index));
Assert((dlp->sidenum >= 0) && (dlp->sidenum < MAX_SIDES_PER_SEGMENT));
new_l = (Segments[dlp->segnum].sides[dlp->sidenum].uvls[k].l += dl);
dl = dir * j.vert_light[k] * DL_SCALE;
Assert(j.segnum >= 0 && j.segnum <= Highest_segment_index);
Assert(j.sidenum >= 0 && j.sidenum < MAX_SIDES_PER_SEGMENT);
new_l = (Segments[j.segnum].sides[j.sidenum].uvls[k].l += dl);
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++;
}
}