Skip to content

Commit 6a1753a

Browse files
committed
Make building more flexible
1 parent f5d9d48 commit 6a1753a

File tree

3 files changed

+63
-65
lines changed

3 files changed

+63
-65
lines changed

csqc/main.qc

Lines changed: 43 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -219,18 +219,38 @@ void PMD_DrawGraphs(float width);
219219

220220
DEFCVAR_FLOAT(fov, 90);
221221

222-
void adjustEntityAboveGround(entity ent) {
223-
vector startPos, endPos;
222+
void SentryPreviewStart() {
223+
sentry_preview_offset = 0;
224+
sentry_preview.angles_y = input_angles_y;
225+
sentry_preview.drawmask = MASK_ENGINE;
226+
227+
local vector sphere_colormod = '1 1 1';
228+
switch (team_no) {
229+
case 1:
230+
sphere_colormod = '0 0.4 1';
231+
break;
232+
case 2:
233+
sphere_colormod = '1 0 0';
234+
break;
235+
case 3:
236+
sphere_colormod = '1 1 0';
237+
break;
238+
case 4:
239+
sphere_colormod = '0 1 0';
240+
break;
241+
}
224242

225-
// Define start and end points for the trace downwards
226-
startPos = ent.origin + '0 0 100'; // Start 100 units above the entity's origin
227-
endPos = ent.origin - '0 0 1000'; // Trace downwards a sufficient distance
243+
sentry_preview_range_sphere.colormod = sphere_colormod * 4;
244+
sentry_preview_range_sphere.drawmask = MASK_ENGINE;
228245

229-
// Perform the tracebox from startPos to endPos
230-
tracebox(startPos, ent.mins, ent.maxs, endPos, MOVE_NORMAL, ent);
246+
previewing_sentry = TRUE;
247+
prevent_firing = TRUE;
248+
}
231249

232-
// Move the entity up to be 1 unit above the ground
233-
ent.origin[2] = trace_endpos[2] + 1; // 1 unit above the ground
250+
void SentryPreviewStop() {
251+
previewing_sentry = FALSE;
252+
sentry_preview.drawmask = 0;
253+
sentry_preview_range_sphere.drawmask = 0;
234254
}
235255

236256
noref void(float width, float height, float menushown) CSQC_UpdateView = {
@@ -256,6 +276,16 @@ noref void(float width, float height, float menushown) CSQC_UpdateView = {
256276
PM_UpdateView();
257277

258278
if (previewing_sentry) {
279+
if (game_state.is_alive) {
280+
} else {
281+
}
282+
}
283+
284+
if (previewing_sentry) {
285+
if (!game_state.is_alive) {
286+
SentryPreviewStop();
287+
} else {
288+
}
259289
makevectors(view_angles);
260290
local vector v_forward_sentry;
261291
v_forward_sentry.z = (normalize(v_forward) * 64).z;
@@ -265,7 +295,8 @@ noref void(float width, float height, float menushown) CSQC_UpdateView = {
265295
v_forward_sentry.y = xy_pos.y;
266296

267297
sentry_preview.origin = PM_Org() + v_forward_sentry;
268-
/* adjustEntityAboveGround(sentry_preview); */
298+
sentry_fits = PlaceSentry(sentry_preview, PM_Org());
299+
sentry_preview.colormod = sentry_fits ? '1 1 1' : '0.5 0.2 0.2';
269300
sentry_preview_range_sphere.origin = sentry_preview.origin;
270301
sentry_preview.angles_y = anglemod(view_angles_y + sentry_preview_offset);
271302
} else {
@@ -320,7 +351,7 @@ noref float(string cmd) CSQC_ConsoleCommand = {
320351
} else {
321352
localcmd("cmd sentry rotate 15\n");
322353
}
323-
break;
354+
break;
324355
}
325356
break;
326357
case "specialdown":
@@ -331,7 +362,7 @@ noref float(string cmd) CSQC_ConsoleCommand = {
331362
} else {
332363
localcmd("cmd sentry rotate -15\n");
333364
}
334-
break;
365+
break;
335366
}
336367
break;
337368
case "+slot":
@@ -718,40 +749,6 @@ void FO_ApplyCussInput() {
718749

719750
void PM_InputFrame();
720751

721-
void SentryPreviewStart() {
722-
sentry_preview_offset = 0;
723-
sentry_preview.angles_y = input_angles_y;
724-
sentry_preview.drawmask = MASK_ENGINE;
725-
726-
local vector sphere_colormod = '1 1 1';
727-
switch (team_no) {
728-
case 1:
729-
sphere_colormod = '0 0.4 1';
730-
break;
731-
case 2:
732-
sphere_colormod = '1 0 0';
733-
break;
734-
case 3:
735-
sphere_colormod = '1 1 0';
736-
break;
737-
case 4:
738-
sphere_colormod = '0 1 0';
739-
break;
740-
}
741-
742-
sentry_preview_range_sphere.colormod = sphere_colormod * 4;
743-
sentry_preview_range_sphere.drawmask = MASK_ENGINE;
744-
745-
previewing_sentry = TRUE;
746-
prevent_firing = TRUE;
747-
}
748-
749-
void SentryPreviewStop() {
750-
previewing_sentry = FALSE;
751-
sentry_preview.drawmask = 0;
752-
sentry_preview_range_sphere.drawmask = 0;
753-
}
754-
755752
noref void CSQC_Input_Frame() {
756753
local float changed_buttons = input_buttons ^ oldbuttons;
757754
oldbuttons = input_buttons;
@@ -876,15 +873,6 @@ void _Sync_ServerCommandFrame() {
876873

877874
CsGrenTimer::UpdateSoundStack();
878875
UpdateTeamColorCrosshair();
879-
880-
if (previewing_sentry) {
881-
if (game_state.is_alive) {
882-
sentry_fits = CheckArea(sentry_preview, edict_num(player_localentnum));
883-
sentry_preview.colormod = sentry_fits ? '1 1 1' : '0.5 0.2 0.2';
884-
} else {
885-
SentryPreviewStop();
886-
}
887-
}
888876
}
889877

890878

share/engineer.qc

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
1-
float (entity obj, entity builder) CheckArea = {
2-
vector start, end;
3-
start = obj.origin;
4-
end = start;
5-
tracebox(start, obj.mins, obj.maxs, end, MOVE_NORMAL, builder);
1+
float PlaceSentry(entity sentry, vector builder_org) {
2+
tracebox(sentry.origin, sentry.mins, sentry.maxs, sentry.origin, MOVE_NORMAL, sentry);
63

7-
if (trace_inopen) {
4+
if (trace_inopen)
85
return (1);
9-
} else {
10-
return (0);
6+
7+
local vector start = sentry.origin;
8+
start_z = builder_org_z + 64;
9+
10+
tracebox(start, sentry.mins, sentry.maxs, sentry.origin, MOVE_NORMAL, sentry);
11+
12+
if (trace_fraction < 1.0) {
13+
tracebox(trace_endpos, sentry.mins, sentry.maxs, trace_endpos, MOVE_NORMAL, sentry);
14+
15+
if (trace_inopen) {
16+
sentry.origin = trace_endpos;
17+
return (1);
18+
}
1119
}
12-
};
20+
21+
return (0);
22+
}

ssqc/engineer.qc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ void (float objtobuild, float offset) TeamFortress_Build = {
612612
self.sentry_ticks = 0;
613613
}
614614

615-
if (!CheckArea(newmis, self)) {
615+
if (!PlaceSentry(newmis, self.origin)) {
616616
sprint(self, PRINT_HIGH, "You can't build here\n");
617617
dremove(newmis);
618618
return;

0 commit comments

Comments
 (0)