From 98046afa28a018108b4b1267f89d4ad13570a110 Mon Sep 17 00:00:00 2001
From: Mitchell Richters <mjr4077au@gmail.com>
Date: Sun, 29 Oct 2023 21:05:44 +1100
Subject: [PATCH] - Consolidate player coord stat/CCMD into `coreplayer.cpp`.

---
 source/core/coreplayer.cpp | 60 ++++++++++++++++++++++++++++++++++++++
 source/core/coreplayer.h   |  1 +
 source/core/gamecvars.cpp  | 19 ------------
 source/core/gameinput.cpp  | 29 ------------------
 4 files changed, 61 insertions(+), 48 deletions(-)

diff --git a/source/core/coreplayer.cpp b/source/core/coreplayer.cpp
index 1cbd26fa7..fc47b6a1a 100644
--- a/source/core/coreplayer.cpp
+++ b/source/core/coreplayer.cpp
@@ -272,3 +272,63 @@ void DCorePlayer::doRollInput(const bool bUnderwater)
 		actor->spr.Angles.Roll += cmd.ucmd.ang.Roll * gameInput.SyncInput();
 	}
 }
+
+
+//---------------------------------------------------------------------------
+//
+// Stat for console player's position/angles.
+//
+//---------------------------------------------------------------------------
+
+ADD_STAT(coord)
+{
+	FString out;
+	const auto p = PlayerArray[myconnectindex];
+	if (const auto pActor = p->GetActor())
+	{
+		out.AppendFormat("X: %.4f  ", pActor->spr.pos.X);
+		out.AppendFormat("Y: %.4f  ", pActor->spr.pos.Y);
+		out.AppendFormat("Z: %.4f\n", pActor->spr.pos.Z);
+		out.AppendFormat("Yaw: %.4f  ", pActor->spr.Angles.Yaw.Degrees());
+		out.AppendFormat("Pitch: %.4f  ", pActor->spr.Angles.Pitch.Degrees());
+		out.AppendFormat("Roll: %.4f\n", pActor->spr.Angles.Roll.Degrees());
+		out.AppendFormat("View Yaw: %.4f  ", p->ViewAngles.Yaw.Degrees());
+		out.AppendFormat("View Pitch: %.4f  ", p->ViewAngles.Pitch.Degrees());
+		out.AppendFormat("View Roll: %.4f\n", p->ViewAngles.Roll.Degrees());
+	}
+	return out;
+}
+
+
+//---------------------------------------------------------------------------
+//
+// CCMD to warp console player to the given coordinates.
+//
+//---------------------------------------------------------------------------
+
+CCMD(warptocoords)
+{
+	if (netgame)
+	{
+		Printf("warptocoords cannot be used in multiplayer.\n");
+		return;
+	}
+	if (argv.argc() < 4)
+	{
+		Printf("warptocoords [x] [y] [z] [yaw] (optional) [pitch] (optional): warps the player to the specified coordinates\n");
+		return;
+	}
+	if (gamestate != GS_LEVEL)
+	{
+		Printf("warptocoords: must be in a level\n");
+		return;
+	}
+
+	if (const auto pActor = PlayerArray[myconnectindex]->GetActor())
+	{
+		pActor->spr.pos = DVector3(atof(argv[1]), atof(argv[2]), atof(argv[3]));
+		if (argv.argc() > 4) pActor->spr.Angles.Yaw = DAngle::fromDeg(atof(argv[4]));
+		if (argv.argc() > 5) pActor->spr.Angles.Pitch = DAngle::fromDeg(atof(argv[5]));
+		pActor->backuploc();
+	}
+}
diff --git a/source/core/coreplayer.h b/source/core/coreplayer.h
index 88682d282..d9385409c 100644
--- a/source/core/coreplayer.h
+++ b/source/core/coreplayer.h
@@ -2,6 +2,7 @@
 
 #include "d_net.h"
 #include "packet.h"
+#include "gamestate.h"
 #include "gamefuncs.h"
 
 class DCorePlayer : public DObject
diff --git a/source/core/gamecvars.cpp b/source/core/gamecvars.cpp
index 033c3c82c..2cd98356d 100644
--- a/source/core/gamecvars.cpp
+++ b/source/core/gamecvars.cpp
@@ -249,25 +249,6 @@ ADD_STAT(fps)
 	return gi->statFPS();
 }
 
-ADD_STAT(coord)
-{
-	FString out;
-	const auto p = PlayerArray[myconnectindex];
-	if (const auto pActor = p->GetActor())
-	{
-		out.AppendFormat("X: %.4f  ", pActor->spr.pos.X);
-		out.AppendFormat("Y: %.4f  ", pActor->spr.pos.Y);
-		out.AppendFormat("Z: %.4f\n", pActor->spr.pos.Z);
-		out.AppendFormat("Yaw: %.4f  ", pActor->spr.Angles.Yaw.Degrees());
-		out.AppendFormat("Pitch: %.4f  ", pActor->spr.Angles.Pitch.Degrees());
-		out.AppendFormat("Roll: %.4f\n", pActor->spr.Angles.Roll.Degrees());
-		out.AppendFormat("View Yaw: %.4f  ", p->ViewAngles.Yaw.Degrees());
-		out.AppendFormat("View Pitch: %.4f  ", p->ViewAngles.Pitch.Degrees());
-		out.AppendFormat("View Roll: %.4f\n", p->ViewAngles.Roll.Degrees());
-	}
-	return out;
-}
-
 CUSTOM_CVARD(Int, r_showfps, 0, 0, "show the frame rate counter")
 {
 	if (self < 0 || self > 3) self = 1;
diff --git a/source/core/gameinput.cpp b/source/core/gameinput.cpp
index 6b6af357f..fb2cb9b9b 100644
--- a/source/core/gameinput.cpp
+++ b/source/core/gameinput.cpp
@@ -22,9 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //------------------------------------------------------------------------- 
 
 #include "menu.h"
-#include "gamestate.h"
 #include "gameinput.h"
-#include "coreplayer.h"
 #include "g_input.h"
 
 //---------------------------------------------------------------------------
@@ -439,33 +437,6 @@ CCMD(holsterweapon)
 	gameInput.SendAction(SB_HOLSTER);
 }
 
-CCMD(warptocoords)
-{
-	if (netgame)
-	{
-		Printf("warptocoords cannot be used in multiplayer.\n");
-		return;
-	}
-	if (argv.argc() < 4)
-	{
-		Printf("warptocoords [x] [y] [z] [yaw] (optional) [pitch] (optional): warps the player to the specified coordinates\n");
-		return;
-	}
-	if (gamestate != GS_LEVEL)
-	{
-		Printf("warptocoords: must be in a level\n");
-		return;
-	}
-
-	if (const auto pActor = PlayerArray[myconnectindex]->GetActor())
-	{
-		pActor->spr.pos = DVector3(atof(argv[1]), atof(argv[2]), atof(argv[3]));
-		if (argv.argc() > 4) pActor->spr.Angles.Yaw = DAngle::fromDeg(atof(argv[4]));
-		if (argv.argc() > 5) pActor->spr.Angles.Pitch = DAngle::fromDeg(atof(argv[5]));
-		pActor->backuploc();
-	}
-}
-
 CCMD(third_person_view)
 {
 	gi->ToggleThirdPerson();