Use segptridx for Cursegp, Markedsegp

This commit is contained in:
Kp 2015-07-12 01:04:18 +00:00
parent aa890e5d29
commit fdd2356eac
16 changed files with 54 additions and 57 deletions

View file

@ -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<uint8_t, MAX_VERTICES> Vertex_active; // !0 means vertex is in use, 0 means not in use.

View file

@ -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<segnum_t>(Cursegp));
// for (i=0; i<CENTER_STRING_LENGTH; i++)
// temp_text[i] = ' ';
@ -236,7 +236,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *
// ui_dprintf_at( dlg, 12, 23, " Type: %s", temp_text );
}
if (c->old_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;
}

View file

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

View file

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

View file

@ -170,13 +170,13 @@ static int bind_matcen_to_trigger() {
auto link_num = Triggers[trigger_num].num_links;
for (int i=0;i<link_num;i++)
if (Cursegp-Segments == Triggers[trigger_num].seg[i]) {
if (Cursegp == Triggers[trigger_num].seg[i]) {
editor_status("Matcen already bound to Markedside.");
return 0;
}
// Error checking completed, actual binding begins
Triggers[trigger_num].seg[link_num] = Cursegp - Segments;
Triggers[trigger_num].seg[link_num] = Cursegp;
Triggers[trigger_num].num_links++;
editor_status("Matcen linked to trigger");
@ -215,13 +215,14 @@ int bind_wall_to_trigger() {
auto link_num = Triggers[trigger_num].num_links;
for (int i=0;i<link_num;i++)
if ((Cursegp-Segments == Triggers[trigger_num].seg[i]) && (Curside == Triggers[trigger_num].side[i])) {
if (Cursegp == Triggers[trigger_num].seg[i] && Curside == Triggers[trigger_num].side[i])
{
editor_status("Curside already bound to Markedside.");
return 0;
}
// Error checking completed, actual binding begins
Triggers[trigger_num].seg[link_num] = Cursegp - Segments;
Triggers[trigger_num].seg[link_num] = Cursegp;
Triggers[trigger_num].side[link_num] = Curside;
Triggers[trigger_num].num_links++;

View file

@ -885,7 +885,7 @@ void add_segment_to_group(segnum_t segment_num, int group_num)
// -----------------------------------------------------------------------------
int rotate_segment_new(const vms_angvec &pbh)
{
int newseg,baseseg,newseg_side;
int newseg_side;
vms_matrix tm1;
group::segment_array_type_t selected_segs_save;
int child_save;
@ -904,7 +904,7 @@ int rotate_segment_new(const vms_angvec &pbh)
selected_segs_save = GroupList[current_group].segments;
GroupList[ROT_GROUP].segments.clear();
newseg = Cursegp - Segments;
const auto newseg = Cursegp;
newseg_side = Side_opposite[Curside];
// Create list of segments to rotate.
@ -915,7 +915,7 @@ int rotate_segment_new(const vms_angvec &pbh)
Cursegp->children[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;

View file

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

View file

@ -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.");

View file

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

View file

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

View file

@ -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;i<link_num;i++)
if ((Cursegp-Segments == ControlCenterTriggers.seg[i]) && (Curside == ControlCenterTriggers.side[i])) {
if (Cursegp == ControlCenterTriggers.seg[i] && Curside == ControlCenterTriggers.side[i])
{
editor_status("Curside already bound to Control Center.");
return 0;
}
// Error checking completed, actual binding begins
ControlCenterTriggers.seg[link_num] = Cursegp - Segments;
ControlCenterTriggers.seg[link_num] = Cursegp;
ControlCenterTriggers.side[link_num] = Curside;
ControlCenterTriggers.num_links++;

View file

@ -425,14 +425,14 @@ static int save_mine_data(PHYSFS_file * SaveFile)
PHYSFS_write( SaveFile, &mine_header, sizeof(mine_header), 1 );
//===================== SAVE EDITOR INFO ==========================
mine_editor.current_seg = Cursegp - Segments;
mine_editor.current_seg = Cursegp;
mine_editor.newsegment_offset = newsegment_offset;
mine_editor.newsegment_size = sizeof(segment);
// Next 3 vars added 10/07 by JAS
mine_editor.Curside = Curside;
if (Markedsegp)
mine_editor.Markedsegp = Markedsegp - Segments;
mine_editor.Markedsegp = Markedsegp;
else
mine_editor.Markedsegp = -1;
mine_editor.Markedside = Markedside;

View file

@ -996,7 +996,7 @@ int med_delete_segment(const vsegptridx_t sp)
// If deleted segment = marked segment, then say there is no marked segment
if (sp == Markedsegp)
Markedsegp = 0;
Markedsegp = segment_none;
// If deleted segment = a Group segment ptr, then wipe it out.
range_for (auto &s, partial_range(Groupsegp, num_groups))
@ -1023,7 +1023,7 @@ int med_delete_segment(const vsegptridx_t sp)
//if the object is the player, move to new curseg
if (objnum == ConsoleObject) {
compute_segment_center(ConsoleObject->pos,Cursegp);
obj_relink(objnum,Cursegp-Segments);
obj_relink(objnum, Cursegp);
} else
obj_delete(objnum);
}

View file

@ -1479,7 +1479,7 @@ static void test_create_path_many(void)
for (i=0; i<Test_size; i++) {
Cursegp = &Segments[(d_rand() * (Highest_segment_index + 1)) / D_RAND_MAX];
Markedsegp = &Segments[(d_rand() * (Highest_segment_index + 1)) / D_RAND_MAX];
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);
}
}
@ -1490,7 +1490,7 @@ static void test_create_path(void)
array<point_seg, 200> 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);
}

View file

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

View file

@ -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<MAX_GROUPS+1;s++) {
GroupList[s].clear();