mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-01 16:02:22 +00:00
Add visual debugging mode for waypoints
Fix some compiler warnings
This commit is contained in:
parent
5fba15a58b
commit
79f381ebd4
7 changed files with 182 additions and 22 deletions
|
|
@ -372,6 +372,8 @@ consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT|CV_NO
|
|||
consvar_t cv_kartdebugshrink = {"kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartdebugdistribution = {"kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartdebughuddrop = {"kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
static CV_PossibleValue_t kartdebugwaypoint_cons_t[] = {{0, "Off"}, {1, "Forwards"}, {2, "Backwards"}, {0, NULL}};
|
||||
consvar_t cv_kartdebugwaypoints = {"kartdebugwaypoints", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugwaypoint_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_kartdebugcheckpoint = {"kartdebugcheckpoint", "Off", CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartdebugnodes = {"kartdebugnodes", "Off", CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ extern consvar_t cv_karteliminatelast;
|
|||
extern consvar_t cv_votetime;
|
||||
|
||||
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugshrink, cv_kartdebugdistribution, cv_kartdebughuddrop;
|
||||
extern consvar_t cv_kartdebugwaypoints;
|
||||
extern consvar_t cv_kartdebugcheckpoint, cv_kartdebugnodes;
|
||||
|
||||
extern consvar_t cv_itemfinder;
|
||||
|
|
|
|||
|
|
@ -16029,7 +16029,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_WAYPOINT
|
||||
2001, // doomednum
|
||||
S_NULL, // spawnstate
|
||||
S_INVISIBLE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
|
|
|||
|
|
@ -440,6 +440,7 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_kartdebugshrink);
|
||||
CV_RegisterVar(&cv_kartdebugdistribution);
|
||||
CV_RegisterVar(&cv_kartdebughuddrop);
|
||||
CV_RegisterVar(&cv_kartdebugwaypoints);
|
||||
|
||||
CV_RegisterVar(&cv_kartdebugcheckpoint);
|
||||
CV_RegisterVar(&cv_kartdebugnodes);
|
||||
|
|
|
|||
173
src/k_waypoint.c
173
src/k_waypoint.c
|
|
@ -1,6 +1,7 @@
|
|||
#include "k_waypoint.h"
|
||||
|
||||
#include "doomdef.h"
|
||||
#include "d_netcmd.h"
|
||||
#include "p_local.h"
|
||||
#include "p_mobj.h"
|
||||
#include "p_tick.h"
|
||||
|
|
@ -11,6 +12,146 @@ static waypoint_t *firstwaypoint = NULL;
|
|||
static size_t numwaypoints = 0;
|
||||
static size_t numwaypointmobjs = 0;
|
||||
|
||||
#define SPARKLES_PER_CONNECTION 16
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_DebugWaypointsSpawnLine(waypoint_t * const waypoint1, waypoint_t * const waypoint2)
|
||||
|
||||
Draw a debugging line between 2 waypoints
|
||||
|
||||
Input Arguments:-
|
||||
waypoint1 - A waypoint to draw the line between
|
||||
waypoint2 - The other waypoint to draw the line between
|
||||
--------------------------------------------------*/
|
||||
static void K_DebugWaypointsSpawnLine(waypoint_t * const waypoint1, waypoint_t * const waypoint2)
|
||||
{
|
||||
mobj_t *waypointmobj1, *waypointmobj2;
|
||||
mobj_t *spawnedmobj;
|
||||
fixed_t stepx, stepy, stepz;
|
||||
fixed_t x, y, z;
|
||||
INT32 n;
|
||||
|
||||
// Error conditions
|
||||
if (waypoint1 == NULL || waypoint2 == NULL)
|
||||
{
|
||||
CONS_Debug(DBG_GAMELOGIC, "NULL waypoint in K_DebugWaypointsSpawnLine.\n");
|
||||
return;
|
||||
}
|
||||
if (waypoint1->mobj == NULL || waypoint2->mobj == NULL)
|
||||
{
|
||||
CONS_Debug(DBG_GAMELOGIC, "NULL mobj on waypoint in K_DebugWaypointsSpawnLine.\n");
|
||||
return;
|
||||
}
|
||||
if (cv_kartdebugwaypoints.value == 0)
|
||||
{
|
||||
CONS_Debug(DBG_GAMELOGIC, "In K_DebugWaypointsSpawnLine when kartdebugwaypoints is off.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
waypointmobj1 = waypoint1->mobj;
|
||||
waypointmobj2 = waypoint2->mobj;
|
||||
|
||||
n = SPARKLES_PER_CONNECTION;
|
||||
|
||||
// Draw the sparkles
|
||||
stepx = (waypointmobj2->x - waypointmobj1->x) / n;
|
||||
stepy = (waypointmobj2->y - waypointmobj1->y) / n;
|
||||
stepz = (waypointmobj2->z - waypointmobj1->z) / n;
|
||||
x = waypointmobj1->x;
|
||||
y = waypointmobj1->y;
|
||||
z = waypointmobj1->z;
|
||||
do
|
||||
{
|
||||
spawnedmobj = P_SpawnMobj(x, y, z, MT_SPARK);
|
||||
P_SetMobjState(spawnedmobj, S_SPRK1 + ((leveltime + n) % 16));
|
||||
spawnedmobj->state->nextstate = S_NULL;
|
||||
spawnedmobj->state->tics = 1;
|
||||
x += stepx;
|
||||
y += stepy;
|
||||
z += stepz;
|
||||
} while (n--);
|
||||
}
|
||||
|
||||
#undef DEBUG_SPARKLE_DISTANCE
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_DebugWaypointsVisualise()
|
||||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
void K_DebugWaypointsVisualise(void)
|
||||
{
|
||||
mobj_t *waypointmobj;
|
||||
mobj_t *debugmobj;
|
||||
waypoint_t *waypoint;
|
||||
waypoint_t *otherwaypoint;
|
||||
UINT32 i;
|
||||
|
||||
if (waypointcap == NULL)
|
||||
{
|
||||
// No point putting a debug message here when it could easily happen when turning on the cvar in battle
|
||||
return;
|
||||
}
|
||||
if (cv_kartdebugwaypoints.value == 0)
|
||||
{
|
||||
// Going to nip this in the bud and say no drawing all this without the cvar, it's not particularly optimised
|
||||
return;
|
||||
}
|
||||
|
||||
// Hunt through the waypointcap so we can show all waypoint mobjs and not just ones that were able to be graphed
|
||||
for (waypointmobj = waypointcap; waypointmobj != NULL; waypointmobj = waypointmobj->tracer)
|
||||
{
|
||||
waypoint = K_SearchWaypointHeapForMobj(waypointmobj);
|
||||
|
||||
debugmobj = P_SpawnMobj(waypointmobj->x, waypointmobj->y, waypointmobj->z, MT_SPARK);
|
||||
P_SetMobjState(debugmobj, S_THOK);
|
||||
|
||||
// There's a waypoint setup for this mobj! So draw that it's a valid waypoint and draw lines to its connections
|
||||
if (waypoint != NULL)
|
||||
{
|
||||
if (waypoint->numnextwaypoints == 0 || waypoint->numprevwaypoints == 0)
|
||||
{
|
||||
debugmobj->color = SKINCOLOR_ORANGE;
|
||||
}
|
||||
else
|
||||
{
|
||||
debugmobj->color = SKINCOLOR_BLUE;
|
||||
}
|
||||
|
||||
// Valid waypoint, so draw lines of SPARKLES to its next or previous waypoints
|
||||
if (cv_kartdebugwaypoints.value == 1)
|
||||
{
|
||||
for (i = 0; i < waypoint->numnextwaypoints; i++)
|
||||
{
|
||||
if (waypoint->nextwaypoints[i] != NULL)
|
||||
{
|
||||
otherwaypoint = waypoint->nextwaypoints[i];
|
||||
K_DebugWaypointsSpawnLine(waypoint, otherwaypoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cv_kartdebugwaypoints.value == 2)
|
||||
{
|
||||
for (i = 0; i < waypoint->numprevwaypoints; i++)
|
||||
{
|
||||
if (waypoint->prevwaypoints[i] != NULL)
|
||||
{
|
||||
otherwaypoint = waypoint->prevwaypoints[i];
|
||||
K_DebugWaypointsSpawnLine(waypoint, otherwaypoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
debugmobj->color = SKINCOLOR_RED;
|
||||
}
|
||||
debugmobj->state->tics = 1;
|
||||
debugmobj->state->nextstate = S_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------
|
||||
waypoint_t *K_SearchWaypoints(waypoint_t *waypoint, mobj_t * const mobj, boolean * const visitedarray)
|
||||
|
||||
|
|
@ -282,7 +423,7 @@ static waypoint_t *K_MakeWaypoint(mobj_t *mobj)
|
|||
}
|
||||
if (waypointcap == NULL)
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "K_MakeWaypoint called with NULL waypointcap.");
|
||||
CONS_Debug(DBG_SETUP, "K_MakeWaypoint called with NULL waypointcap.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -341,7 +482,7 @@ static waypoint_t *K_SetupWaypoint(mobj_t *mobj)
|
|||
}
|
||||
if (waypointcap == NULL)
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "K_SetupWaypoint called with NULL waypointcap.");
|
||||
CONS_Debug(DBG_SETUP, "K_SetupWaypoint called with NULL waypointcap.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -391,14 +532,14 @@ static waypoint_t *K_SetupWaypoint(mobj_t *mobj)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static boolean K_AllocateWaypointHeap()
|
||||
static boolean K_AllocateWaypointHeap(void)
|
||||
|
||||
Allocates the waypoint heap enough space for the number of waypoint mobjs on the map
|
||||
|
||||
Return:-
|
||||
True if the allocation was successful, false if it wasn't. Will I_Error if out of memory still.
|
||||
--------------------------------------------------*/
|
||||
boolean K_AllocateWaypointHeap()
|
||||
static boolean K_AllocateWaypointHeap(void)
|
||||
{
|
||||
mobj_t *waypointmobj = NULL;
|
||||
boolean allocationsuccessful = false;
|
||||
|
|
@ -406,12 +547,12 @@ boolean K_AllocateWaypointHeap()
|
|||
// Error conditions
|
||||
if (waypointheap != NULL)
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "K_AllocateWaypointHeap called when waypointheap is already allocated.");
|
||||
CONS_Debug(DBG_SETUP, "K_AllocateWaypointHeap called when waypointheap is already allocated.\n");
|
||||
return false;
|
||||
}
|
||||
if (waypointcap == NULL)
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "K_AllocateWaypointHeap called with NULL waypointcap.");
|
||||
CONS_Debug(DBG_SETUP, "K_AllocateWaypointHeap called with NULL waypointcap.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -448,25 +589,25 @@ boolean K_AllocateWaypointHeap()
|
|||
}
|
||||
else
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "No waypoint mobjs in waypointcap.");
|
||||
CONS_Debug(DBG_SETUP, "No waypoint mobjs in waypointcap.\n");
|
||||
}
|
||||
|
||||
return allocationsuccessful;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_FreeWaypoints()
|
||||
void K_FreeWaypoints(void)
|
||||
|
||||
For safety, this will free the waypointheap and all the waypoints allocated if they aren't already before they
|
||||
are setup. If the PU_LEVEL tag is cleared, make sure to call K_ClearWaypoints or this will try to free already
|
||||
freed memory!
|
||||
--------------------------------------------------*/
|
||||
void K_FreeWaypoints()
|
||||
static void K_FreeWaypoints(void)
|
||||
{
|
||||
if (waypointheap != NULL)
|
||||
{
|
||||
// Free each waypoint if it's not already
|
||||
INT32 i;
|
||||
UINT32 i;
|
||||
for (i = 0; i < numwaypoints; i++)
|
||||
{
|
||||
if (waypointheap[i] != NULL)
|
||||
|
|
@ -475,7 +616,7 @@ void K_FreeWaypoints()
|
|||
}
|
||||
else
|
||||
{
|
||||
CONS_Debug(DBG_SETUP, "NULL waypoint %d attempted to be freed.", i);
|
||||
CONS_Debug(DBG_SETUP, "NULL waypoint %d attempted to be freed.\n", i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -487,11 +628,11 @@ void K_FreeWaypoints()
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_SetupWaypointList()
|
||||
boolean K_SetupWaypointList(void)
|
||||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
boolean K_SetupWaypointList()
|
||||
boolean K_SetupWaypointList(void)
|
||||
{
|
||||
boolean setupsuccessful = false;
|
||||
|
||||
|
|
@ -517,7 +658,7 @@ boolean K_SetupWaypointList()
|
|||
CONS_Debug(DBG_SETUP, "Successfully setup %zu waypoints.\n", numwaypoints);
|
||||
if (numwaypoints < numwaypointmobjs)
|
||||
{
|
||||
CONS_Printf("Not all waypoints in the map are connected! %zu waypoints setup but %zu mobjs.",
|
||||
CONS_Printf("Not all waypoints in the map are connected! %zu waypoints setup but %zu mobjs.\n",
|
||||
numwaypoints, numwaypointmobjs);
|
||||
}
|
||||
setupsuccessful = true;
|
||||
|
|
@ -529,11 +670,11 @@ boolean K_SetupWaypointList()
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_ClearWaypoints()
|
||||
void K_ClearWaypoints(void)
|
||||
|
||||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
void K_ClearWaypoints()
|
||||
void K_ClearWaypoints(void)
|
||||
{
|
||||
waypointheap = NULL;
|
||||
numwaypoints = 0;
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@
|
|||
typedef struct waypoint_s
|
||||
{
|
||||
mobj_t *mobj;
|
||||
UINT32 id;
|
||||
size_t id;
|
||||
struct waypoint_s **nextwaypoints;
|
||||
struct waypoint_s **prevwaypoints;
|
||||
fixed_t *nextwaypointdistances;
|
||||
fixed_t *prevwaypointdistances;
|
||||
UINT32 numnextwaypoints;
|
||||
UINT32 numprevwaypoints;
|
||||
size_t numnextwaypoints;
|
||||
size_t numprevwaypoints;
|
||||
} waypoint_t;
|
||||
|
||||
|
||||
|
|
@ -54,7 +54,16 @@ waypoint_t *K_SearchWaypointHeapForMobj(mobj_t * const mobj);
|
|||
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_SetupWaypointList()
|
||||
void K_DebugWaypointsVisualise()
|
||||
|
||||
Creates mobjs in order to visualise waypoints for debugging.
|
||||
--------------------------------------------------*/
|
||||
|
||||
void K_DebugWaypointsVisualise(void);
|
||||
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_SetupWaypointList(void)
|
||||
|
||||
Sets up the waypoint list for Kart race maps, prints out warnings if something is wrong.
|
||||
|
||||
|
|
@ -67,7 +76,7 @@ boolean K_SetupWaypointList(void);
|
|||
|
||||
|
||||
/*--------------------------------------------------
|
||||
void K_ClearWaypoints()
|
||||
void K_ClearWaypoints(void)
|
||||
|
||||
Clears waypointheap, firstwaypoint, numwaypoints, and numwaypointmobjs
|
||||
WARNING: This does *not* Free waypointheap or any waypoints! They are stored in PU_LEVEL so they are freed once
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "lua_script.h"
|
||||
#include "lua_hook.h"
|
||||
#include "k_kart.h"
|
||||
#include "k_waypoint.h"
|
||||
|
||||
// Object place
|
||||
#include "m_cheat.h"
|
||||
|
|
@ -714,6 +715,11 @@ void P_Ticker(boolean run)
|
|||
&& --mapreset <= 1
|
||||
&& server) // Remember: server uses it for mapchange, but EVERYONE ticks down for the animation
|
||||
D_MapChange(gamemap, gametype, encoremode, true, 0, false, false);
|
||||
|
||||
if (cv_kartdebugwaypoints.value != 0)
|
||||
{
|
||||
K_DebugWaypointsVisualise();
|
||||
}
|
||||
}
|
||||
|
||||
// Always move the camera.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue