This commit is contained in:
2025-03-20 21:56:55 +02:00
parent 294138eac4
commit e6270ff541
3 changed files with 39 additions and 13 deletions

View File

@@ -222,7 +222,7 @@ public class WorldStateManager
public void RecordPlayerInput(uint playerIndex, ulong frame, PlayerInputState2 inputState, PlayerMovementState movementState)
{
WorldState worldState = NetworkManager.server != null ? serverWorldState : clientWorldState;
WorldState worldState = /*NetworkManager.server != null*/IsServer ? serverWorldState : clientWorldState;
PlayerFrame[] playerFrames = worldState.playerFrameHistory[playerIndex];
PlayerFrame playerFrame = playerFrames[frame % 120];
@@ -562,10 +562,10 @@ public class WorldStateManager
{
IPlayerInput playerInput = playerActor.GetScript<PlayerMovement>().Input;
if (IsLocalClient && reportedPlayerId == NetworkManager.LocalPlayerClientId)
/*if (IsLocalClient && reportedPlayerId == NetworkManager.LocalPlayerClientId)
{ }
else
playerInput.SetFrame(reportedFrame);//playerInput.SetState(reportedFrame, inputState, actorState);
playerInput.SetFrame(reportedFrame);*///playerInput.SetState(reportedFrame, inputState, actorState);
if (!IsLocalClient && playerInput is PlayerInputNetwork2)
{

View File

@@ -67,8 +67,8 @@ public class PlayerInput2 : IPlayerInput
_recordState.ViewDelta += new Float2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y")) * sensitivity;
_recordState.ViewDelta += new Float2(Input.GetAxisRaw("LookRight"), Input.GetAxisRaw("LookUp")) * Time.DeltaTime * turnSpeed;
_recordState.MoveForward = Math.Max(_recordState.MoveForward, Input.GetAxis("Vertical"));
_recordState.MoveRight = Math.Max(_recordState.MoveRight, Input.GetAxis("Horizontal"));
_recordState.MoveForward = MathF.MaxMagnitude(_recordState.MoveForward, Input.GetAxis("Vertical"));
_recordState.MoveRight = MathF.MaxMagnitude(_recordState.MoveRight, Input.GetAxis("Horizontal"));
_recordState.Attack |= Input.GetAction("Attack");
_recordState.Jump |= Input.GetAction("Jump");
}
@@ -80,8 +80,28 @@ public class PlayerInput2 : IPlayerInput
public class PlayerInputNetwork2 : IPlayerInput
{
public void SetFrame(ulong frame) { }
public void UpdateState() { }
private uint _playerId;
private WorldStateManager _worldStateManager;
private ulong _frame;
private PlayerInputState2 _state;
public PlayerInputNetwork2(uint playerId, WorldStateManager worldStateManager)
{
_playerId = playerId;
_worldStateManager = worldStateManager;
}
public void SetFrame(ulong frame) => _frame = frame;
public void UpdateState()
{
_worldStateManager.GetPlayerInputState(_playerId, _frame, out _state);
}
public PlayerInputState2 GetState() { return default; }
public void ResetState() { }
public void ResetState()
{
_state = new PlayerInputState2();
}
}

View File

@@ -184,19 +184,24 @@ public class PlayerMovement : Script
PlayerId = playerId;
bool isServerScene = Scene.Name == "ServerScene";
if (isServerScene)
worldStateManager = NetworkManager.serverWorldStateManager;
else
worldStateManager = NetworkManager.clientWorldStateManager;
if (PlayerId == NetworkManager.LocalPlayerClientId && !isServerScene)//if (NetworkReplicator.GetObjectRole(this.Parent) == NetworkObjectRole.OwnedAuthoritative)// if (playerId == NetworkManager.LocalPlayerClientId)
{
Console.Print("local player?: " + playerId.ToString());
//string demoPath = System.IO.Path.Combine(AssetManager.DemoPath, $"{DateTimeOffset.Now.UtcTicks}.gdem");
//input = new PlayerInputLocal(playerActor, demoPath); // TODO: support recording
Input = new PlayerInput2();//new PlayerInputLocal(playerActor);
worldStateManager = NetworkManager.serverWorldStateManager;
}
else
{
Console.Print("network player: " + playerId.ToString());
Input = new PlayerInputNetwork2();
worldStateManager = NetworkManager.clientWorldStateManager;
Input = new PlayerInputNetwork2(playerId, worldStateManager);
}
Assert.IsTrue(worldStateManager != null);
}
@@ -281,6 +286,7 @@ public class PlayerMovement : Script
//if (Input is PlayerInputDemo /*&& currentInputFrame2 >= currentInputFrame*/)
// return;
Input.SetFrame(worldStateManager.ClientFrame);
Input.UpdateState();
/*if (input.frame > 0)
@@ -340,7 +346,7 @@ public class PlayerMovement : Script
//Input.OnFixedUpdate();
PlayerInputState2 inputState = Input.GetState();
if (Input is PlayerInputNetwork2)
if (false && Input is PlayerInputNetwork2)
{
#if false
bool canpredict = true;
@@ -620,7 +626,7 @@ public class PlayerMovement : Script
//Console.Print($"recording frame {input.frame}, client: {GameModeManager.ClientFrame}, server: {GameModeManager.ServerFrame}");
worldStateManager.RecordPlayerInput(PlayerId, worldStateManager.Frame, inputState, movementState); // MAYBE?
//Input.OnEndFrame();
Input.ResetState();
}
if (movementState.position.Length < 0.1)