2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 * Functions for building parts of mines.
27 #include "editor/editor.h"
32 // ---------- Create a bridge segment between current segment/side and marked segment/side ----------
35 if (!med_form_bridge_segment(Cursegp,Curside,Markedsegp,Markedside)) {
36 Update_flags |= UF_WORLD_CHANGED;
38 autosave_mine(mine_filename);
39 diagnostic_message("Bridge segment formed.");
40 strcpy(undo_status[Autosave_count], "Bridge segment UNDONE.");
41 warn_if_concave_segments();
48 // ---------- Form a joint between current segment:side and marked segment:side, modifying marked segment ----------
52 diagnostic_message("Marked segment not set -- unable to form joint.");
54 if (!med_form_joint(Cursegp,Curside,Markedsegp,Markedside)) {
55 Update_flags |= UF_WORLD_CHANGED;
57 autosave_mine(mine_filename);
58 diagnostic_message("Joint formed.");
59 strcpy(undo_status[Autosave_count], "Joint undone.");
60 warn_if_concave_segments();
68 // ---------- Create a bridge segment between current segment:side adjacent segment:side ----------
69 int CreateAdjacentJoint()
74 if (med_find_adjacent_segment_side(Cursegp, Curside, &adj_sp, &adj_side)) {
75 if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) {
76 med_form_joint(Cursegp,Curside,adj_sp,adj_side);
77 Update_flags |= UF_WORLD_CHANGED;
79 autosave_mine(mine_filename);
80 diagnostic_message("Joint segment formed.");
81 strcpy(undo_status[Autosave_count], "Joint segment undone.");
82 warn_if_concave_segments();
84 editor_status("Attempted to form joint through connected side -- joint segment not formed (you bozo).");
86 editor_status("Could not find adjacent segment -- joint segment not formed.");
91 // ---------- Create a bridge segment between current segment:side adjacent segment:side ----------
92 int CreateSloppyAdjacentJoint()
97 save_level("SLOPPY.LVL");
99 if (med_find_closest_threshold_segment_side(Cursegp, Curside, &adj_sp, &adj_side, 20*F1_0)) {
100 if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) {
101 if (!med_form_joint(Cursegp,Curside,adj_sp,adj_side))
103 Update_flags |= UF_WORLD_CHANGED;
105 autosave_mine(mine_filename);
106 diagnostic_message("Sloppy Joint segment formed.");
107 strcpy(undo_status[Autosave_count], "Sloppy Joint segment undone.");
108 warn_if_concave_segments();
110 else editor_status("Couldn't form sloppy joint.\n");
112 editor_status("Attempted to form sloppy joint through connected side -- joint segment not formed (you bozo).");
114 editor_status("Could not find close threshold segment -- joint segment not formed.");
120 // -------------- Create all sloppy joints within CurrentGroup ------------------
121 int CreateSloppyAdjacentJointsGroup()
125 int num_segs = GroupList[current_group].num_segments;
126 short *segs = GroupList[current_group].segments;
128 int done_been_a_change = 0;
131 for (segind=0; segind<num_segs; segind++) {
132 segp = &Segments[segs[segind]];
134 for (sidenum=0; sidenum < MAX_SIDES_PER_SEGMENT; sidenum++)
135 if (!IS_CHILD(segp->children[sidenum]))
136 if (med_find_closest_threshold_segment_side(segp, sidenum, &adj_sp, &adj_side, 5*F1_0)) {
137 if (adj_sp->group == segp->group) {
138 if (segp->children[sidenum] != SEGMENT_NUMBER(adj_sp))
139 if (!med_form_joint(segp, sidenum, adj_sp,adj_side))
140 done_been_a_change = 1;
145 if (done_been_a_change) {
146 Update_flags |= UF_WORLD_CHANGED;
148 autosave_mine(mine_filename);
149 diagnostic_message("Sloppy Joint segment formed.");
150 strcpy(undo_status[Autosave_count], "Sloppy Joint segment undone.");
151 warn_if_concave_segments();
158 // ---------- Create a bridge segment between current segment and all adjacent segment:side ----------
159 int CreateAdjacentJointsSegment()
164 med_combine_duplicate_vertices(Vertex_active);
166 for (s=0; s<MAX_SIDES_PER_SEGMENT; s++) {
167 if (med_find_adjacent_segment_side(Cursegp, s, &adj_sp, &adj_side))
168 if (Cursegp->children[s] != SEGMENT_NUMBER(adj_sp))
170 med_form_joint(Cursegp,s,adj_sp,adj_side);
171 Update_flags |= UF_WORLD_CHANGED;
173 autosave_mine(mine_filename);
174 diagnostic_message("Adjacent Joint segment formed.");
175 strcpy(undo_status[Autosave_count], "Adjacent Joint segment UNDONE.");
176 warn_if_concave_segments();
183 // ---------- Create a bridge segment between all segment:side and all adjacent segment:side ----------
184 int CreateAdjacentJointsAll()
189 med_combine_duplicate_vertices(Vertex_active);
191 for (seg=0; seg<=Highest_segment_index; seg++)
192 for (s=0; s<MAX_SIDES_PER_SEGMENT; s++)
193 if (med_find_adjacent_segment_side(&Segments[seg], s, &adj_sp, &adj_side))
194 if (Segments[seg].children[s] != SEGMENT_NUMBER(adj_sp))
195 med_form_joint(&Segments[seg],s,adj_sp,adj_side);
197 Update_flags |= UF_WORLD_CHANGED;
199 autosave_mine(mine_filename);
200 diagnostic_message("All Adjacent Joint segments formed.");
201 strcpy(undo_status[Autosave_count], "All Adjacent Joint segments UNDONE.");
202 warn_if_concave_segments();