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

View file

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

View file

@ -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++;
} }
} }