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.
31 // ---------- Create a bridge segment between current segment/side and marked segment/side ----------
34 if (!med_form_bridge_segment(Cursegp,Curside,Markedsegp,Markedside)) {
35 Update_flags |= UF_WORLD_CHANGED;
37 autosave_mine(mine_filename);
38 diagnostic_message("Bridge segment formed.");
39 strcpy(undo_status[Autosave_count], "Bridge segment UNDONE.");
40 warn_if_concave_segments();
47 // ---------- Form a joint between current segment:side and marked segment:side, modifying marked segment ----------
51 diagnostic_message("Marked segment not set -- unable to form joint.");
53 if (!med_form_joint(Cursegp,Curside,Markedsegp,Markedside)) {
54 Update_flags |= UF_WORLD_CHANGED;
56 autosave_mine(mine_filename);
57 diagnostic_message("Joint formed.");
58 strcpy(undo_status[Autosave_count], "Joint undone.");
59 warn_if_concave_segments();
67 // ---------- Create a bridge segment between current segment:side adjacent segment:side ----------
68 int CreateAdjacentJoint()
73 if (med_find_adjacent_segment_side(Cursegp, Curside, &adj_sp, &adj_side)) {
74 if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) {
75 med_form_joint(Cursegp,Curside,adj_sp,adj_side);
76 Update_flags |= UF_WORLD_CHANGED;
78 autosave_mine(mine_filename);
79 diagnostic_message("Joint segment formed.");
80 strcpy(undo_status[Autosave_count], "Joint segment undone.");
81 warn_if_concave_segments();
83 editor_status("Attempted to form joint through connected side -- joint segment not formed (you bozo).");
85 editor_status("Could not find adjacent segment -- joint segment not formed.");
90 // ---------- Create a bridge segment between current segment:side adjacent segment:side ----------
91 int CreateSloppyAdjacentJoint()
96 save_level("SLOPPY.LVL");
98 if (med_find_closest_threshold_segment_side(Cursegp, Curside, &adj_sp, &adj_side, 20*F1_0)) {
99 if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) {
100 if (!med_form_joint(Cursegp,Curside,adj_sp,adj_side))
102 Update_flags |= UF_WORLD_CHANGED;
104 autosave_mine(mine_filename);
105 diagnostic_message("Sloppy Joint segment formed.");
106 strcpy(undo_status[Autosave_count], "Sloppy Joint segment undone.");
107 warn_if_concave_segments();
109 else editor_status("Couldn't form sloppy joint.\n");
111 editor_status("Attempted to form sloppy joint through connected side -- joint segment not formed (you bozo).");
113 editor_status("Could not find close threshold segment -- joint segment not formed.");
119 // -------------- Create all sloppy joints within CurrentGroup ------------------
120 int CreateSloppyAdjacentJointsGroup()
124 int num_segs = GroupList[current_group].num_segments;
125 short *segs = GroupList[current_group].segments;
127 int done_been_a_change = 0;
130 for (segind=0; segind<num_segs; segind++) {
131 segp = &Segments[segs[segind]];
133 for (sidenum=0; sidenum < MAX_SIDES_PER_SEGMENT; sidenum++)
134 if (!IS_CHILD(segp->children[sidenum]))
135 if (med_find_closest_threshold_segment_side(segp, sidenum, &adj_sp, &adj_side, 5*F1_0)) {
136 if (adj_sp->group == segp->group) {
137 if (segp->children[sidenum] != SEGMENT_NUMBER(adj_sp))
138 if (!med_form_joint(segp, sidenum, adj_sp,adj_side))
139 done_been_a_change = 1;
144 if (done_been_a_change) {
145 Update_flags |= UF_WORLD_CHANGED;
147 autosave_mine(mine_filename);
148 diagnostic_message("Sloppy Joint segment formed.");
149 strcpy(undo_status[Autosave_count], "Sloppy Joint segment undone.");
150 warn_if_concave_segments();
157 // ---------- Create a bridge segment between current segment and all adjacent segment:side ----------
158 int CreateAdjacentJointsSegment()
163 med_combine_duplicate_vertices(Vertex_active);
165 for (s=0; s<MAX_SIDES_PER_SEGMENT; s++) {
166 if (med_find_adjacent_segment_side(Cursegp, s, &adj_sp, &adj_side))
167 if (Cursegp->children[s] != SEGMENT_NUMBER(adj_sp))
169 med_form_joint(Cursegp,s,adj_sp,adj_side);
170 Update_flags |= UF_WORLD_CHANGED;
172 autosave_mine(mine_filename);
173 diagnostic_message("Adjacent Joint segment formed.");
174 strcpy(undo_status[Autosave_count], "Adjacent Joint segment UNDONE.");
175 warn_if_concave_segments();
182 // ---------- Create a bridge segment between all segment:side and all adjacent segment:side ----------
183 int CreateAdjacentJointsAll()
188 med_combine_duplicate_vertices(Vertex_active);
190 for (seg=0; seg<=Highest_segment_index; seg++)
191 for (s=0; s<MAX_SIDES_PER_SEGMENT; s++)
192 if (med_find_adjacent_segment_side(&Segments[seg], s, &adj_sp, &adj_side))
193 if (Segments[seg].children[s] != SEGMENT_NUMBER(adj_sp))
194 med_form_joint(&Segments[seg],s,adj_sp,adj_side);
196 Update_flags |= UF_WORLD_CHANGED;
198 autosave_mine(mine_filename);
199 diagnostic_message("All Adjacent Joint segments formed.");
200 strcpy(undo_status[Autosave_count], "All Adjacent Joint segments UNDONE.");
201 warn_if_concave_segments();