From fdd2356eac54c82dce987aa742618cb6e1a01ce5 Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 12 Jul 2015 01:04:18 +0000 Subject: [PATCH] Use segptridx for Cursegp, Markedsegp --- common/include/editor/esegment.h | 4 ++-- similar/editor/centers.cpp | 8 ++++---- similar/editor/eglobal.cpp | 4 ++-- similar/editor/eobject.cpp | 4 ++-- similar/editor/eswitch.cpp | 9 +++++---- similar/editor/group.cpp | 24 ++++++++++++------------ similar/editor/info.cpp | 13 +++++++------ similar/editor/kcurve.cpp | 3 ++- similar/editor/ktmap.cpp | 2 +- similar/editor/medrobot.cpp | 8 ++++---- similar/editor/medwall.cpp | 7 ++++--- similar/editor/mine.cpp | 4 ++-- similar/editor/segment.cpp | 4 ++-- similar/main/aipath.cpp | 4 ++-- similar/main/gamemine.cpp | 11 ++--------- similar/main/gamesave.cpp | 2 +- 16 files changed, 54 insertions(+), 57 deletions(-) diff --git a/common/include/editor/esegment.h b/common/include/editor/esegment.h index c2c6e50da..4b7cb8231 100644 --- a/common/include/editor/esegment.h +++ b/common/include/editor/esegment.h @@ -12,7 +12,7 @@ #include "segment.h" #include "editor/editor.h" -extern segment *Cursegp; // Pointer to current segment in the mine, the one to which things happen. +extern segptridx_t Cursegp; // Pointer to current segment in the mine, the one to which things happen. #define New_segment (Segments[MAX_SEGMENTS-1]) @@ -21,7 +21,7 @@ extern int Curedge; // Current edge on current side, in 0..3 extern int Curvert; // Current vertex on current side, in 0..3 extern int AttachSide; // Side on segment to attach extern int Draw_all_segments; // Set to 1 means draw_world draws all segments in Segments, else draw only connected segments -extern segment *Markedsegp; // Marked segment, used in conjunction with *Cursegp to form joints. +extern segptridx_t Markedsegp; // Marked segment, used in conjunction with *Cursegp to form joints. extern int Markedside; // Marked side on Markedsegp. extern array Vertex_active; // !0 means vertex is in use, 0 means not in use. diff --git a/similar/editor/centers.cpp b/similar/editor/centers.cpp index 372d1cd9e..8bd62bae7 100644 --- a/similar/editor/centers.cpp +++ b/similar/editor/centers.cpp @@ -170,7 +170,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog * // If we change centers, we need to reset the ui code for all // of the checkboxes that control the center flags. //------------------------------------------------------------ - if (c->old_seg_num != Cursegp-Segments) + if (c->old_seg_num != Cursegp) { range_for (auto &i, c->centerFlag) ui_radio_set_value(i.get(), 0); @@ -225,7 +225,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog * // int i; // char temp_text[CENTER_STRING_LENGTH]; - ui_dprintf_at( dlg, 12, 6, "Seg: %3ld", (long)(Cursegp-Segments) ); + ui_dprintf_at(dlg, 12, 6, "Seg: %3hu", static_cast(Cursegp)); // for (i=0; iold_seg_num != Cursegp-Segments) + if (c->old_seg_num != Cursegp) Update_flags |= UF_WORLD_CHANGED; if (GADGET_PRESSED(c->quitButton.get()) || keypress==KEY_ESC) { @@ -244,7 +244,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog * return 1; } - c->old_seg_num = Cursegp-Segments; + c->old_seg_num = Cursegp; return rval; } diff --git a/similar/editor/eglobal.cpp b/similar/editor/eglobal.cpp index 555f424f6..6d377c64d 100644 --- a/similar/editor/eglobal.cpp +++ b/similar/editor/eglobal.cpp @@ -32,12 +32,12 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "editor/esegment.h" // Global pointer to current vertices, right now always Vertices. Set in create_new_mine. -segment *Cursegp = NULL; // Pointer to current segment in mine. +segptridx_t Cursegp = segment_none; // Pointer to current segment in mine. +segptridx_t Markedsegp = segment_none; // Marked segment, used in conjunction with *Cursegp to form joints. int Curside; // Side index in 0..MAX_SIDES_PER_SEGMENT of active side. int Curedge; // Current edge on current side, in 0..3 int Curvert; // Current vertex on current side, in 0..3 int AttachSide = WFRONT; // Side on segment to attach. -segment *Markedsegp = NULL; // Marked segment, used in conjunction with *Cursegp to form joints. int Markedside; // Marked side on Markedsegp. int Draw_all_segments; // Set to 1 means draw_world draws all segments in Segments, else draw only connected segments diff --git a/similar/editor/eobject.cpp b/similar/editor/eobject.cpp index 51ed4ee7b..0424b7fd6 100644 --- a/similar/editor/eobject.cpp +++ b/similar/editor/eobject.cpp @@ -170,7 +170,7 @@ int place_object(const vsegptridx_t segp, const vms_vector &object_pos, short ob { segnum_t hide_segment; if (Markedsegp) - hide_segment = Markedsegp-Segments; + hide_segment = Markedsegp; else hide_segment = segment_none; // robots which lunge forward to attack cannot have behavior type still. @@ -363,7 +363,7 @@ int ObjectSelectNextinSegment(void) Cur_object_index = objsegp->objects; } else { objsegp = Cursegp; - if (Objects[Cur_object_index].segnum != Cursegp-Segments) + if (Objects[Cur_object_index].segnum != Cursegp) Cur_object_index = objsegp->objects; } diff --git a/similar/editor/eswitch.cpp b/similar/editor/eswitch.cpp index 0c49978ec..b597247ac 100644 --- a/similar/editor/eswitch.cpp +++ b/similar/editor/eswitch.cpp @@ -170,13 +170,13 @@ static int bind_matcen_to_trigger() { auto link_num = Triggers[trigger_num].num_links; for (int i=0;ichildren[newseg_side] = child_save; // restore severed connection GroupList[ROT_GROUP].segments.emplace_back(newseg); - baseseg = Segments[newseg].children[newseg_side]; + const auto baseseg = newseg->children[newseg_side]; if (!IS_CHILD(baseseg)) { editor_status("Error -- unable to rotate segment, side opposite curside is not attached."); GroupList[current_group].segments = selected_segs_save; @@ -923,22 +923,22 @@ int rotate_segment_new(const vms_angvec &pbh) return 1; } - auto baseseg_side = find_connect_side(&Segments[newseg], &Segments[baseseg]); + const auto &&baseseg_side = find_connect_side(newseg, vcsegptr(baseseg)); - med_extract_matrix_from_segment(&Segments[newseg],&tm1); + med_extract_matrix_from_segment(newseg, &tm1); tm1 = vmd_identity_matrix; const auto tm2 = vm_angles_2_matrix(pbh); const auto orient_matrix = vm_matrix_x_matrix(tm1,tm2); Segments[baseseg].children[baseseg_side] = segment_none; - Segments[newseg].children[newseg_side] = segment_none; + newseg->children[newseg_side] = segment_none; - if (!med_move_group(1, &Segments[baseseg], baseseg_side, &Segments[newseg], newseg_side, orient_matrix, 0)) { - Cursegp = &Segments[newseg]; + if (!med_move_group(1, &Segments[baseseg], baseseg_side, newseg, newseg_side, orient_matrix, 0)) { + Cursegp = newseg; med_create_new_segment_from_cursegp(); // validate_selected_segments(); - med_propagate_tmaps_to_segments(&Segments[baseseg], &Segments[newseg], 1); - med_propagate_tmaps_to_back_side(&Segments[newseg], Curside, 1); + med_propagate_tmaps_to_segments(&Segments[baseseg], newseg, 1); + med_propagate_tmaps_to_back_side(newseg, Curside, 1); } GroupList[current_group].segments = selected_segs_save; @@ -1454,7 +1454,7 @@ int UngroupSegment( void ) if (Cursegp->group == current_group) { Cursegp->group = -1; - delete_segment_from_group( Cursegp-Segments, current_group ); + delete_segment_from_group(Cursegp, current_group); Update_flags |= UF_WORLD_CHANGED; mine_changed = 1; @@ -1470,7 +1470,7 @@ int GroupSegment( void ) if (Cursegp->group == -1) { Cursegp->group = current_group; - add_segment_to_group( Cursegp-Segments, current_group ); + add_segment_to_group(Cursegp, current_group); Update_flags |= UF_WORLD_CHANGED; mine_changed = 1; diff --git a/similar/editor/info.cpp b/similar/editor/info.cpp index 7077dce03..7861a6b08 100644 --- a/similar/editor/info.cpp +++ b/similar/editor/info.cpp @@ -246,22 +246,23 @@ static void info_display_default(int show_all) //--------------- Current_segment_number ------------- //--------------- Current_side_number ------------- - if (( old_Cursegp_num != Cursegp-Segments ) || ( old_Curside != Curside )) { - gr_uprintf( 0, 48, "Cursegp/side: %3ld/%1d", (long)(Cursegp-Segments), Curside); + if (old_Cursegp_num != Cursegp || old_Curside != Curside) + { + old_Cursegp_num = Cursegp; + gr_uprintf( 0, 48, "Cursegp/side: %3hu/%1d", static_cast(Cursegp), Curside); gr_uprintf( 0, 128, " tmap1,2,o: %3d/%3dx%1d", Cursegp->sides[Curside].tmap_num, Cursegp->sides[Curside].tmap_num2 & 0x3FFF, (Cursegp->sides[Curside].tmap_num2 >> 14) & 3); - old_Cursegp_num = Cursegp-Segments; old_Curside = Curside; } //--------------- Current_vertex_numbers ------------- - if ( old_Cursegp_num_for_verts != Cursegp-Segments ) { - + if (old_Cursegp_num_for_verts != Cursegp) + { + old_Cursegp_num_for_verts = Cursegp; gr_uprintf( 0, 64, "{%3d,%3d,%3d,%3d,", Cursegp->verts[0],Cursegp->verts[1], Cursegp->verts[2],Cursegp->verts[3] ); gr_uprintf( 0, 80," %3d,%3d,%3d,%3d}", Cursegp->verts[4],Cursegp->verts[5], Cursegp->verts[6],Cursegp->verts[7] ); - old_Cursegp_num_for_verts = Cursegp-Segments; } //--------------- Num walls/links/triggers ------------------------- diff --git a/similar/editor/kcurve.cpp b/similar/editor/kcurve.cpp index add70b7ab..cfbbe69dc 100644 --- a/similar/editor/kcurve.cpp +++ b/similar/editor/kcurve.cpp @@ -42,7 +42,8 @@ int InitCurve() int GenerateCurve() { - if ( (Markedsegp != 0) && !IS_CHILD(Markedsegp->children[Markedside])) { + if (Markedsegp != segment_none && !IS_CHILD(Markedsegp->children[Markedside])) + { r1scale = r4scale = F1_0*20; autosave_mine( mine_filename ); diagnostic_message("Curve Generated."); diff --git a/similar/editor/ktmap.cpp b/similar/editor/ktmap.cpp index 34a5bf040..0586e339a 100644 --- a/similar/editor/ktmap.cpp +++ b/similar/editor/ktmap.cpp @@ -167,7 +167,7 @@ int PropagateTexturesSelected(void) undo_status[Autosave_count] = "Propogate Textures Selected UNDONE."; visited_segment_bitarray_t visited; - visited[Cursegp-Segments] = true; + visited[Cursegp] = true; pts_aux(Cursegp, visited); diff --git a/similar/editor/medrobot.cpp b/similar/editor/medrobot.cpp index 8fea7871b..dcfaaa95b 100644 --- a/similar/editor/medrobot.cpp +++ b/similar/editor/medrobot.cpp @@ -85,12 +85,12 @@ static void call_init_ai_object(const vobjptr_t objp, ai_behavior behavior) segnum_t hide_segment; if (behavior == ai_behavior::AIB_STATION) - hide_segment = Cursegp-Segments; + hide_segment = Cursegp; else { - if (Markedsegp != NULL) - hide_segment = Markedsegp-Segments; + if (Markedsegp != segment_none) + hide_segment = Markedsegp; else - hide_segment = Cursegp-Segments; + hide_segment = Cursegp; } init_ai_object(objp, behavior, hide_segment); diff --git a/similar/editor/medwall.cpp b/similar/editor/medwall.cpp index e2dd12d39..a87e10de2 100644 --- a/similar/editor/medwall.cpp +++ b/similar/editor/medwall.cpp @@ -802,7 +802,7 @@ int wall_add_to_markedside(sbyte type) wall_num = Markedsegp->sides[Markedside].wall_num; cwall_num = csegp->sides[Connectside].wall_num; - Walls[wall_num].segnum = Markedsegp-Segments; + Walls[wall_num].segnum = Markedsegp; Walls[cwall_num].segnum = csegp-Segments; Walls[wall_num].sidenum = Markedside; @@ -904,13 +904,14 @@ int bind_wall_to_control_center() { link_num = ControlCenterTriggers.num_links; for (int i=0;ipos,Cursegp); - obj_relink(objnum,Cursegp-Segments); + obj_relink(objnum, Cursegp); } else obj_delete(objnum); } diff --git a/similar/main/aipath.cpp b/similar/main/aipath.cpp index 0c6a099e6..c4a81a2f3 100644 --- a/similar/main/aipath.cpp +++ b/similar/main/aipath.cpp @@ -1479,7 +1479,7 @@ static void test_create_path_many(void) for (i=0; i point_segs; short num_points; - create_path_points(object_first, Cursegp-Segments, Markedsegp-Segments, point_segs.begin(), &num_points, -1, 0, 0, segment_none); + create_path_points(object_first, Cursegp, Markedsegp, point_segs.begin(), &num_points, -1, 0, 0, segment_none); } diff --git a/similar/main/gamemine.cpp b/similar/main/gamemine.cpp index 2beae563c..7e896e158 100644 --- a/similar/main/gamemine.cpp +++ b/similar/main/gamemine.cpp @@ -763,15 +763,8 @@ int load_mine_data(PHYSFS_file *LoadFile) for (int i=0;i<10;i++) Groupside[i] = mine_editor.Groupside[i]; - if ( mine_editor.current_seg != -1 ) - Cursegp = &Segments[mine_editor.current_seg]; - else - Cursegp = NULL; - - if (mine_editor.Markedsegp != -1 ) - Markedsegp = &Segments[mine_editor.Markedsegp]; - else - Markedsegp = NULL; + Cursegp = mine_editor.current_seg != -1 ? segptridx(mine_editor.current_seg) : segment_first; + Markedsegp = mine_editor.Markedsegp != -1 ? segptridx(mine_editor.Markedsegp) : segment_none; num_groups = 0; current_group = -1; diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index ec774cd17..56f8ccee2 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -1445,7 +1445,7 @@ int create_new_mine(void) Highest_segment_index = 0; Cursegp = &Segments[0]; // Say current segment is the only segment. Curside = WBACK; // The active side is the back side - Markedsegp = 0; // Say there is no marked segment. + Markedsegp = segment_none; // Say there is no marked segment. Markedside = WBACK; // Shouldn't matter since Markedsegp == 0, but just in case... for (int s=0;s