#include "waypoints.qh"
-#include "../_all.qh"
#include "bot.qh"
#include "navigation.qh"
+#include <common/state.qh>
+
#include "../antilag.qh"
-#include "../../common/constants.qh"
+#include <common/constants.qh>
-#include "../../warpzonelib/util_server.qh"
+#include <lib/warpzone/common.qh>
+#include <lib/warpzone/util_server.qh>
// create a new spawnfunc_waypoint and automatically link it to other waypoints, and link
// them back to it as well
w = find(w, classname, "waypoint");
}
- w = spawn();
+ w = new(waypoint);
w.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP;
- w.classname = "waypoint";
w.wpflags = f;
setorigin(w, (m1 + m2) * 0.5);
setsize(w, m1 - w.origin, m2 - w.origin);
if(!w.wpisbox)
{
- setsize(w, PL_MIN - '1 1 0', PL_MAX + '1 1 0');
+ setsize(w, STAT(PL_MIN, NULL) - '1 1 0', STAT(PL_MAX, NULL) + '1 1 0');
if(!move_out_of_solid(w))
{
if(!(f & WAYPOINTFLAG_GENERATED))
{
- dprint("Killed a waypoint that was stuck in solid at ", vtos(w.origin), "\n");
+ LOG_TRACE("Killed a waypoint that was stuck in solid at ", vtos(w.origin), "\n");
remove(w);
return world;
}
{
if(autocvar_developer)
{
- print("A generated waypoint is stuck in solid at ", vtos(w.origin), "\n");
+ LOG_INFO("A generated waypoint is stuck in solid at ", vtos(w.origin), "\n");
backtrace("Waypoint stuck");
}
}
{
m1 = w.mins;
m2 = w.maxs;
- setmodel(w, "models/runematch/rune.mdl"); w.effects = EF_LOWPRECISION;
+ setmodel(w, MDL_WAYPOINT); w.effects = EF_LOWPRECISION;
setsize(w, m1, m2);
if (w.wpflags & WAYPOINTFLAG_ITEM)
w.colormod = '1 0 0';
// (precompile a list of all reachable waypoints from this spawnfunc_waypoint)
// (SLOW!)
void waypoint_think()
-{
+{SELFPARAM();
entity e;
vector sv, sm1, sm2, ev, em1, em2, dv;
ev.z = bound(em1_z, ev.z, em2_z);
dv = ev - sv;
dv.z = 0;
- if (vlen(dv) >= 1050) // max search distance in XY
+ if(vdist(dv, >=, 1050)) // max search distance in XY
{
++relink_lengthculled;
continue;
navigation_testtracewalk = 0;
if (!self.wpisbox)
{
- tracebox(sv - PL_MIN.z * '0 0 1', PL_MIN, PL_MAX, sv, false, self);
+ tracebox(sv - STAT(PL_MIN, NULL).z * '0 0 1', STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), sv, false, self);
if (!trace_startsolid)
{
//dprint("sv deviation", vtos(trace_endpos - sv), "\n");
}
if (!e.wpisbox)
{
- tracebox(ev - PL_MIN.z * '0 0 1', PL_MIN, PL_MAX, ev, false, e);
+ tracebox(ev - STAT(PL_MIN, NULL).z * '0 0 1', STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), ev, false, e);
if (!trace_startsolid)
{
//dprint("ev deviation", vtos(trace_endpos - ev), "\n");
}
//traceline(self.origin, e.origin, false, world);
//if (trace_fraction == 1)
- if (!self.wpisbox && tracewalk(self, sv, PL_MIN, PL_MAX, ev, MOVE_NOMONSTERS))
+ if (!self.wpisbox && tracewalk(self, sv, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), ev, MOVE_NOMONSTERS))
waypoint_addlink(self, e);
else
relink_walkculled += 0.5;
- if (!e.wpisbox && tracewalk(e, ev, PL_MIN, PL_MAX, sv, MOVE_NOMONSTERS))
+ if (!e.wpisbox && tracewalk(e, ev, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), sv, MOVE_NOMONSTERS))
waypoint_addlink(e, self);
else
relink_walkculled += 0.5;
vector m1, m2;
m1 = wp.mins;
m2 = wp.maxs;
- setmodel(wp, "models/runematch/rune.mdl"); wp.effects = EF_LOWPRECISION;
+ setmodel(wp, MDL_WAYPOINT); wp.effects = EF_LOWPRECISION;
setsize(wp, m1, m2);
if (wp.wpflags & WAYPOINTFLAG_ITEM)
wp.colormod = '1 0 0';
}
// spawnfunc_waypoint map entity
-void spawnfunc_waypoint()
+spawnfunc(waypoint)
{
- setorigin(self, self.origin);
+ setorigin(this, this.origin);
// schedule a relink after other waypoints have had a chance to spawn
- waypoint_clearlinks(self);
- //waypoint_schedulerelink(self);
+ waypoint_clearlinks(this);
+ //waypoint_schedulerelink(this);
}
// remove a spawnfunc_waypoint, and schedule all neighbors to relink
if (file < 0)
{
- dprint("waypoint links load from ");
- dprint(filename);
- dprint(" failed\n");
+ LOG_TRACE("waypoint links load from ");
+ LOG_TRACE(filename);
+ LOG_TRACE(" failed\n");
return false;
}
if(!found)
{
- dprint("waypoint_load_links: couldn't find 'from' waypoint at ", vtos(wp_from.origin),"\n");
+ LOG_TRACE("waypoint_load_links: couldn't find 'from' waypoint at ", vtos(wp_from.origin),"\n");
continue;
}
if(!found)
{
- dprint("waypoint_load_links: couldn't find 'to' waypoint at ", vtos(wp_to.origin),"\n");
+ LOG_TRACE("waypoint_load_links: couldn't find 'to' waypoint at ", vtos(wp_to.origin),"\n");
continue;
}
fclose(file);
- dprint("loaded ");
- dprint(ftos(c));
- dprint(" waypoint links from maps/");
- dprint(mapname);
- dprint(".waypoints.cache\n");
+ LOG_TRACE("loaded ", ftos(c), " waypoint links from maps/", mapname, ".waypoints.cache\n");
botframe_cachedwaypointlinks = true;
return true;
if (file < 0)
{
- dprint("waypoint links load from ");
- dprint(filename);
- dprint(" failed\n");
+ LOG_TRACE("waypoint links load from ", filename, " failed\n");
return;
}
if(!found)
{
- print(strcat("NOTICE: Can not find waypoint at ", vtos(wp_from_pos), ". Path skipped\n"));
+ LOG_INFO(strcat("NOTICE: Can not find waypoint at ", vtos(wp_from_pos), ". Path skipped\n"));
continue;
}
}
if(!found)
{
- print(strcat("NOTICE: Can not find waypoint at ", vtos(wp_to_pos), ". Path skipped\n"));
+ LOG_INFO(strcat("NOTICE: Can not find waypoint at ", vtos(wp_to_pos), ". Path skipped\n"));
continue;
}
fclose(file);
- dprint("loaded ");
- dprint(ftos(c));
- dprint(" waypoint links from maps/");
- dprint(mapname);
- dprint(".waypoints.hardwired\n");
+ LOG_TRACE("loaded ", ftos(c), " waypoint links from maps/", mapname, ".waypoints.hardwired\n");
}
entity waypoint_get_link(entity w, float i)
file = fopen(filename, FILE_WRITE);
if (file < 0)
{
- print("waypoint links save to ");
- print(filename);
- print(" failed\n");
+ LOG_INFO("waypoint links save to ");
+ LOG_INFO(filename);
+ LOG_INFO(" failed\n");
}
c = 0;
w = findchain(classname, "waypoint");
fclose(file);
botframe_cachedwaypointlinks = true;
- print("saved ");
- print(ftos(c));
- print(" waypoints links to maps/");
- print(mapname);
- print(".waypoints.cache\n");
+ LOG_INFO("saved ");
+ LOG_INFO(ftos(c));
+ LOG_INFO(" waypoints links to maps/");
+ LOG_INFO(mapname);
+ LOG_INFO(".waypoints.cache\n");
}
// save waypoints to gamedir/data/maps/mapname.waypoints
cwb = cwb + 1;
}
fclose(file);
- dprint("loaded ");
- dprint(ftos(cwp));
- dprint(" waypoints and ");
- dprint(ftos(cwb));
- dprint(" wayboxes from maps/");
- dprint(mapname);
- dprint(".waypoints\n");
+ LOG_TRACE("loaded ", ftos(cwp), " waypoints and ", ftos(cwb), " wayboxes from maps/", mapname, ".waypoints\n");
}
else
{
- dprint("waypoint load from ");
- dprint(filename);
- dprint(" failed\n");
+ LOG_TRACE("waypoint load from ", filename, " failed\n");
}
return cwp + cwb;
}
vector waypoint_fixorigin(vector position)
{
- tracebox(position + '0 0 1' * (1 - PL_MIN.z), PL_MIN, PL_MAX, position + '0 0 -512', MOVE_NOMONSTERS, world);
+ tracebox(position + '0 0 1' * (1 - STAT(PL_MIN, NULL).z), STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), position + '0 0 -512', MOVE_NOMONSTERS, world);
if(trace_fraction < 1)
position = trace_endpos;
//traceline(position, position + '0 0 -512', MOVE_NOMONSTERS, world);
waypoint_spawnforteleporter_boxes(e, e.absmin, e.absmax, destination, destination, timetaken);
}
-entity waypoint_spawnpersonal(vector position)
+entity waypoint_spawnpersonal(entity this, vector position)
{
entity w;
w = waypoint_spawn(position, position, WAYPOINTFLAG_GENERATED | WAYPOINTFLAG_PERSONAL);
w.nearestwaypoint = world;
w.nearestwaypointtimeout = 0;
- w.owner = self;
+ w.owner = this;
waypoint_schedulerelink(w);
void botframe_showwaypointlinks()
{
- entity player, head, w;
+ entity head, w;
if (time < botframe_waypointeditorlightningtime)
return;
botframe_waypointeditorlightningtime = time + 0.5;
- player = find(world, classname, "player");
- while (player)
- {
- if (!player.isbot)
- if (player.flags & FL_ONGROUND || player.waterlevel > WATERLEVEL_NONE)
+ FOREACH_CLIENT(IS_PLAYER(it) && !it.isbot, LAMBDA(
+ if(IS_ONGROUND(it) || it.waterlevel > WATERLEVEL_NONE)
{
//navigation_testtracewalk = true;
- head = navigation_findnearestwaypoint(player, false);
+ head = navigation_findnearestwaypoint(it, false);
// print("currently selected WP is ", etos(head), "\n");
//navigation_testtracewalk = false;
if (head)
{
- w = head ;if (w) te_lightning2(world, w.origin, player.origin);
+ w = head ;if (w) te_lightning2(world, w.origin, it.origin);
w = head.wp00;if (w) te_lightning2(world, w.origin, head.origin);
w = head.wp01;if (w) te_lightning2(world, w.origin, head.origin);
w = head.wp02;if (w) te_lightning2(world, w.origin, head.origin);
w = head.wp31;if (w) te_lightning2(world, w.origin, head.origin);
}
}
- player = find(player, classname, "player");
- }
+ ));
}
float botframe_autowaypoints_fixdown(vector v)
{
- tracebox(v, PL_MIN, PL_MAX, v + '0 0 -64', MOVE_NOMONSTERS, world);
+ tracebox(v, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), v + '0 0 -64', MOVE_NOMONSTERS, world);
if(trace_fraction >= 1)
return 0;
return 1;
}
if(bestdist < maxdist)
{
- print("update chain to new nearest WP ", etos(p.(fld)), "\n");
+ LOG_INFO("update chain to new nearest WP ", etos(p.(fld)), "\n");
return 0;
}
}
t = (tmin + tmax) * 0.5;
- o = antilag_takebackorigin(p, time - t);
+ o = antilag_takebackorigin(p, CS(p), time - t);
if(!botframe_autowaypoints_fixdown(o))
return -2;
o = trace_endpos;
tmax = t;
}
- print("spawning a waypoint for connecting to ", etos(wp), "\n");
+ LOG_INFO("spawning a waypoint for connecting to ", etos(wp), "\n");
botframe_autowaypoints_createwp(o, p, fld, 0);
return 1;
}
if(r != -1)
return;
- print("emergency: got no good nearby WP to build a link from, starting a new chain\n");
+ LOG_INFO("emergency: got no good nearby WP to build a link from, starting a new chain\n");
if(!botframe_autowaypoints_fixdown(p.origin))
return; // shouldn't happen, caught above
botframe_autowaypoints_createwp(trace_endpos, p, fld, WAYPOINTFLAG_PROTECTED);
goto next;
}
}
-:next
+LABEL(next)
}
}
// d) The waypoint is a dead end. Dead end waypoints must be kept as
{
if (!(w.wpflags & (WAYPOINTFLAG_USEFUL | WAYPOINTFLAG_DEAD_END)))
{
- printf("Removed a waypoint at %v. Try again for more!\n", w.origin);
+ LOG_INFOF("Removed a waypoint at %v. Try again for more!\n", w.origin);
te_explosion(w.origin);
waypoint_remove(w);
break;
void botframe_autowaypoints()
{
- entity p;
- FOR_EACH_REALPLAYER(p)
- {
- if(p.deadflag)
- continue;
+ FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && !IS_DEAD(it), LAMBDA(
// going back is broken, so only fix waypoints to walk TO the player
//botframe_autowaypoints_fix(p, false, botframe_autowaypoints_lastwp0);
- botframe_autowaypoints_fix(p, true, botframe_autowaypoints_lastwp1);
+ botframe_autowaypoints_fix(it, true, botframe_autowaypoints_lastwp1);
//te_explosion(p.botframe_autowaypoints_lastwp0.origin);
- }
+ ));
if (autocvar_g_waypointeditor_auto >= 2) {
botframe_deleteuselesswaypoints();