Use segptridx for Cursegp, Markedsegp
This commit is contained in:
parent
aa890e5d29
commit
fdd2356eac
|
@ -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.
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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++;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 -------------------------
|
||||
|
|
|
@ -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.");
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue