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,8 +677,18 @@ load_waypoints()
{ {
mapname = getDvar("mapname"); mapname = getDvar("mapname");
level.waypointCount = 0;
level.waypoints = []; level.waypoints = [];
wps = readWpsFromFile(mapname);
if (wps.size)
{
level.waypoints = wps;
println("Loaded " + wps.size + " waypoints from file.");
}
else
{
switch(mapname) switch(mapname)
{ {
case "mp_convoy": case "mp_convoy":
@ -663,6 +759,10 @@ load_waypoints()
break; break;
} }
if (level.waypoints.size)
println("Loaded " + level.waypoints.size + " waypoints from script.");
}
level.waypointCount = level.waypoints.size; level.waypointCount = level.waypoints.size;
for(i = 0; i < level.waypointCount; i++) for(i = 0; i < level.waypointCount; i++)