From 5af8610c0c13dc5679fa39fd4aee3376454c37e5 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Fri, 12 Sep 2025 13:33:49 +0300 Subject: [PATCH] _some progerss? --- Source/Game/EngineUtilities.cs | 12 ++++++ Source/Game/GameMode/World.cs | 62 ++++++++++++++++------------ Source/Game/Player/PlayerInput2.cs | 19 +++++++-- Source/Game/Player/PlayerMovement.cs | 12 ++++-- 4 files changed, 72 insertions(+), 33 deletions(-) diff --git a/Source/Game/EngineUtilities.cs b/Source/Game/EngineUtilities.cs index ea0afe8..748baaf 100644 --- a/Source/Game/EngineUtilities.cs +++ b/Source/Game/EngineUtilities.cs @@ -22,4 +22,16 @@ public static class Utilities Profiler.EndEvent(); } } +} + +public static class VectorExtensions +{ + /*extension(Float3 value) + { + Float2 XY => new Float2(value.X, value.Y); + }*/ + + public static Float2 XY(this Float3 vec) => new Float2(vec.X, vec.Y); + + public static Vector2 XY(this Vector3 vec) => new Vector2(vec.X, vec.Y); } \ No newline at end of file diff --git a/Source/Game/GameMode/World.cs b/Source/Game/GameMode/World.cs index f6165a2..0ee17f3 100644 --- a/Source/Game/GameMode/World.cs +++ b/Source/Game/GameMode/World.cs @@ -117,12 +117,18 @@ public class World protected void CreateScene(string sceneNamePrefix, string sceneGuid) { - string physicsSceneName = $"{sceneNamePrefix}PhysicsScene"; - PhysicsScene localPhysicsScene = Physics.FindOrCreateScene(physicsSceneName); + if (false && sceneNamePrefix == "Client") + { + _scene = Level.Scenes.FirstOrDefault(x => !x.Name.StartsWith("Server")); + } + else + { + string physicsSceneName = $"{sceneNamePrefix}PhysicsScene"; + PhysicsScene localPhysicsScene = Physics.FindOrCreateScene(physicsSceneName); - Guid guid = JsonSerializer.ParseID(sceneGuid); - string guidStr = JsonSerializer.GetStringID(guid); - string sceneData = $@" + Guid guid = JsonSerializer.ParseID(sceneGuid); + string guidStr = JsonSerializer.GetStringID(guid); + string sceneData = $@" {{ ""ID"": ""{guidStr}"", ""TypeName"": ""FlaxEngine.SceneAsset"", @@ -145,25 +151,26 @@ public class World ] }}"; - { - var onSceneLoaded = (Scene loadedScene, Guid id) => { - if (guid == id) + var onSceneLoaded = (Scene loadedScene, Guid id) => { - loadedScene.PhysicsScene = localPhysicsScene; - //scene = loadedScene; - } - }; + if (guid == id) + { + loadedScene.PhysicsScene = localPhysicsScene; + //scene = loadedScene; + } + }; - try - { - Level.SceneLoaded += onSceneLoaded; - //Level.LoadScene(new SceneReference(guid)); - _scene = Level.LoadSceneFromBytes(Encoding.ASCII.GetBytes(sceneData)); - } - finally - { - Level.SceneLoaded -= onSceneLoaded; + try + { + Level.SceneLoaded += onSceneLoaded; + //Level.LoadScene(new SceneReference(guid)); + _scene = Level.LoadSceneFromBytes(Encoding.ASCII.GetBytes(sceneData)); + } + finally + { + Level.SceneLoaded -= onSceneLoaded; + } } } Assert.IsTrue(_scene); @@ -382,8 +389,8 @@ file class ServerWorld : World actorState.jumped = networkEvent.Message.ReadBoolean(); //inputState.frame = receivedFrame; - inputState.ViewDelta.X = networkEvent.Message.ReadSingle(); - inputState.ViewDelta.Y = networkEvent.Message.ReadSingle(); + //inputState.ViewDelta.X = networkEvent.Message.ReadSingle(); + //inputState.ViewDelta.Y = networkEvent.Message.ReadSingle(); inputState.MoveForward = networkEvent.Message.ReadSingle(); inputState.MoveRight = networkEvent.Message.ReadSingle(); inputState.Attack = networkEvent.Message.ReadBoolean(); @@ -400,8 +407,9 @@ file class ServerWorld : World uint playerId = networkEvent.Message.ReadUInt32(); float time = networkEvent.Message.ReadSingle(); float delay = Time.TimeSinceStartup - time; - inputState.ViewDelta.X = networkEvent.Message.ReadSingle(); - inputState.ViewDelta.Y = networkEvent.Message.ReadSingle(); + inputState.ViewDelta = Float2.Zero; + inputState.ViewAngles.X = networkEvent.Message.ReadSingle(); + inputState.ViewAngles.Y = networkEvent.Message.ReadSingle(); inputState.MoveForward = networkEvent.Message.ReadSingle(); inputState.MoveRight = networkEvent.Message.ReadSingle(); inputState.Attack = networkEvent.Message.ReadBoolean(); @@ -595,7 +603,9 @@ file class ClientWorld : World message.WriteUInt64(Frame); message.WriteUInt32(player.PlayerId); message.WriteSingle(Time.TimeSinceStartup); - message.WriteVector2(inputState.ViewDelta); + message.WriteSingle(movementState.viewAngles.X); + message.WriteSingle(movementState.viewAngles.Y); + //message.WriteSingle(movementState.viewAngles.Z); message.WriteSingle(inputState.MoveForward); message.WriteSingle(inputState.MoveRight); message.WriteBoolean(inputState.Attack); diff --git a/Source/Game/Player/PlayerInput2.cs b/Source/Game/Player/PlayerInput2.cs index c74bcad..87661b5 100644 --- a/Source/Game/Player/PlayerInput2.cs +++ b/Source/Game/Player/PlayerInput2.cs @@ -14,12 +14,14 @@ namespace Game; public struct PlayerInputState2 : IEquatable { public ulong Frame; - public Float2 ViewDelta; + public Float2 ViewAngles; public float MoveForward; public float MoveRight; public bool Attack; public bool Jump; + public Float2 ViewDelta; // Only used when gathering input for local player + /*public override bool Equals([NotNullWhen(true)] object obj) { if (obj is not PlayerInputState2 other) @@ -29,12 +31,19 @@ public struct PlayerInputState2 : IEquatable public bool Equals(PlayerInputState2 other) { - return Frame == other.Frame && ViewDelta == other.ViewDelta && MoveForward == other.MoveForward && MoveRight == other.MoveRight && Attack == other.Attack && Jump == other.Jump; + return Frame == other.Frame && ViewAngles == other.ViewAngles && MoveForward == other.MoveForward && MoveRight == other.MoveRight && Attack == other.Attack && Jump == other.Jump && ViewDelta == other.ViewDelta; } public static bool operator ==(PlayerInputState2 left, PlayerInputState2 right) => left.Equals(right); public static bool operator !=(PlayerInputState2 left, PlayerInputState2 right) => !left.Equals(right); + + // Apply delta to calculate the final view angles for this state + public void UpdateViewAngles(Float2 lastInputViewAngles) + { + ViewAngles = lastInputViewAngles + ViewDelta; + ViewDelta = Float2.Zero; + } } public interface IPlayerInput @@ -91,7 +100,7 @@ public class PlayerInput2 : IPlayerInput float turnSpeed = 100.0f; _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.ViewDelta += new Float2(Input.GetAxisRaw("LookRight"), Input.GetAxisRaw("LookUp")) * Time.DeltaTime * turnSpeed; _recordState.MoveForward = MathF.MaxMagnitude(_recordState.MoveForward, Input.GetAxis("Vertical")); _recordState.MoveRight = MathF.MaxMagnitude(_recordState.MoveRight, Input.GetAxis("Horizontal")); @@ -101,6 +110,10 @@ public class PlayerInput2 : IPlayerInput if (Input.GetKeyDown(KeyboardKeys.F)) Thread.Sleep(20); + + var asdf = Input.GetAxis("Vertical"); + if (asdf != 0.0f) + asdf = asdf; } public PlayerInputState2 GetState() => _recordState; diff --git a/Source/Game/Player/PlayerMovement.cs b/Source/Game/Player/PlayerMovement.cs index b6a9931..5837161 100644 --- a/Source/Game/Player/PlayerMovement.cs +++ b/Source/Game/Player/PlayerMovement.cs @@ -137,7 +137,11 @@ public class PlayerMovement : Script private PlayerActor playerActor; public Actor rootActor; - public Float3 viewAngles; + public Float3 viewAngles + { + get => movementState.viewAngles; + set => movementState.viewAngles = value; + } private Float3 viewAnglesLastFrame; public uint PlayerId => playerActor ? playerActor.PlayerId : 0; @@ -271,8 +275,6 @@ public class PlayerMovement : Script //if (Input is PlayerInputDemo /*&& currentInputFrame2 >= currentInputFrame*/) // return; - if (World.IsServer) - viewAngles = viewAngles; Input.SetFrame(World.Frame); Input.UpdateState(); @@ -473,6 +475,7 @@ public class PlayerMovement : Script inputState = { Frame = currentFrame, + ViewAngles = movementState.viewAngles.XY(), }, movementState = movementState, }; @@ -488,7 +491,8 @@ public class PlayerMovement : Script Input.SetFrame(currentFrame); Input.UpdateState(); - ApplyInputToCamera(frameInfo.inputState, true); + SetCameraEulerAngles(new Float3(frameInfo.inputState.ViewAngles.X, frameInfo.inputState.ViewAngles.Y, viewAngles.Z), true); + //ApplyInputToCamera(frameInfo.inputState, true); lastFrameInfo = frameInfo; } SimulatePlayerMovement(frameInfo.inputState, currentFrame);