waypoint file loading

This commit is contained in:
Your Name 2020-09-02 14:13:36 -06:00
parent ab20b2ea40
commit eda726f6da
2 changed files with 168 additions and 68 deletions

View File

@ -8,7 +8,7 @@
*/ */
init() init()
{ {
load_waypoints(); thread load_waypoints();
cac_init_patch(); cac_init_patch();
thread hook_callbacks(); thread hook_callbacks();

View File

@ -584,6 +584,92 @@ cac_init_patch()
} }
} }
tokenizeLine(line, tok)
{
tokens = [];
token = "";
for (i = 0; i < line.size; i++)
{
c = line[i];
if (c == tok)
{
tokens[tokens.size] = token;
token = "";
continue;
}
token += c;
}
tokens[tokens.size] = token;
return tokens;
}
parseTokensIntoWaypoint(tokens)
{
waypoint = spawnStruct();
orgStr = tokens[0];
orgToks = strtok(orgStr, " ");
waypoint.origin = (float(orgToks[0]), float(orgToks[1]), float(orgToks[2]));
childStr = tokens[1];
childToks = strtok(childStr, " ");
waypoint.childCount = childToks.size;
waypoint.children = [];
for( j=0; j<childToks.size; j++ )
waypoint.children[j] = int(childToks[j]);
type = tokens[2];
waypoint.type = type;
anglesStr = tokens[3];
if (isDefined(anglesStr) && anglesStr != "")
{
anglesToks = strtok(anglesStr, " ");
waypoint.angles = (float(anglesToks[0]), float(anglesToks[1]), float(anglesToks[2]));
}
return waypoint;
}
readWpsFromFile(mapname)
{
waypoints = [];
filename = "waypoints/" + mapname + "_wp.csv";
if (!FS_TestFile(filename))
return waypoints;
println("Attempting to read waypoints from " + filename);
csv = FS_FOpen(filename, "read");
for (;;)
{
waypointCount = int(FS_ReadLine(csv));
if (waypointCount <= 0)
break;
for (i = 1; i <= waypointCount; i++)
{
line = FS_ReadLine(csv);
tokens = tokenizeLine(line, ",");
waypoint = parseTokensIntoWaypoint(tokens);
waypoints[i-1] = waypoint;
}
break;
}
FS_FClose(csv);
return waypoints;
}
/* /*
Loads the waypoints. Populating everything needed for the waypoints. Loads the waypoints. Populating everything needed for the waypoints.
*/ */
@ -591,76 +677,90 @@ load_waypoints()
{ {
mapname = getDvar("mapname"); mapname = getDvar("mapname");
level.waypointCount = 0;
level.waypoints = []; level.waypoints = [];
switch(mapname) wps = readWpsFromFile(mapname);
if (wps.size)
{ {
case "mp_convoy": level.waypoints = wps;
level.waypoints = maps\mp\bots\waypoints\ambush::Ambush(); println("Loaded " + wps.size + " waypoints from file.");
break; }
case "mp_backlot": else
level.waypoints = maps\mp\bots\waypoints\backlot::Backlot(); {
break; switch(mapname)
case "mp_bloc": {
level.waypoints = maps\mp\bots\waypoints\bloc::Bloc(); case "mp_convoy":
break; level.waypoints = maps\mp\bots\waypoints\ambush::Ambush();
case "mp_bog": break;
level.waypoints = maps\mp\bots\waypoints\bog::Bog(); case "mp_backlot":
break; level.waypoints = maps\mp\bots\waypoints\backlot::Backlot();
case "mp_countdown": break;
level.waypoints = maps\mp\bots\waypoints\countdown::Countdown(); case "mp_bloc":
break; level.waypoints = maps\mp\bots\waypoints\bloc::Bloc();
case "mp_crash": break;
case "mp_crash_snow": case "mp_bog":
level.waypoints = maps\mp\bots\waypoints\crash::Crash(); level.waypoints = maps\mp\bots\waypoints\bog::Bog();
break; break;
case "mp_crossfire": case "mp_countdown":
level.waypoints = maps\mp\bots\waypoints\crossfire::Crossfire(); level.waypoints = maps\mp\bots\waypoints\countdown::Countdown();
break; break;
case "mp_citystreets": case "mp_crash":
level.waypoints = maps\mp\bots\waypoints\district::District(); case "mp_crash_snow":
break; level.waypoints = maps\mp\bots\waypoints\crash::Crash();
case "mp_farm": break;
level.waypoints = maps\mp\bots\waypoints\downpour::Downpour(); case "mp_crossfire":
break; level.waypoints = maps\mp\bots\waypoints\crossfire::Crossfire();
case "mp_overgrown": break;
level.waypoints = maps\mp\bots\waypoints\overgrown::Overgrown(); case "mp_citystreets":
break; level.waypoints = maps\mp\bots\waypoints\district::District();
case "mp_pipeline": break;
level.waypoints = maps\mp\bots\waypoints\pipeline::Pipeline(); case "mp_farm":
break; level.waypoints = maps\mp\bots\waypoints\downpour::Downpour();
case "mp_shipment": break;
level.waypoints = maps\mp\bots\waypoints\shipment::Shipment(); case "mp_overgrown":
break; level.waypoints = maps\mp\bots\waypoints\overgrown::Overgrown();
case "mp_showdown": break;
level.waypoints = maps\mp\bots\waypoints\showdown::Showdown(); case "mp_pipeline":
break; level.waypoints = maps\mp\bots\waypoints\pipeline::Pipeline();
case "mp_strike": break;
level.waypoints = maps\mp\bots\waypoints\strike::Strike(); case "mp_shipment":
break; level.waypoints = maps\mp\bots\waypoints\shipment::Shipment();
case "mp_vacant": break;
level.waypoints = maps\mp\bots\waypoints\vacant::Vacant(); case "mp_showdown":
break; level.waypoints = maps\mp\bots\waypoints\showdown::Showdown();
case "mp_cargoship": break;
level.waypoints = maps\mp\bots\waypoints\wetwork::Wetwork(); case "mp_strike":
break; level.waypoints = maps\mp\bots\waypoints\strike::Strike();
break;
case "mp_vacant":
level.waypoints = maps\mp\bots\waypoints\vacant::Vacant();
break;
case "mp_cargoship":
level.waypoints = maps\mp\bots\waypoints\wetwork::Wetwork();
break;
case "mp_broadcast": case "mp_broadcast":
level.waypoints = maps\mp\bots\waypoints\broadcast::Broadcast(); level.waypoints = maps\mp\bots\waypoints\broadcast::Broadcast();
break; break;
case "mp_creek": case "mp_creek":
level.waypoints = maps\mp\bots\waypoints\creek::Creek(); level.waypoints = maps\mp\bots\waypoints\creek::Creek();
break; break;
case "mp_carentan": case "mp_carentan":
level.waypoints = maps\mp\bots\waypoints\chinatown::Chinatown(); level.waypoints = maps\mp\bots\waypoints\chinatown::Chinatown();
break; break;
case "mp_killhouse": case "mp_killhouse":
level.waypoints = maps\mp\bots\waypoints\killhouse::Killhouse(); level.waypoints = maps\mp\bots\waypoints\killhouse::Killhouse();
break; break;
default: default:
maps\mp\bots\waypoints\_custom_map::main(mapname); maps\mp\bots\waypoints\_custom_map::main(mapname);
break; break;
}
if (level.waypoints.size)
println("Loaded " + level.waypoints.size + " waypoints from script.");
} }
level.waypointCount = level.waypoints.size; level.waypointCount = level.waypoints.size;