mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-22 03:21:07 +00:00
- Consolidate each game's gi-GetInput()
into a unified function.
* Eliminates a lot of boilerplate. * Consolidation of input accumulation buffers discretely used in each game. * Allows privatisation of `PlayerAngles::CameraAngles`.
This commit is contained in:
parent
65ee4b14d6
commit
b3c27a177e
19 changed files with 82 additions and 259 deletions
|
@ -21,6 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "menu.h"
|
||||||
|
#include "gamestate.h"
|
||||||
#include "gameinput.h"
|
#include "gameinput.h"
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -49,6 +51,7 @@ static constexpr double PITCH_HORIZOFFSPEED = 4.375;
|
||||||
static constexpr DAngle PITCH_CNTRSINEOFFSET = DAngle90 / 8.;
|
static constexpr DAngle PITCH_CNTRSINEOFFSET = DAngle90 / 8.;
|
||||||
static constexpr DAngle PITCH_HORIZOFFCLIMB = DAngle::fromDeg(-38.);
|
static constexpr DAngle PITCH_HORIZOFFCLIMB = DAngle::fromDeg(-38.);
|
||||||
static constexpr DAngle PITCH_HORIZOFFPUSH = DAngle::fromDeg(0.4476);
|
static constexpr DAngle PITCH_HORIZOFFPUSH = DAngle::fromDeg(0.4476);
|
||||||
|
static InputPacket inputBuffer{};
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -110,9 +113,11 @@ void resetTurnHeldAmt()
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const int drink_amt, const bool allowstrafe, const double turnscale)
|
void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const InputOptions& inputOpts)
|
||||||
{
|
{
|
||||||
// set up variables.
|
// set up variables.
|
||||||
|
const bool allowstrafe = isDukeEngine() ? true : inputOpts.first;
|
||||||
|
const double turnscale = inputOpts.second;
|
||||||
const int keymove = 1 << int(!!(inputBuffer->actions & SB_RUN));
|
const int keymove = 1 << int(!!(inputBuffer->actions & SB_RUN));
|
||||||
const float hidspeed = float(getTicrateScale(YAW_TURNSPEEDS[2]) * turnscale);
|
const float hidspeed = float(getTicrateScale(YAW_TURNSPEEDS[2]) * turnscale);
|
||||||
const float scaleAdjustf = float(scaleAdjust);
|
const float scaleAdjustf = float(scaleAdjust);
|
||||||
|
@ -146,8 +151,8 @@ void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, I
|
||||||
currInput->svel += strafing * keymove * allowstrafe;
|
currInput->svel += strafing * keymove * allowstrafe;
|
||||||
|
|
||||||
// process RR's drunk state.
|
// process RR's drunk state.
|
||||||
if (isRR() && drink_amt >= 66 && drink_amt <= 87)
|
if (isRR() && inputOpts.first)
|
||||||
currInput->svel += drink_amt & 1 ? -currInput->fvel : currInput->fvel;
|
currInput->svel += inputOpts.first & 1 ? -currInput->fvel : currInput->fvel;
|
||||||
|
|
||||||
// add collected input to game's local input accumulation packet.
|
// add collected input to game's local input accumulation packet.
|
||||||
inputBuffer->fvel = clamp(inputBuffer->fvel + currInput->fvel, -(float)keymove, (float)keymove);
|
inputBuffer->fvel = clamp(inputBuffer->fvel + currInput->fvel, -(float)keymove, (float)keymove);
|
||||||
|
@ -157,6 +162,47 @@ void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, I
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Processes input and returns a packet if provided.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void clearLocalInputBuffer()
|
||||||
|
{
|
||||||
|
inputBuffer = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
void getInput(const double scaleAdjust, PlayerAngles* const plrAngles, InputPacket* packet)
|
||||||
|
{
|
||||||
|
if (paused || M_Active() || gamestate != GS_LEVEL || !plrAngles || !plrAngles->pActor)
|
||||||
|
{
|
||||||
|
clearLocalInputBuffer();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto inputOpts = gi->GetInputOptions();
|
||||||
|
InputPacket input{};
|
||||||
|
HIDInput hidInput{};
|
||||||
|
getHidInput(&hidInput);
|
||||||
|
ApplyGlobalInput(&hidInput, &inputBuffer);
|
||||||
|
gi->GetInput(&hidInput, &inputBuffer, &input, !SyncInput() ? scaleAdjust : 1., inputOpts);
|
||||||
|
|
||||||
|
// Directly update the camera angles if we're unsynchronised.
|
||||||
|
if (!SyncInput())
|
||||||
|
{
|
||||||
|
plrAngles->CameraAngles.Yaw += DAngle::fromDeg(input.avel);
|
||||||
|
plrAngles->CameraAngles.Pitch += DAngle::fromDeg(input.horz);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet)
|
||||||
|
{
|
||||||
|
*packet = inputBuffer;
|
||||||
|
clearLocalInputBuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// Adjust player's pitch by way of keyboard input.
|
// Adjust player's pitch by way of keyboard input.
|
||||||
|
|
|
@ -8,13 +8,11 @@ struct PlayerAngles
|
||||||
// Player viewing angles, separate from the camera.
|
// Player viewing angles, separate from the camera.
|
||||||
DRotator PrevViewAngles, ViewAngles;
|
DRotator PrevViewAngles, ViewAngles;
|
||||||
|
|
||||||
// Player camera angles, not for direct manipulation within the playsim.
|
|
||||||
DRotator CameraAngles;
|
|
||||||
|
|
||||||
// Holder of current yaw spin state for the 180 degree turn.
|
// Holder of current yaw spin state for the 180 degree turn.
|
||||||
DAngle YawSpin;
|
DAngle YawSpin;
|
||||||
|
|
||||||
friend FSerializer& Serialize(FSerializer& arc, const char* keyname, PlayerAngles& w, PlayerAngles* def);
|
friend FSerializer& Serialize(FSerializer& arc, const char* keyname, PlayerAngles& w, PlayerAngles* def);
|
||||||
|
friend void getInput(const double scaleAdjust, PlayerAngles* const plrAngles, InputPacket* packet);
|
||||||
|
|
||||||
// Prototypes.
|
// Prototypes.
|
||||||
void doPitchKeys(InputPacket* const input);
|
void doPitchKeys(InputPacket* const input);
|
||||||
|
@ -34,6 +32,10 @@ struct PlayerAngles
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render angle functions.
|
// Render angle functions.
|
||||||
|
const DRotator& getCameraAngles()
|
||||||
|
{
|
||||||
|
return CameraAngles;
|
||||||
|
}
|
||||||
DRotator getRenderAngles(const double interpfrac)
|
DRotator getRenderAngles(const double interpfrac)
|
||||||
{
|
{
|
||||||
// Get angles and return with clamped off pitch.
|
// Get angles and return with clamped off pitch.
|
||||||
|
@ -71,8 +73,8 @@ struct PlayerAngles
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Private data which should never be accessed publically.
|
// Private data which should never be accessed publicly.
|
||||||
DRotator PrevLerpAngles;
|
DRotator PrevLerpAngles, CameraAngles;
|
||||||
DCoreActor* pActor;
|
DCoreActor* pActor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -83,4 +85,5 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, PlayerAngles& w, P
|
||||||
void updateTurnHeldAmt(const double scaleAdjust);
|
void updateTurnHeldAmt(const double scaleAdjust);
|
||||||
bool isTurboTurnTime();
|
bool isTurboTurnTime();
|
||||||
void resetTurnHeldAmt();
|
void resetTurnHeldAmt();
|
||||||
void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const int drink_amt = 0, const bool allowstrafe = true, const double turnscale = 1);
|
void clearLocalInputBuffer();
|
||||||
|
void getInput(const double scaleAdjust, PlayerAngles* const plrAngles, InputPacket* packet = nullptr);
|
||||||
|
|
|
@ -17,6 +17,10 @@ struct sectortype;
|
||||||
struct tspritetype;
|
struct tspritetype;
|
||||||
class DCoreActor;
|
class DCoreActor;
|
||||||
struct MapRecord;
|
struct MapRecord;
|
||||||
|
struct PlayerAngles;
|
||||||
|
|
||||||
|
using InputOptions = std::pair<int, double>;
|
||||||
|
void processMovement(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const InputOptions& inputOpts);
|
||||||
|
|
||||||
struct GameStats
|
struct GameStats
|
||||||
{
|
{
|
||||||
|
@ -69,7 +73,6 @@ struct GameInterface
|
||||||
virtual void LoadTextureInfo(TilesetBuildInfo& info) {}
|
virtual void LoadTextureInfo(TilesetBuildInfo& info) {}
|
||||||
virtual void SetupSpecialTextures(TilesetBuildInfo&) {}
|
virtual void SetupSpecialTextures(TilesetBuildInfo&) {}
|
||||||
virtual void loadPalette();
|
virtual void loadPalette();
|
||||||
virtual void clearlocalinputstate() {}
|
|
||||||
virtual void UpdateScreenSize() {}
|
virtual void UpdateScreenSize() {}
|
||||||
virtual void FreeLevelData();
|
virtual void FreeLevelData();
|
||||||
virtual void FreeGameData() {}
|
virtual void FreeGameData() {}
|
||||||
|
@ -88,7 +91,8 @@ struct GameInterface
|
||||||
virtual void DrawPlayerSprite(const DVector2& origin, bool onteam) {}
|
virtual void DrawPlayerSprite(const DVector2& origin, bool onteam) {}
|
||||||
virtual void SetAmbience(bool on) {}
|
virtual void SetAmbience(bool on) {}
|
||||||
virtual void ExitFromMenu() { throw CExitEvent(0); }
|
virtual void ExitFromMenu() { throw CExitEvent(0); }
|
||||||
virtual void GetInput(const double scaleAdjust, InputPacket* packet = nullptr) {}
|
virtual void GetInput(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const InputOptions& inputOpts) { processMovement(hidInput, inputBuffer, currInput, scaleAdjust, inputOpts); }
|
||||||
|
virtual InputOptions GetInputOptions() { return std::make_pair(true, 1.); }
|
||||||
virtual void UpdateSounds() {}
|
virtual void UpdateSounds() {}
|
||||||
virtual void ErrorCleanup() {}
|
virtual void ErrorCleanup() {}
|
||||||
virtual void Startup() {}
|
virtual void Startup() {}
|
||||||
|
@ -105,6 +109,7 @@ struct GameInterface
|
||||||
virtual DAngle playerPitchMin() { return DAngle::fromDeg(57.375); }
|
virtual DAngle playerPitchMin() { return DAngle::fromDeg(57.375); }
|
||||||
virtual DAngle playerPitchMax() { return DAngle::fromDeg(-57.375); }
|
virtual DAngle playerPitchMax() { return DAngle::fromDeg(-57.375); }
|
||||||
virtual DCoreActor* getConsoleActor() = 0;
|
virtual DCoreActor* getConsoleActor() = 0;
|
||||||
|
virtual PlayerAngles* getConsoleAngles() = 0;
|
||||||
virtual void ToggleThirdPerson() { }
|
virtual void ToggleThirdPerson() { }
|
||||||
virtual void SwitchCoopView() { Printf("Unsupported command\n"); }
|
virtual void SwitchCoopView() { Printf("Unsupported command\n"); }
|
||||||
virtual void ToggleShowWeapon() { Printf("Unsupported command\n"); }
|
virtual void ToggleShowWeapon() { Printf("Unsupported command\n"); }
|
||||||
|
|
|
@ -142,7 +142,7 @@ void InputState::ClearAllInput()
|
||||||
{
|
{
|
||||||
ActionsToSend = 0;
|
ActionsToSend = 0;
|
||||||
crouch_toggle = false;
|
crouch_toggle = false;
|
||||||
gi->clearlocalinputstate(); // also clear game local input state.
|
clearLocalInputBuffer(); // also clear game local input state.
|
||||||
}
|
}
|
||||||
else if (gamestate == GS_LEVEL && crouch_toggle)
|
else if (gamestate == GS_LEVEL && crouch_toggle)
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
#include "i_interface.h"
|
#include "i_interface.h"
|
||||||
#include "texinfo.h"
|
#include "texinfo.h"
|
||||||
#include "texturemanager.h"
|
#include "texturemanager.h"
|
||||||
|
#include "gameinput.h"
|
||||||
|
|
||||||
CVAR(Bool, vid_activeinbackground, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
CVAR(Bool, vid_activeinbackground, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
CVAR(Bool, r_ticstability, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
CVAR(Bool, r_ticstability, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
|
@ -136,7 +137,7 @@ void G_BuildTiccmd(ticcmd_t* cmd)
|
||||||
}
|
}
|
||||||
cmd->ucmd = {};
|
cmd->ucmd = {};
|
||||||
I_GetEvent();
|
I_GetEvent();
|
||||||
gi->GetInput(!SyncInput() ? inputScale : 1., &cmd->ucmd);
|
getInput(inputScale, gi->getConsoleAngles(), &cmd->ucmd);
|
||||||
cmd->consistency = consistency[myconnectindex][(maketic / ticdup) % BACKUPTICS];
|
cmd->consistency = consistency[myconnectindex][(maketic / ticdup) % BACKUPTICS];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,7 +615,7 @@ void TryRunTics (void)
|
||||||
if (!SyncInput())
|
if (!SyncInput())
|
||||||
{
|
{
|
||||||
I_GetEvent();
|
I_GetEvent();
|
||||||
gi->GetInput(!SyncInput() ? inputScale : 1.);
|
getInput(inputScale, gi->getConsoleAngles());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#include "src/blood.cpp"
|
#include "src/blood.cpp"
|
||||||
#include "src/callback.cpp"
|
#include "src/callback.cpp"
|
||||||
#include "src/choke.cpp"
|
#include "src/choke.cpp"
|
||||||
#include "src/controls.cpp"
|
|
||||||
#include "src/db.cpp"
|
#include "src/db.cpp"
|
||||||
#include "src/dude.cpp"
|
#include "src/dude.cpp"
|
||||||
#include "src/endgame.cpp"
|
#include "src/endgame.cpp"
|
||||||
|
|
|
@ -111,7 +111,6 @@ struct GameInterface : public ::GameInterface
|
||||||
void app_init() override;
|
void app_init() override;
|
||||||
void SerializeGameState(FSerializer& arc) override;
|
void SerializeGameState(FSerializer& arc) override;
|
||||||
void loadPalette() override;
|
void loadPalette() override;
|
||||||
void clearlocalinputstate() override;
|
|
||||||
bool GenerateSavePic() override;
|
bool GenerateSavePic() override;
|
||||||
void FreeLevelData() override;
|
void FreeLevelData() override;
|
||||||
void FreeGameData() override;
|
void FreeGameData() override;
|
||||||
|
@ -120,7 +119,6 @@ struct GameInterface : public ::GameInterface
|
||||||
void MenuClosed() override;
|
void MenuClosed() override;
|
||||||
bool CanSave() override;
|
bool CanSave() override;
|
||||||
void UpdateSounds() override;
|
void UpdateSounds() override;
|
||||||
void GetInput(const double scaleAdjust, InputPacket* packet = nullptr) override;
|
|
||||||
void Ticker() override;
|
void Ticker() override;
|
||||||
void DrawBackground() override;
|
void DrawBackground() override;
|
||||||
void Startup() override;
|
void Startup() override;
|
||||||
|
@ -133,6 +131,7 @@ struct GameInterface : public ::GameInterface
|
||||||
DAngle playerPitchMin() override { return DAngle::fromDeg(54.575); }
|
DAngle playerPitchMin() override { return DAngle::fromDeg(54.575); }
|
||||||
DAngle playerPitchMax() override { return DAngle::fromDeg(-43.15); }
|
DAngle playerPitchMax() override { return DAngle::fromDeg(-43.15); }
|
||||||
DCoreActor* getConsoleActor() override { return gPlayer[myconnectindex].actor; }
|
DCoreActor* getConsoleActor() override { return gPlayer[myconnectindex].actor; }
|
||||||
|
PlayerAngles* getConsoleAngles() override { return &gPlayer[myconnectindex].Angles; }
|
||||||
void ToggleThirdPerson() override;
|
void ToggleThirdPerson() override;
|
||||||
void SwitchCoopView() override;
|
void SwitchCoopView() override;
|
||||||
void ToggleShowWeapon() override;
|
void ToggleShowWeapon() override;
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
#pragma once
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
/*
|
|
||||||
Copyright (C) 2020 Christoph Oelckers & Mitchell Richters
|
|
||||||
|
|
||||||
This file is part of Raze.
|
|
||||||
|
|
||||||
Raze is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License version 2
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include "ns.h" // Must come before everything else!
|
|
||||||
|
|
||||||
#include "blood.h"
|
|
||||||
#include "gamestate.h"
|
|
||||||
#include "inputstate.h"
|
|
||||||
#include "gamestruct.h"
|
|
||||||
#include "razemenu.h"
|
|
||||||
|
|
||||||
BEGIN_BLD_NS
|
|
||||||
|
|
||||||
static InputPacket gInput;
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::GetInput(const double scaleAdjust, InputPacket* packet)
|
|
||||||
{
|
|
||||||
if (paused || M_Active())
|
|
||||||
{
|
|
||||||
gInput = {};
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HIDInput hidInput;
|
|
||||||
getHidInput(&hidInput);
|
|
||||||
|
|
||||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
|
||||||
InputPacket input{};
|
|
||||||
|
|
||||||
ApplyGlobalInput(&hidInput, &gInput);
|
|
||||||
processMovement(&hidInput, &gInput, &input, scaleAdjust);
|
|
||||||
|
|
||||||
// Perform unsynchronised angle/horizon if not dead.
|
|
||||||
if (!SyncInput() && gamestate == GS_LEVEL)
|
|
||||||
{
|
|
||||||
pPlayer->Angles.CameraAngles.Yaw += DAngle::fromDeg(input.avel);
|
|
||||||
pPlayer->Angles.CameraAngles.Pitch += DAngle::fromDeg(input.horz);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet)
|
|
||||||
{
|
|
||||||
*packet = gInput;
|
|
||||||
gInput = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This is called from InputState::ClearAllInput and resets all static state being used here.
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::clearlocalinputstate()
|
|
||||||
{
|
|
||||||
gInput = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
END_BLD_NS
|
|
|
@ -27,7 +27,6 @@ struct GameInterface : public ::GameInterface
|
||||||
void app_init() override;
|
void app_init() override;
|
||||||
void loadPalette() override;
|
void loadPalette() override;
|
||||||
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
||||||
void clearlocalinputstate() override;
|
|
||||||
bool GenerateSavePic() override;
|
bool GenerateSavePic() override;
|
||||||
void PlayHudSound() override;
|
void PlayHudSound() override;
|
||||||
GameStats getStats() override;
|
GameStats getStats() override;
|
||||||
|
@ -40,7 +39,8 @@ struct GameInterface : public ::GameInterface
|
||||||
void SerializeGameState(FSerializer& arc) override;
|
void SerializeGameState(FSerializer& arc) override;
|
||||||
void ExitFromMenu() override;
|
void ExitFromMenu() override;
|
||||||
void DrawPlayerSprite(const DVector2& origin, bool onteam) override;
|
void DrawPlayerSprite(const DVector2& origin, bool onteam) override;
|
||||||
void GetInput(const double scaleAdjust, InputPacket* packet = nullptr) override;
|
void GetInput(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const InputOptions& inputOpts) override;
|
||||||
|
InputOptions GetInputOptions() override { return std::make_pair(ps[myconnectindex].drink_amt >= 66 && ps[myconnectindex].drink_amt <= 87, 1.); }
|
||||||
void UpdateSounds() override;
|
void UpdateSounds() override;
|
||||||
void Startup() override;
|
void Startup() override;
|
||||||
void DrawBackground() override;
|
void DrawBackground() override;
|
||||||
|
@ -53,6 +53,7 @@ struct GameInterface : public ::GameInterface
|
||||||
void LevelCompleted(MapRecord* map, int skill) 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;
|
bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override;
|
||||||
DCoreActor* getConsoleActor() override { return ps[myconnectindex].GetActor(); }
|
DCoreActor* getConsoleActor() override { return ps[myconnectindex].GetActor(); }
|
||||||
|
PlayerAngles* getConsoleAngles() override { return &ps[myconnectindex].Angles; }
|
||||||
void ToggleThirdPerson() override;
|
void ToggleThirdPerson() override;
|
||||||
void SwitchCoopView() override;
|
void SwitchCoopView() override;
|
||||||
void ToggleShowWeapon() override;
|
void ToggleShowWeapon() override;
|
||||||
|
|
|
@ -419,7 +419,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
|
||||||
double j = clamp(czoom * act->spr.scale.Y + abs(pp.truefz - act->getOffsetZ()) * REPEAT_SCALE, (1. / 3.), 2.);
|
double j = clamp(czoom * act->spr.scale.Y + abs(pp.truefz - act->getOffsetZ()) * REPEAT_SCALE, (1. / 3.), 2.);
|
||||||
|
|
||||||
auto const vec = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
auto const vec = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
||||||
auto const daang = -(pp.Angles.CameraAngles.Yaw - cang).Normalized360().Degrees();
|
auto const daang = -(pp.Angles.getCameraAngles().Yaw - cang).Normalized360().Degrees();
|
||||||
|
|
||||||
DrawTexture(twod, tileGetTexture(i), vec.X, vec.Y, DTA_TranslationIndex, TRANSLATION(Translation_Remap + setpal(&pp), act->spr.pal), DTA_CenterOffset, true,
|
DrawTexture(twod, tileGetTexture(i), vec.X, vec.Y, DTA_TranslationIndex, TRANSLATION(Translation_Remap + setpal(&pp), act->spr.pal), DTA_CenterOffset, true,
|
||||||
DTA_Rotate, daang, DTA_Color, shadeToLight(act->spr.shade), DTA_ScaleX, j, DTA_ScaleY, j, TAG_DONE);
|
DTA_Rotate, daang, DTA_Color, shadeToLight(act->spr.shade), DTA_ScaleX, j, DTA_ScaleY, j, TAG_DONE);
|
||||||
|
|
|
@ -44,9 +44,6 @@ EXTERN_CVAR(Float, m_yaw)
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
// State timer counters.
|
|
||||||
static InputPacket loc; // input accumulation buffer.
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// handles all HUD related input, i.e. inventory item selection and activation plus weapon selection.
|
// handles all HUD related input, i.e. inventory item selection and activation plus weapon selection.
|
||||||
|
@ -748,53 +745,18 @@ static void processVehicleInput(player_struct *p, HIDInput* const hidInput, Inpu
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void GameInterface::GetInput(const double scaleAdjust, InputPacket* packet)
|
void GameInterface::GetInput(HIDInput* const hidInput, InputPacket* const inputBuffer, InputPacket* const currInput, const double scaleAdjust, const InputOptions& inputOpts)
|
||||||
{
|
{
|
||||||
if (paused || gamestate != GS_LEVEL)
|
|
||||||
{
|
|
||||||
loc = {};
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HIDInput hidInput;
|
|
||||||
getHidInput(&hidInput);
|
|
||||||
|
|
||||||
auto const p = &ps[myconnectindex];
|
auto const p = &ps[myconnectindex];
|
||||||
InputPacket input{};
|
|
||||||
|
|
||||||
ApplyGlobalInput(&hidInput, &loc);
|
|
||||||
|
|
||||||
if (isRRRA() && (p->OnMotorcycle || p->OnBoat))
|
if (isRRRA() && (p->OnMotorcycle || p->OnBoat))
|
||||||
{
|
{
|
||||||
processVehicleInput(p, &hidInput, &loc, &input, scaleAdjust);
|
processVehicleInput(p, hidInput, inputBuffer, currInput, scaleAdjust);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
processMovement(&hidInput, &loc, &input, scaleAdjust, p->drink_amt);
|
processMovement(hidInput, inputBuffer, currInput, scaleAdjust, inputOpts);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SyncInput() && p->GetActor()->spr.extra > 0)
|
|
||||||
{
|
|
||||||
p->Angles.CameraAngles.Yaw += p->adjustavel(input.avel);
|
|
||||||
p->Angles.CameraAngles.Pitch += DAngle::fromDeg(input.horz);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet)
|
|
||||||
{
|
|
||||||
*packet = loc;
|
|
||||||
loc = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This is called from InputState::ClearAllInput and resets all static state being used here.
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::clearlocalinputstate()
|
|
||||||
{
|
|
||||||
loc = {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,6 @@ struct GameInterface : public ::GameInterface
|
||||||
const char* Name() override { return "Exhumed"; }
|
const char* Name() override { return "Exhumed"; }
|
||||||
void app_init() override;
|
void app_init() override;
|
||||||
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
||||||
void clearlocalinputstate() override;
|
|
||||||
void loadPalette() override;
|
void loadPalette() override;
|
||||||
bool GenerateSavePic() override;
|
bool GenerateSavePic() override;
|
||||||
void MenuOpened() override;
|
void MenuOpened() override;
|
||||||
|
@ -226,7 +225,6 @@ struct GameInterface : public ::GameInterface
|
||||||
void DrawBackground() override;
|
void DrawBackground() override;
|
||||||
void Render() override;
|
void Render() override;
|
||||||
//void DrawWeapons() override;
|
//void DrawWeapons() override;
|
||||||
void GetInput(const double scaleAdjust, InputPacket* packet = nullptr) override;
|
|
||||||
void Startup() override;
|
void Startup() override;
|
||||||
const char* GenericCheat(int player, int cheat) override;
|
const char* GenericCheat(int player, int cheat) override;
|
||||||
void NewGame(MapRecord *map, int skill, bool) override;
|
void NewGame(MapRecord *map, int skill, bool) override;
|
||||||
|
@ -236,6 +234,7 @@ struct GameInterface : public ::GameInterface
|
||||||
DAngle playerPitchMin() override { return DAngle::fromDeg(49.5); }
|
DAngle playerPitchMin() override { return DAngle::fromDeg(49.5); }
|
||||||
DAngle playerPitchMax() override { return DAngle::fromDeg(-49.5); }
|
DAngle playerPitchMax() override { return DAngle::fromDeg(-49.5); }
|
||||||
DCoreActor* getConsoleActor() override { return PlayerList[nLocalPlayer].pActor; }
|
DCoreActor* getConsoleActor() override { return PlayerList[nLocalPlayer].pActor; }
|
||||||
|
PlayerAngles* getConsoleAngles() override { return &PlayerList[nLocalPlayer].Angles; }
|
||||||
void ToggleThirdPerson() override;
|
void ToggleThirdPerson() override;
|
||||||
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
|
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double interpfrac) override;
|
||||||
int GetCurrentSkill() override;
|
int GetCurrentSkill() override;
|
||||||
|
|
|
@ -25,8 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
BEGIN_PS_NS
|
BEGIN_PS_NS
|
||||||
|
|
||||||
static InputPacket localInput;
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -39,53 +37,4 @@ void ClearSpaceBar(int nPlayer)
|
||||||
buttonMap.ClearButton(gamefunc_Open);
|
buttonMap.ClearButton(gamefunc_Open);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::GetInput(const double scaleAdjust, InputPacket* packet)
|
|
||||||
{
|
|
||||||
if (paused || M_Active())
|
|
||||||
{
|
|
||||||
localInput = {};
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HIDInput hidInput;
|
|
||||||
getHidInput(&hidInput);
|
|
||||||
|
|
||||||
ApplyGlobalInput(&hidInput, &localInput);
|
|
||||||
|
|
||||||
Player* pPlayer = &PlayerList[nLocalPlayer];
|
|
||||||
InputPacket input {};
|
|
||||||
|
|
||||||
processMovement(&hidInput, &localInput, &input, scaleAdjust);
|
|
||||||
|
|
||||||
if (!SyncInput() && gamestate == GS_LEVEL)
|
|
||||||
{
|
|
||||||
pPlayer->Angles.CameraAngles.Yaw += DAngle::fromDeg(input.avel);
|
|
||||||
pPlayer->Angles.CameraAngles.Pitch += DAngle::fromDeg(input.horz);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet)
|
|
||||||
{
|
|
||||||
*packet = localInput;
|
|
||||||
localInput = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This is called from InputState::ClearAllInput and resets all static state being used here.
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::clearlocalinputstate()
|
|
||||||
{
|
|
||||||
localInput = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
END_PS_NS
|
END_PS_NS
|
||||||
|
|
|
@ -803,7 +803,7 @@ static void analyzesprites(tspriteArray& tsprites, const DVector3& viewpos, doub
|
||||||
}
|
}
|
||||||
|
|
||||||
tsp->pos = pos;
|
tsp->pos = pos;
|
||||||
tsp->Angles.Yaw = pp->Angles.CameraAngles.Yaw;
|
tsp->Angles.Yaw = pp->Angles.getCameraAngles().Yaw;
|
||||||
//continue;
|
//continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1445,7 +1445,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
|
||||||
|
|
||||||
if (spnum >= 0)
|
if (spnum >= 0)
|
||||||
{
|
{
|
||||||
const auto daang = -(pp->Angles.CameraAngles.Yaw - cang).Normalized360().Degrees();
|
const auto daang = -(pp->Angles.getCameraAngles().Yaw - cang).Normalized360().Degrees();
|
||||||
auto vect = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
auto vect = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
||||||
|
|
||||||
// This repeat scale is correct.
|
// This repeat scale is correct.
|
||||||
|
|
|
@ -502,9 +502,6 @@ void InitRunLevel(void)
|
||||||
// send packets with player info
|
// send packets with player info
|
||||||
InitNetPlayerOptions();
|
InitNetPlayerOptions();
|
||||||
|
|
||||||
// Initialize Game part of network code
|
|
||||||
InitNetVars();
|
|
||||||
|
|
||||||
if (currentLevel)
|
if (currentLevel)
|
||||||
{
|
{
|
||||||
PlaySong(currentLevel->music, currentLevel->cdSongId);
|
PlaySong(currentLevel->music, currentLevel->cdSongId);
|
||||||
|
|
|
@ -1587,8 +1587,6 @@ void SyncStatMessage(void); // sync.c
|
||||||
int COVERsetgamemode(int mode, int xdim, int ydim, int bpp); // draw.c
|
int COVERsetgamemode(int mode, int xdim, int ydim, int bpp); // draw.c
|
||||||
void ScreenCaptureKeys(void); // draw.c
|
void ScreenCaptureKeys(void); // draw.c
|
||||||
|
|
||||||
void computergetinput(int snum,InputPacket *syn); // jplayer.c
|
|
||||||
|
|
||||||
void SetupMirrorTiles(void); // rooms.c
|
void SetupMirrorTiles(void); // rooms.c
|
||||||
bool FAF_Sector(sectortype* sect); // rooms.c
|
bool FAF_Sector(sectortype* sect); // rooms.c
|
||||||
double GetZadjustment(sectortype* sect,short hitag); // rooms.c
|
double GetZadjustment(sectortype* sect,short hitag); // rooms.c
|
||||||
|
@ -1858,7 +1856,6 @@ struct GameInterface : public ::GameInterface
|
||||||
void LoadTextureInfo(TilesetBuildInfo& info) override;
|
void LoadTextureInfo(TilesetBuildInfo& info) override;
|
||||||
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
void SetupSpecialTextures(TilesetBuildInfo& info) override;
|
||||||
void loadPalette() override;
|
void loadPalette() override;
|
||||||
void clearlocalinputstate() override;
|
|
||||||
void FreeLevelData() override;
|
void FreeLevelData() override;
|
||||||
bool GenerateSavePic() override;
|
bool GenerateSavePic() override;
|
||||||
void MenuSound(EMenuSounds snd) override;
|
void MenuSound(EMenuSounds snd) override;
|
||||||
|
@ -1869,7 +1866,7 @@ struct GameInterface : public ::GameInterface
|
||||||
void SetAmbience(bool on) override { if (on) StartAmbientSound(); else StopAmbientSound(); }
|
void SetAmbience(bool on) override { if (on) StartAmbientSound(); else StopAmbientSound(); }
|
||||||
void UpdateSounds() override;
|
void UpdateSounds() override;
|
||||||
void ErrorCleanup() override;
|
void ErrorCleanup() override;
|
||||||
void GetInput(const double scaleAdjust, InputPacket* input = nullptr) override;
|
InputOptions GetInputOptions() override { return std::make_pair(!Player[myconnectindex].sop, Player[myconnectindex].sop_control ? 3. / 1.40625 : 1.); }
|
||||||
void DrawBackground(void) override;
|
void DrawBackground(void) override;
|
||||||
void Ticker(void) override;
|
void Ticker(void) override;
|
||||||
void Render() override;
|
void Render() override;
|
||||||
|
@ -1882,6 +1879,7 @@ struct GameInterface : public ::GameInterface
|
||||||
void NewGame(MapRecord *map, int skill, bool) 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;
|
bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override;
|
||||||
DCoreActor* getConsoleActor() override { return Player[myconnectindex].actor; }
|
DCoreActor* getConsoleActor() override { return Player[myconnectindex].actor; }
|
||||||
|
PlayerAngles* getConsoleAngles() override { return &Player[myconnectindex].Angles; }
|
||||||
void ToggleThirdPerson() override;
|
void ToggleThirdPerson() override;
|
||||||
void SwitchCoopView() override;
|
void SwitchCoopView() override;
|
||||||
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double smoothRatio) override;
|
void processSprites(tspriteArray& tsprites, const DVector3& view, DAngle viewang, double smoothRatio) override;
|
||||||
|
|
|
@ -34,19 +34,12 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
|
|
||||||
BEGIN_SW_NS
|
BEGIN_SW_NS
|
||||||
|
|
||||||
static InputPacket loc;
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void InitNetVars(void)
|
|
||||||
{
|
|
||||||
loc = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitTimingVars(void)
|
void InitTimingVars(void)
|
||||||
{
|
{
|
||||||
PlayClock = 0;
|
PlayClock = 0;
|
||||||
|
@ -157,46 +150,4 @@ void processWeapon(PLAYER* const pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameInterface::GetInput(const double scaleAdjust, InputPacket *packet)
|
|
||||||
{
|
|
||||||
PLAYER* pp = &Player[myconnectindex];
|
|
||||||
|
|
||||||
if (paused || M_Active() || pp->actor == nullptr)
|
|
||||||
{
|
|
||||||
loc = {};
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HIDInput hidInput;
|
|
||||||
getHidInput(&hidInput);
|
|
||||||
|
|
||||||
InputPacket input {};
|
|
||||||
|
|
||||||
ApplyGlobalInput(&hidInput, &loc);
|
|
||||||
processMovement(&hidInput, &loc, &input, scaleAdjust, 0, !pp->sop, pp->sop_control ? 3. / 1.40625 : 1.);
|
|
||||||
|
|
||||||
if (!SyncInput())
|
|
||||||
{
|
|
||||||
pp->Angles.CameraAngles.Yaw += DAngle::fromDeg(input.avel);
|
|
||||||
pp->Angles.CameraAngles.Pitch += DAngle::fromDeg(input.horz);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet)
|
|
||||||
{
|
|
||||||
*packet = loc;
|
|
||||||
loc = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This is called from InputState::ClearAllInput and resets all static state being used here.
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GameInterface::clearlocalinputstate()
|
|
||||||
{
|
|
||||||
loc = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
END_SW_NS
|
END_SW_NS
|
||||||
|
|
|
@ -74,7 +74,6 @@ struct gNET
|
||||||
extern gNET gNet;
|
extern gNET gNet;
|
||||||
|
|
||||||
void UpdateInputs(void);
|
void UpdateInputs(void);
|
||||||
void InitNetVars(void);
|
|
||||||
void InitTimingVars(void);
|
void InitTimingVars(void);
|
||||||
void InitNetPlayerOptions(void);
|
void InitNetPlayerOptions(void);
|
||||||
inline void SW_SendMessage(short, const char*) {}
|
inline void SW_SendMessage(short, const char*) {}
|
||||||
|
|
|
@ -1160,7 +1160,6 @@ void GameInterface::SerializeGameState(FSerializer& arc)
|
||||||
InitTimingVars();
|
InitTimingVars();
|
||||||
PlayClock = SavePlayClock;
|
PlayClock = SavePlayClock;
|
||||||
defineSky(nullptr, pskybits_override, nullptr, 0, parallaxyscale_override / 8192.f);
|
defineSky(nullptr, pskybits_override, nullptr, 0, parallaxyscale_override / 8192.f);
|
||||||
InitNetVars();
|
|
||||||
|
|
||||||
screenpeek = myconnectindex;
|
screenpeek = myconnectindex;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue