From 3c4b4e448330097b743f86776fe5736d24a49c94 Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Fri, 17 Mar 2023 17:28:04 +1100 Subject: [PATCH] - Tidy up `warptocoords` CCMD since everything is in an actor now. * Now accepts floating point inputs. * Restores lost pitch capability. --- source/core/gamestruct.h | 2 +- source/core/inputstate.cpp | 22 ++++++++-------------- source/games/blood/src/blood.h | 2 +- source/games/blood/src/osdcmd.cpp | 13 ++----------- source/games/duke/src/ccmds.cpp | 15 ++------------- source/games/duke/src/duke3d.h | 2 +- source/games/exhumed/src/exhumed.h | 2 +- source/games/exhumed/src/osdcmds.cpp | 12 ++---------- source/games/sw/src/game.h | 2 +- source/games/sw/src/osdcmds.cpp | 16 ++-------------- 10 files changed, 21 insertions(+), 67 deletions(-) diff --git a/source/core/gamestruct.h b/source/core/gamestruct.h index a271bcd99..cf99196e5 100644 --- a/source/core/gamestruct.h +++ b/source/core/gamestruct.h @@ -105,7 +105,7 @@ struct GameInterface virtual bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) { return false; } virtual DAngle playerPitchMin() { return DAngle::fromDeg(57.375); } virtual DAngle playerPitchMax() { return DAngle::fromDeg(-57.375); } - virtual void WarpToCoords(double x, double y, double z, DAngle a) {} + virtual DCoreActor* getConsoleActor() = 0; virtual void ToggleThirdPerson() { } virtual void SwitchCoopView() { Printf("Unsupported command\n"); } virtual void ToggleShowWeapon() { Printf("Unsupported command\n"); } diff --git a/source/core/inputstate.cpp b/source/core/inputstate.cpp index aa55b505d..e340ada4b 100644 --- a/source/core/inputstate.cpp +++ b/source/core/inputstate.cpp @@ -365,7 +365,7 @@ CCMD(warptocoords) } if (argv.argc() < 4) { - Printf("warptocoords [x] [y] [z] [ang] (optional) [horiz] (optional): warps the player to the specified coordinates\n"); + Printf("warptocoords [x] [y] [z] [yaw] (optional) [pitch] (optional): warps the player to the specified coordinates\n"); return; } if (gamestate != GS_LEVEL) @@ -373,20 +373,14 @@ CCMD(warptocoords) Printf("warptocoords: must be in a level\n"); return; } - int x = atoi(argv[1]); - int y = atoi(argv[2]); - int z = atoi(argv[3]); - int ang = INT_MIN, horiz = INT_MIN; - if (argv.argc() > 4) - { - ang = atoi(argv[4]); - } - if (argv.argc() > 5) - { - horiz = atoi(argv[5]); - } - gi->WarpToCoords(x, y, z, DAngle::fromDeg(ang)); + if (const auto pActor = gi->getConsoleActor()) + { + 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) diff --git a/source/games/blood/src/blood.h b/source/games/blood/src/blood.h index c69363ee8..5fcde103f 100644 --- a/source/games/blood/src/blood.h +++ b/source/games/blood/src/blood.h @@ -133,7 +133,7 @@ struct GameInterface : public ::GameInterface bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override; DAngle playerPitchMin() override { return DAngle::fromDeg(54.575); } DAngle playerPitchMax() override { return DAngle::fromDeg(-43.15); } - void WarpToCoords(double x, double y, double z, DAngle a) override; + DCoreActor* getConsoleActor() override; void ToggleThirdPerson() override; void SwitchCoopView() override; void ToggleShowWeapon() override; diff --git a/source/games/blood/src/osdcmd.cpp b/source/games/blood/src/osdcmd.cpp index e9856a38a..9ecf2429a 100644 --- a/source/games/blood/src/osdcmd.cpp +++ b/source/games/blood/src/osdcmd.cpp @@ -31,18 +31,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BEGIN_BLD_NS -void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang) +DCoreActor* GameInterface::getConsoleActor() { - PLAYER* pPlayer = &gPlayer[myconnectindex]; - - pPlayer->actor->spr.pos = { x, y, z }; - playerResetInertia(pPlayer); - - if (ang != DAngle::fromDeg(INT_MIN)) - { - pPlayer->actor->spr.Angles.Yaw = ang; - pPlayer->actor->backupang(); - } + return gPlayer[myconnectindex].actor; } void GameInterface::ToggleThirdPerson() diff --git a/source/games/duke/src/ccmds.cpp b/source/games/duke/src/ccmds.cpp index 3b495465e..0cbfc875c 100644 --- a/source/games/duke/src/ccmds.cpp +++ b/source/games/duke/src/ccmds.cpp @@ -118,20 +118,9 @@ static int ccmd_spawn(CCmdFuncPtr parm) return CCMD_OK; } -void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang) +DCoreActor* GameInterface::getConsoleActor() { - player_struct* p = &ps[myconnectindex]; - auto pActor = p->GetActor(); - - if (!pActor) return; - - pActor->spr.pos = DVector3(x, y, z); - pActor->backuppos(); - - if (ang != DAngle::fromDeg(INT_MIN)) - { - p->GetActor()->PrevAngles.Yaw = p->GetActor()->spr.Angles.Yaw = ang; - } + return ps[myconnectindex].GetActor(); } void GameInterface::ToggleThirdPerson() diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index 0f1eb44d8..e472ab0a5 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -51,7 +51,7 @@ struct GameInterface : public ::GameInterface void NewGame(MapRecord* map, int skill, bool) override; void LevelCompleted(MapRecord* map, int skill) override; bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override; - void WarpToCoords(double x, double y, double z, DAngle ang) override; + DCoreActor* getConsoleActor() override; void ToggleThirdPerson() override; void SwitchCoopView() override; void ToggleShowWeapon() override; diff --git a/source/games/exhumed/src/exhumed.h b/source/games/exhumed/src/exhumed.h index fd34ceb70..0670d4d90 100644 --- a/source/games/exhumed/src/exhumed.h +++ b/source/games/exhumed/src/exhumed.h @@ -234,7 +234,7 @@ struct GameInterface : public ::GameInterface bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override; DAngle playerPitchMin() override { return DAngle::fromDeg(49.5); } DAngle playerPitchMax() override { return DAngle::fromDeg(-49.5); } - void WarpToCoords(double x, double y, double z, DAngle ang) override; + DCoreActor* getConsoleActor() override; void ToggleThirdPerson() override; void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override; int GetCurrentSkill() override; diff --git a/source/games/exhumed/src/osdcmds.cpp b/source/games/exhumed/src/osdcmds.cpp index 45a18fa47..3d795cf5c 100644 --- a/source/games/exhumed/src/osdcmds.cpp +++ b/source/games/exhumed/src/osdcmds.cpp @@ -39,17 +39,9 @@ BEGIN_PS_NS // //--------------------------------------------------------------------------- -void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang) +DCoreActor* GameInterface::getConsoleActor() { - Player *nPlayer = &PlayerList[nLocalPlayer]; - - nPlayer->pActor->spr.pos = DVector3(x, y, z); - nPlayer->pActor->backuppos(); - - if (ang != DAngle::fromDeg(INT_MIN)) - { - nPlayer->pActor->PrevAngles.Yaw = nPlayer->pActor->spr.Angles.Yaw = ang; - } + return PlayerList[nLocalPlayer].pActor; } //--------------------------------------------------------------------------- diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index fff107c4d..50cc2e452 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -1694,7 +1694,7 @@ struct GameInterface : public ::GameInterface void NextLevel(MapRecord *map, int skill) override; void NewGame(MapRecord *map, int skill, bool) override; bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override; - void WarpToCoords(double x, double y, double z, DAngle ang) override; + DCoreActor* getConsoleActor() override; void ToggleThirdPerson() override; void SwitchCoopView() override; void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double smoothRatio) override; diff --git a/source/games/sw/src/osdcmds.cpp b/source/games/sw/src/osdcmds.cpp index e5ab2b8f5..e2720b157 100644 --- a/source/games/sw/src/osdcmds.cpp +++ b/source/games/sw/src/osdcmds.cpp @@ -54,21 +54,9 @@ BEGIN_SW_NS // //--------------------------------------------------------------------------- -void GameInterface::WarpToCoords(double x, double y, double z, DAngle ang) +DCoreActor* GameInterface::getConsoleActor() { - auto pp = &Player[myconnectindex]; - auto ppActor = pp->actor; - - if (!ppActor) return; - - ppActor->spr.pos = DVector3(x,y,z); - - if (ang != DAngle::fromDeg(INT_MIN)) - { - Player->actor->spr.Angles.Yaw = ang; - } - - ppActor->backuploc(); + return Player[myconnectindex].actor; } //---------------------------------------------------------------------------