Convert uses of vmsegptr_t to shared_segment& where possible
This commit is contained in:
parent
ce7c9946e8
commit
2e398c02c7
|
@ -221,7 +221,7 @@ namespace dsx {
|
|||
// 0 = successful attach
|
||||
// 1 = No room in Segments[].
|
||||
// 2 = No room in Vertices[].
|
||||
int med_attach_segment(vmsegptridx_t destseg, vmsegptr_t newseg, int destside, int newside);
|
||||
int med_attach_segment(vmsegptridx_t destseg, csmusegment newseg, unsigned destside, unsigned newside);
|
||||
|
||||
// Delete a segment.
|
||||
// Deletes a segment from the global array Segments.
|
||||
|
@ -352,7 +352,7 @@ void assign_default_uvs_to_side(vmsegptridx_t segp, unsigned side);
|
|||
void med_assign_uvs_to_side(vmsegptridx_t con_seg, unsigned con_common_side, vcsegptr_t base_seg, unsigned base_common_side, unsigned abs_id1, unsigned abs_id2);
|
||||
|
||||
// Create coordinate axes in orientation of specified segment, stores vertices at *vp.
|
||||
void create_coordinate_axes_from_segment(vmsegptr_t sp, std::array<unsigned, 16> &vertnums);
|
||||
void create_coordinate_axes_from_segment(const shared_segment &sp, std::array<unsigned, 16> &vertnums);
|
||||
|
||||
// Set Vertex_active to number of occurrences of each vertex.
|
||||
// Set Num_vertices.
|
||||
|
@ -543,8 +543,8 @@ namespace dsx {
|
|||
int place_object(vmsegptridx_t segp, const vms_vector &object_pos, short object_type, short object_id);
|
||||
|
||||
// from ksegsize.c
|
||||
void med_extract_up_vector_from_segment_side(vmsegptr_t sp, int sidenum, vms_vector &vp);
|
||||
void med_extract_right_vector_from_segment_side(vmsegptr_t sp, int sidenum, vms_vector &vp);
|
||||
void med_extract_up_vector_from_segment_side(const shared_segment &sp, int sidenum, vms_vector &vp);
|
||||
void med_extract_right_vector_from_segment_side(const shared_segment &sp, int sidenum, vms_vector &vp);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ void fuelcen_create( vmsegptridx_t segp);
|
|||
// a segment is loaded from disk.
|
||||
void fuelcen_activate(vmsegptridx_t segp);
|
||||
// Deletes a segment as a fuel center.
|
||||
void fuelcen_delete(vmsegptr_t segp);
|
||||
void fuelcen_delete(shared_segment &segp);
|
||||
|
||||
// Create a matcen robot
|
||||
imobjptridx_t create_morph_robot(vmsegptridx_t segp, const vms_vector &object_pos, unsigned object_id);
|
||||
|
|
|
@ -101,7 +101,7 @@ static void add_light_intensity_all_verts(unique_side &s, const fix intensity)
|
|||
// Note that it is also possible to visit the original light-casting segment, for example
|
||||
// going from segment 0 to 2, then from 2 to 0. This is peculiar and probably not
|
||||
// desired, but not entirely invalid. 2 reflects some light back to 0.
|
||||
static void apply_light_intensity(const vmsegptr_t segp, const unsigned sidenum, fix intensity, const unsigned depth)
|
||||
static void apply_light_intensity(const csmusegment segp, const unsigned sidenum, fix intensity, const unsigned depth)
|
||||
{
|
||||
if (intensity == 0)
|
||||
return;
|
||||
|
@ -110,7 +110,7 @@ static void apply_light_intensity(const vmsegptr_t segp, const unsigned sidenum,
|
|||
auto &vcwallptr = Walls.vcptr;
|
||||
const auto wid_result = WALL_IS_DOORWAY(GameBitmaps, Textures, vcwallptr, segp, sidenum);
|
||||
if (!(wid_result & WID_RENDPAST_FLAG)) {
|
||||
add_light_intensity_all_verts(segp->unique_segment::sides[sidenum], intensity);
|
||||
add_light_intensity_all_verts(segp.u.sides[sidenum], intensity);
|
||||
return; // we return because there is a wall here, and light does not shine through walls
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@ static void apply_light_intensity(const vmsegptr_t segp, const unsigned sidenum,
|
|||
intensity /= 3;
|
||||
if (!intensity)
|
||||
return;
|
||||
const auto &&csegp = vmsegptr(segp->children[sidenum]);
|
||||
const csmusegment &&csegp = vmsegptr(segp.s.children[sidenum]);
|
||||
for (int s=0; s<MAX_SIDES_PER_SEGMENT; s++)
|
||||
apply_light_intensity(csegp, s, intensity, depth+1);
|
||||
}
|
||||
|
@ -133,13 +133,13 @@ static void apply_light_intensity(const vmsegptr_t segp, const unsigned sidenum,
|
|||
// the associated intensity to segp. It calls apply_light_intensity to apply intensity/3
|
||||
// to all neighbors. apply_light_intensity recursively calls itself to apply light to
|
||||
// subsequent neighbors (and forming loops, see above).
|
||||
static void propagate_light_intensity(const vmsegptr_t segp, int sidenum)
|
||||
static void propagate_light_intensity(const csmusegment segp, const unsigned sidenum)
|
||||
{
|
||||
fix intensity;
|
||||
short texmap;
|
||||
|
||||
intensity = 0;
|
||||
auto &us = segp->unique_segment::sides[sidenum];
|
||||
auto &us = segp.u.sides[sidenum];
|
||||
auto &TmapInfo = LevelUniqueTmapInfoState.TmapInfo;
|
||||
texmap = us.tmap_num;
|
||||
intensity += TmapInfo[texmap].lighting;
|
||||
|
@ -203,7 +203,7 @@ int LightCopyIntensity(void)
|
|||
{
|
||||
int intensity;
|
||||
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
intensity = get_light_intensity(segp, Curside, Curvert);
|
||||
|
||||
range_for (const int v, xrange(4u))
|
||||
|
@ -219,7 +219,7 @@ int LightCopyIntensitySegment(void)
|
|||
{
|
||||
int intensity;
|
||||
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
intensity = get_light_intensity(segp, Curside, Curvert);
|
||||
|
||||
for (int s=0; s<MAX_SIDES_PER_SEGMENT; s++)
|
||||
|
@ -233,7 +233,7 @@ int LightCopyIntensitySegment(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightDecreaseLightVertex(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
set_light_intensity(segp, Curside, Curvert, get_light_intensity(segp, Curside, Curvert) - F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
||||
return 1;
|
||||
|
@ -242,7 +242,7 @@ int LightDecreaseLightVertex(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightIncreaseLightVertex(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
set_light_intensity(segp, Curside, Curvert, get_light_intensity(segp, Curside, Curvert) + F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
||||
return 1;
|
||||
|
@ -251,7 +251,7 @@ int LightIncreaseLightVertex(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightDecreaseLightSide(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, Curside, v, get_light_intensity(segp, Curside, v) - F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
||||
|
@ -261,7 +261,7 @@ int LightDecreaseLightSide(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightIncreaseLightSide(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, Curside, v, get_light_intensity(segp, Curside, v) + F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
||||
|
@ -271,7 +271,7 @@ int LightIncreaseLightSide(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightDecreaseLightSegment(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
for (int s=0; s<MAX_SIDES_PER_SEGMENT; s++)
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, s, v, get_light_intensity(segp, s, v) - F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
@ -282,7 +282,7 @@ int LightDecreaseLightSegment(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightIncreaseLightSegment(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
for (int s=0; s<MAX_SIDES_PER_SEGMENT; s++)
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, s, v, get_light_intensity(segp, s, v) + F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
@ -293,7 +293,7 @@ int LightIncreaseLightSegment(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightSetDefault(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, Curside, v, DEFAULT_LIGHTING);
|
||||
|
||||
|
@ -304,7 +304,7 @@ int LightSetDefault(void)
|
|||
// -----------------------------------------------------------------------------
|
||||
int LightSetMaximum(void)
|
||||
{
|
||||
const vmsegptr_t segp = Cursegp;
|
||||
unique_segment &segp = Cursegp;
|
||||
range_for (const int v, xrange(4u))
|
||||
set_light_intensity(segp, Curside, v, (NUM_LIGHTING_LEVELS - 1) * F1_0 / NUM_LIGHTING_LEVELS);
|
||||
|
||||
|
|
|
@ -129,12 +129,11 @@ static void scale_vert(const shared_segment &sp, const unsigned vertex_ind, cons
|
|||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------
|
||||
static void scale_free_verts(const vmsegptr_t sp, const vms_vector &vp, int side, fix scale_factor)
|
||||
static void scale_free_verts(const shared_segment &sp, const vms_vector &vp, const unsigned side, fix scale_factor)
|
||||
{
|
||||
int vertex_ind;
|
||||
range_for (auto &v, Side_to_verts[side])
|
||||
{
|
||||
vertex_ind = sp->verts[v];
|
||||
const auto vertex_ind = sp.verts[v];
|
||||
if (SegSizeMode || is_free_vertex(vertex_ind))
|
||||
scale_vert(sp, vertex_ind, vp, scale_factor);
|
||||
}
|
||||
|
@ -144,7 +143,7 @@ static void scale_free_verts(const vmsegptr_t sp, const vms_vector &vp, int side
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Make segment *sp bigger in dimension dimension by amount amount.
|
||||
static void med_scale_segment_new(const vmsegptr_t sp, int dimension, fix amount)
|
||||
static void med_scale_segment_new(const shared_segment &sp, const int dimension, const fix amount)
|
||||
{
|
||||
vms_matrix mat;
|
||||
|
||||
|
@ -182,12 +181,12 @@ static void med_scale_segment_new(const vmsegptr_t sp, int dimension, fix amount
|
|||
// ------------------------------------------------------------------------------------------
|
||||
// Extract a vector from a segment. The vector goes from the start face to the end face.
|
||||
// The point on each face is the average of the four points forming the face.
|
||||
static void extract_vector_from_segment_side(const vmsegptr_t sp, const unsigned side, vms_vector &vp, const unsigned vla, const unsigned vlb, const unsigned vra, const unsigned vrb)
|
||||
static void extract_vector_from_segment_side(const shared_segment &sp, const unsigned side, vms_vector &vp, const unsigned vla, const unsigned vlb, const unsigned vra, const unsigned vrb)
|
||||
{
|
||||
auto &LevelSharedVertexState = LevelSharedSegmentState.get_vertex_state();
|
||||
auto &Vertices = LevelSharedVertexState.get_vertices();
|
||||
auto &sv = Side_to_verts[side];
|
||||
auto &verts = sp->verts;
|
||||
auto &verts = sp.verts;
|
||||
auto &vcvertptr = Vertices.vcptr;
|
||||
const auto v1 = vm_vec_sub(vcvertptr(verts[sv[vra]]), vcvertptr(verts[sv[vla]]));
|
||||
const auto v2 = vm_vec_sub(vcvertptr(verts[sv[vrb]]), vcvertptr(verts[sv[vlb]]));
|
||||
|
@ -199,7 +198,7 @@ static void extract_vector_from_segment_side(const vmsegptr_t sp, const unsigned
|
|||
// Extract the right vector from segment *sp, return in *vp.
|
||||
// The forward vector is defined to be the vector from the the center of the left face of the segment
|
||||
// to the center of the right face of the segment.
|
||||
void med_extract_right_vector_from_segment_side(const vmsegptr_t sp, int sidenum, vms_vector &vp)
|
||||
void med_extract_right_vector_from_segment_side(const shared_segment &sp, int sidenum, vms_vector &vp)
|
||||
{
|
||||
extract_vector_from_segment_side(sp, sidenum, vp, 3, 2, 0, 1);
|
||||
}
|
||||
|
@ -208,7 +207,7 @@ void med_extract_right_vector_from_segment_side(const vmsegptr_t sp, int sidenum
|
|||
// Extract the up vector from segment *sp, return in *vp.
|
||||
// The forward vector is defined to be the vector from the the center of the bottom face of the segment
|
||||
// to the center of the top face of the segment.
|
||||
void med_extract_up_vector_from_segment_side(const vmsegptr_t sp, int sidenum, vms_vector &vp)
|
||||
void med_extract_up_vector_from_segment_side(const shared_segment &sp, int sidenum, vms_vector &vp)
|
||||
{
|
||||
extract_vector_from_segment_side(sp, sidenum, vp, 1, 2, 0, 3);
|
||||
}
|
||||
|
|
|
@ -618,10 +618,9 @@ namespace dsx {
|
|||
// Copy texture map ids for each face in sseg to dseg.
|
||||
static void copy_tmap_ids(unique_segment &dseg, const unique_segment &sseg)
|
||||
{
|
||||
range_for (const auto &&z, zip(sseg.sides, dseg.sides))
|
||||
for (auto &&[ss, ds] : zip(sseg.sides, dseg.sides))
|
||||
{
|
||||
auto &ds = std::get<1>(z);
|
||||
ds.tmap_num = std::get<0>(z).tmap_num;
|
||||
ds.tmap_num = ss.tmap_num;
|
||||
ds.tmap_num2 = 0;
|
||||
}
|
||||
}
|
||||
|
@ -634,7 +633,7 @@ static void copy_tmap_ids(unique_segment &dseg, const unique_segment &sseg)
|
|||
// 2 = No room in Vertices[].
|
||||
// 3 = newside != WFRONT -- for now, the new segment must be attached at its (own) front side
|
||||
// 4 = already a face attached on destseg:destside
|
||||
static int med_attach_segment_rotated(const vmsegptridx_t destseg, const vmsegptr_t newseg, int destside, int newside,const vms_matrix &attmat)
|
||||
static int med_attach_segment_rotated(const vmsegptridx_t destseg, const csmusegment newseg, const unsigned destside, const unsigned newside, const vms_matrix &attmat)
|
||||
{
|
||||
auto &LevelSharedVertexState = LevelSharedSegmentState.get_vertex_state();
|
||||
auto &Vertices = LevelSharedVertexState.get_vertices();
|
||||
|
@ -710,7 +709,7 @@ static int med_attach_segment_rotated(const vmsegptridx_t destseg, const vmsegpt
|
|||
// Now rotate the free vertices in the segment
|
||||
std::array<vertex, 4> tvs;
|
||||
range_for (const unsigned v, xrange(4u))
|
||||
vm_vec_rotate(tvs[v], vcvertptr(newseg->verts[v + 4]), rotmat2);
|
||||
vm_vec_rotate(tvs[v], vcvertptr(newseg.s.verts[v + 4]), rotmat2);
|
||||
|
||||
// Now translate the new segment so that the center point of the attaching faces are the same.
|
||||
const auto &&vc1 = compute_center_point_on_side(vcvertptr, destseg, destside);
|
||||
|
@ -750,7 +749,7 @@ static int med_attach_segment_rotated(const vmsegptridx_t destseg, const vmsegpt
|
|||
// 2 = No room in Vertices[].
|
||||
// 3 = newside != WFRONT -- for now, the new segment must be attached at its (own) front side
|
||||
// 4 = already a face attached on side newside
|
||||
int med_attach_segment(const vmsegptridx_t destseg, const vmsegptr_t newseg, int destside, int newside)
|
||||
int med_attach_segment(const vmsegptridx_t destseg, const csmusegment newseg, const unsigned destside, const unsigned newside)
|
||||
{
|
||||
int rval;
|
||||
const auto ocursegp = Cursegp;
|
||||
|
@ -1414,7 +1413,7 @@ void init_all_vertices(void)
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Create coordinate axes in orientation of specified segment, stores vertices at *vp.
|
||||
void create_coordinate_axes_from_segment(const vmsegptr_t sp, std::array<unsigned, 16> &vertnums)
|
||||
void create_coordinate_axes_from_segment(const shared_segment &sp, std::array<unsigned, 16> &vertnums)
|
||||
{
|
||||
auto &LevelSharedVertexState = LevelSharedSegmentState.get_vertex_state();
|
||||
auto &Vertices = LevelSharedVertexState.get_vertices();
|
||||
|
|
|
@ -155,12 +155,12 @@ static void set_average_light_at_vertex(int vnum)
|
|||
Update_flags |= UF_WORLD_CHANGED;
|
||||
}
|
||||
|
||||
static void set_average_light_on_side(const vmsegptr_t segp, int sidenum)
|
||||
static void set_average_light_on_side(const shared_segment &segp, const unsigned sidenum)
|
||||
{
|
||||
if (!IS_CHILD(segp->children[sidenum]))
|
||||
if (!IS_CHILD(segp.children[sidenum]))
|
||||
range_for (const auto v, Side_to_verts[sidenum])
|
||||
{
|
||||
set_average_light_at_vertex(segp->verts[v]);
|
||||
set_average_light_at_vertex(segp.verts[v]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -246,17 +246,17 @@ void trigger_matcen(const vmsegptridx_t segp)
|
|||
//------------------------------------------------------------
|
||||
// Takes away a segment's fuel center properties.
|
||||
// Deletes the segment point entry in the FuelCenter list.
|
||||
void fuelcen_delete(const vmsegptr_t segp)
|
||||
void fuelcen_delete(shared_segment &segp)
|
||||
{
|
||||
auto &RobotCenters = LevelSharedRobotcenterState.RobotCenters;
|
||||
auto &Station = LevelUniqueFuelcenterState.Station;
|
||||
auto Num_fuelcenters = LevelUniqueFuelcenterState.Num_fuelcenters;
|
||||
Restart: ;
|
||||
segp->special = 0;
|
||||
segp.special = 0;
|
||||
|
||||
for (uint_fast32_t i = 0; i < Num_fuelcenters; i++ ) {
|
||||
FuelCenter &fi = Station[i];
|
||||
if (vmsegptr(fi.segnum) == segp)
|
||||
if (vmsegptr(fi.segnum) == &segp)
|
||||
{
|
||||
|
||||
auto &Num_robot_centers = LevelSharedRobotcenterState.Num_robot_centers;
|
||||
|
@ -267,14 +267,17 @@ Restart: ;
|
|||
con_printf(CON_URGENT, "%s:%u: error: Num_robot_centers=0 while deleting robot maker", __FILE__, __LINE__);
|
||||
return;
|
||||
}
|
||||
const auto &&range = partial_range(RobotCenters, static_cast<unsigned>(segp->matcen_num), Num_robot_centers--);
|
||||
const auto &&range = partial_range(RobotCenters, static_cast<unsigned>(segp.matcen_num), Num_robot_centers--);
|
||||
|
||||
std::move(std::next(range.begin()), range.end(), range.begin());
|
||||
range_for (auto &fj, partial_const_range(Station, Num_fuelcenters))
|
||||
{
|
||||
if ( fj.Type == SEGMENT_IS_ROBOTMAKER )
|
||||
if ( Segments[fj.segnum].matcen_num > segp->matcen_num )
|
||||
Segments[fj.segnum].matcen_num--;
|
||||
{
|
||||
shared_segment &sfj = vmsegptr(fj.segnum);
|
||||
if (sfj.matcen_num > segp.matcen_num)
|
||||
--sfj.matcen_num;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue