Skip to content

Commit a0c71b2

Browse files
committed
Merge branch 'build-better' into staging
2 parents 8c0b26b + 6a1753a commit a0c71b2

File tree

3 files changed

+66
-99
lines changed

3 files changed

+66
-99
lines changed

csqc/main.qc

Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ noref void(float apiver, string enginename, float enginever) CSQC_Init = {
194194
precache_model("progs/turrpreview.mdl");
195195
sentry_preview = spawn();
196196
setmodel(sentry_preview, "progs/turrpreview.mdl");
197+
setsize(sentry_preview, '-16 -16 0', '16 16 48');
197198
sentry_preview.alpha = 0.25;
198199

199200
precache_model("progs/sphere.mdl");
@@ -223,6 +224,40 @@ void PMD_DrawGraphs(float width);
223224

224225
DEFCVAR_FLOAT(fov, 90);
225226

227+
void SentryPreviewStart() {
228+
sentry_preview_offset = 0;
229+
sentry_preview.angles_y = input_angles_y;
230+
sentry_preview.drawmask = MASK_ENGINE;
231+
232+
local vector sphere_colormod = '1 1 1';
233+
switch (team_no) {
234+
case 1:
235+
sphere_colormod = '0 0.4 1';
236+
break;
237+
case 2:
238+
sphere_colormod = '1 0 0';
239+
break;
240+
case 3:
241+
sphere_colormod = '1 1 0';
242+
break;
243+
case 4:
244+
sphere_colormod = '0 1 0';
245+
break;
246+
}
247+
248+
sentry_preview_range_sphere.colormod = sphere_colormod * 4;
249+
sentry_preview_range_sphere.drawmask = MASK_ENGINE;
250+
251+
previewing_sentry = TRUE;
252+
prevent_firing = TRUE;
253+
}
254+
255+
void SentryPreviewStop() {
256+
previewing_sentry = FALSE;
257+
sentry_preview.drawmask = 0;
258+
sentry_preview_range_sphere.drawmask = 0;
259+
}
260+
226261
noref void(float width, float height, float menushown) CSQC_UpdateView = {
227262
float fts = perf_start_sample(&frame_timing);
228263
clearscene();
@@ -246,6 +281,16 @@ noref void(float width, float height, float menushown) CSQC_UpdateView = {
246281
PM_UpdateView();
247282

248283
if (previewing_sentry) {
284+
if (game_state.is_alive) {
285+
} else {
286+
}
287+
}
288+
289+
if (previewing_sentry) {
290+
if (!game_state.is_alive) {
291+
SentryPreviewStop();
292+
} else {
293+
}
249294
makevectors(view_angles);
250295
local vector v_forward_sentry;
251296
v_forward_sentry.z = (normalize(v_forward) * 64).z;
@@ -255,6 +300,8 @@ noref void(float width, float height, float menushown) CSQC_UpdateView = {
255300
v_forward_sentry.y = xy_pos.y;
256301

257302
sentry_preview.origin = PM_Org() + v_forward_sentry;
303+
sentry_fits = PlaceSentry(sentry_preview, PM_Org());
304+
sentry_preview.colormod = sentry_fits ? '1 1 1' : '0.5 0.2 0.2';
258305
sentry_preview_range_sphere.origin = sentry_preview.origin;
259306
sentry_preview.angles_y = anglemod(view_angles_y + sentry_preview_offset);
260307
} else {
@@ -734,40 +781,6 @@ void FO_ApplyCussInput() {
734781

735782
void PM_InputFrame();
736783

737-
void SentryPreviewStart() {
738-
sentry_preview_offset = 0;
739-
sentry_preview.angles_y = input_angles_y;
740-
sentry_preview.drawmask = MASK_ENGINE;
741-
742-
local vector sphere_colormod = '1 1 1';
743-
switch (team_no) {
744-
case 1:
745-
sphere_colormod = '0 0.4 1';
746-
break;
747-
case 2:
748-
sphere_colormod = '1 0 0';
749-
break;
750-
case 3:
751-
sphere_colormod = '1 1 0';
752-
break;
753-
case 4:
754-
sphere_colormod = '0 1 0';
755-
break;
756-
}
757-
758-
sentry_preview_range_sphere.colormod = sphere_colormod * 4;
759-
sentry_preview_range_sphere.drawmask = MASK_ENGINE;
760-
761-
previewing_sentry = TRUE;
762-
prevent_firing = TRUE;
763-
}
764-
765-
void SentryPreviewStop() {
766-
previewing_sentry = FALSE;
767-
sentry_preview.drawmask = 0;
768-
sentry_preview_range_sphere.drawmask = 0;
769-
}
770-
771784
noref void CSQC_Input_Frame() {
772785
local float changed_buttons = input_buttons ^ oldbuttons;
773786
oldbuttons = input_buttons;
@@ -894,15 +907,6 @@ void _Sync_ServerCommandFrame() {
894907

895908
CsGrenTimer::UpdateSoundStack();
896909
UpdateTeamColorCrosshair();
897-
898-
if (previewing_sentry) {
899-
if (game_state.is_alive) {
900-
sentry_fits = CheckArea(sentry_preview, player_localentnum);
901-
sentry_preview.colormod = sentry_fits ? '1 1 1' : '0.5 0.2 0.2';
902-
} else {
903-
SentryPreviewStop();
904-
}
905-
}
906910
}
907911

908912

share/engineer.qc

Lines changed: 18 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,22 @@
1-
float (entity obj, float builder) CheckArea = {
2-
local vector src;
3-
local vector end;
4-
local float pos;
5-
local entity te;
1+
float PlaceSentry(entity sentry, vector builder_org) {
2+
tracebox(sentry.origin, sentry.mins, sentry.maxs, sentry.origin, MOVE_NORMAL, sentry);
63

7-
pos = pointcontents(obj.origin);
8-
if ((pos == CONTENT_SOLID) || (pos == CONTENT_SKY)) {
9-
return (0);
10-
}
11-
src_x = (obj.origin_x) + 24;
12-
src_y = (obj.origin_y) + 24;
13-
src_z = (obj.origin_z);
14-
pos = pointcontents(src);
15-
if ((pos == CONTENT_SOLID) || (pos == CONTENT_SKY)) {
16-
return (0);
17-
}
18-
end_x = (obj.origin_x) - 16;
19-
end_y = (obj.origin_y) - 16;
20-
end_z = (obj.origin_z);
21-
traceline(src, end, 1, obj);
22-
if (trace_fraction != 1) {
23-
return (0);
24-
}
25-
pos = pointcontents(end);
26-
if ((pos == CONTENT_SOLID) || (pos == CONTENT_SKY)) {
27-
return (0);
28-
}
29-
src_x = (obj.origin_x) - 16;
30-
src_y = (obj.origin_y) + 16;
31-
src_z = (obj.origin_z);
32-
pos = pointcontents(src);
33-
if ((pos == CONTENT_SOLID) || (pos == CONTENT_SKY)) {
34-
return (0);
35-
}
36-
end_x = (obj.origin_x) + 16;
37-
end_y = (obj.origin_y) - 16;
38-
end_z = (obj.origin_z);
39-
traceline(src, end, 1, obj);
40-
if (trace_fraction != 1) {
41-
return (0);
42-
}
43-
pos = pointcontents(end);
44-
if ((pos == CONTENT_SOLID) || (pos == CONTENT_SKY)) {
45-
return (0);
46-
}
47-
/* traceline(builder.origin, obj.origin, 1, builder); */
48-
/* if (trace_fraction != 1) { */
49-
/* return (0); */
50-
/* } */
4+
if (trace_inopen)
5+
return (1);
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);
5111

52-
te = findradius(obj.origin, 64);
53-
if (te != world) {
54-
if !(te.movetype == MOVETYPE_WALK && builder && num_for_edict(te.owner) == builder) {
55-
return (0);
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);
5618
}
5719
}
58-
return (1);
59-
};
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, 0)) {
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)