From 6a0fb1a53cf77cad5c4bfbc61c4f944782319a76 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 9 Aug 2025 18:44:46 -0400 Subject: [PATCH] changed: UnitMovementHandler.cs is now functional (buggy) --- Assets/Player/Graphs/GrappleAimBT.asset | 8 +- .../Graph Tasks/UpdateMovementDirection.cs | 10 +- Assets/Scripts/Player/Player.cs | 2 - Assets/Scripts/Player/UnitMovementHandler.cs | 198 +++++++++++++++++- 4 files changed, 195 insertions(+), 23 deletions(-) diff --git a/Assets/Player/Graphs/GrappleAimBT.asset b/Assets/Player/Graphs/GrappleAimBT.asset index eeeb26b..cde9119 100644 --- a/Assets/Player/Graphs/GrappleAimBT.asset +++ b/Assets/Player/Graphs/GrappleAimBT.asset @@ -15,7 +15,7 @@ MonoBehaviour: _serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"_position":{"x":732.5245,"y":286.5939},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"0"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":-154.0485,"y":519.9156},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"1"},{"_action":{"fieldOfView":{"label":"FOV","value":60.0,"changeValue":1},"orbitPositionDamping":{"label":"Position Damping","newValue":{"x":0.2,"z":0.2},"changeX":1,"changeZ":1},"orbitFollowTop":{"label":"Top","changeHeight":1,"height":2.0,"changeRadius":1,"radius":2.0},"orbitFollowCenter":{"label":"Center","changeHeight":1,"height":1.5,"changeRadius":1,"radius":2.4},"orbitFollowBottom":{"label":"Bottom","changeHeight":1,"height":0.2,"changeRadius":1,"radius":0.8},"cameraOffset":{"label":"Screen Position","newValue":{"x":2.0,"y":0.5,"z":-1.0},"changeX":1,"changeY":1,"changeZ":1},"$type":"NodeCanvas.Tasks.Actions.ChangeCameraSettings"},"_position":{"x":-139.3679,"y":620.3029},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"2"},{"_action":{"actions":[{"eventName":{"_value":"Grapple - Aimed"},"delay":{},"$type":"NodeCanvas.Tasks.Actions.SendEvent"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c4e68b75-5129-428c-8177-abb7b38986f5"},"valueB":{"_value":2},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Aimed"},"delay":{},"$type":"NodeCanvas.Tasks.Actions.SendEvent"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c4e68b75-5129-428c-8177-abb7b38986f5"},"valueB":{"_value":2},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[PlayerFacingDirection, Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}],"$type":"NodeCanvas.Framework.ActionList"},"_position":{"x":91.0,"y":526.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"3"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":4},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":336.0,"y":511.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"4"},{"_action":{"boolVariable":{"_name":"_castHit"},"setTo":0,"$type":"NodeCanvas.Tasks.Actions.SetBoolean"},"_position":{"x":568.0,"y":515.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"policy":1,"dynamic":true,"_position":{"x":749.7742,"y":517.9701},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"6"},{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":247.0,"y":763.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"7"},{"_condition":{"castType":{"_value":4},"length":{"_value":20.0},"direction":{"_value":{"z":1.0}},"offset":{},"ignoreLayers":{"_value":{"value":8}},"width":{"_value":3.0},"size":{},"rotation":{},"drawGizmos":true,"outputHit":{"_name":"_hit"},"overrideAgent":{"_type":"UnityEngine.Transform","_name":"camera","_targetVariableID":"e1cfd0be-7f55-420d-bdd8-e72531fc61ba"},"$type":"Reset.CheckGenericObserver"},"_position":{"x":209.0,"y":870.0},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"8"},{"_action":{"boolVariable":{"_name":"_castHit"},"$type":"NodeCanvas.Tasks.Actions.SetBoolean"},"_position":{"x":127.0,"y":975.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"9"},{"_action":{"boolVariable":{"_name":"_castHit"},"setTo":0,"$type":"NodeCanvas.Tasks.Actions.SetBoolean"},"_position":{"x":320.0,"y":973.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"10"},{"_position":{"x":841.0,"y":848.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"11"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":540.0,"y":973.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"12"},{"_condition":{"valueA":{"_name":"_castHit"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":569.0,"y":1078.0},"$type":"NodeCanvas.BehaviourTrees.ConditionalEvaluator","$id":"13"},{"_action":{"actions":[{"raycastHit":{"_name":"_hit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{},"point":{"_name":"_hitPoint"},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"objectName":{"_value":"Hit Point"},"position":{"_name":"_hitPoint"},"rotation":{},"saveAs":{"_name":"_hitPointObject"},"$type":"NodeCanvas.Tasks.Actions.CreateGameObject"},{"relatedObject":{"_name":"_hitPointObject"},"weight":{"_value":0.15},"isMain":{"_value":true},"$type":"NodeCanvas.Tasks.Actions.UpdateObjectCameraTracking"}],"$type":"NodeCanvas.Framework.ActionList"},"_tag":"","_position":{"x":362.2634,"y":1221.254},"_comment":"","$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"14"},{"_position":{"x":852.0,"y":973.0},"$type":"NodeCanvas.BehaviourTrees.Inverter","$id":"15"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":4},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":799.0,"y":1035.0},"$type":"NodeCanvas.BehaviourTrees.Interruptor","$id":"16"},{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":902.6089,"y":1145.236},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"17"},{"_position":{"x":912.0,"y":1202.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"18"},{"_action":{"enableXAxis":{"label":"Input Axis X Enabled","changeValue":1},"enableYAxis":{"label":"Input Axis Y Enabled","changeValue":1},"$type":"NodeCanvas.Tasks.Actions.ChangeCameraSettings"},"_position":{"x":700.5458,"y":1355.854},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"19"},{"_action":{"actions":[{"actionName":{"_value":"Look"},"outputTo":{"_name":"_lookDir"},"$type":"NodeCanvas.Tasks.Actions.CheckInputValue`1[[UnityEngine.Vector2, @@ -35,14 +35,14 @@ MonoBehaviour: Pull"},"eventValue":{"_name":"_hitPoint"},"delay":{},"$type":"NodeCanvas.Tasks.Actions.SendEvent`1[[UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"_position":{"x":1672.0,"y":756.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"31"},{"failureRemap":1,"_position":{"x":400.0,"y":1531.0},"$type":"NodeCanvas.BehaviourTrees.Remapper","$id":"32"},{"_condition":{"conditions":[{"valueA":{"_name":"_castHit"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":4},"_isDisabled":true,"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_position":{"x":360.6637,"y":1617.808},"$type":"NodeCanvas.BehaviourTrees.Interruptor","$id":"33"},{"monitorMode":1,"_position":{"x":-312.8632,"y":1265.204},"$type":"NodeCanvas.BehaviourTrees.Monitor","$id":"34"},{"_position":{"x":-309.8632,"y":1368.204},"$type":"NodeCanvas.BehaviourTrees.Inverter","$id":"35"},{"_position":{"x":-307.8632,"y":1422.204},"$type":"NodeCanvas.BehaviourTrees.Selector","$id":"36"},{"_condition":{"castType":{"_value":4},"length":{"_value":20.0},"direction":{"_value":{"z":1.0}},"offset":{},"ignoreLayers":{"_value":{"value":8}},"width":{"_value":3.0},"size":{},"rotation":{},"drawGizmos":true,"outputHit":{},"overrideAgent":{"_type":"UnityEngine.Transform","_name":"camera","_targetVariableID":"e1cfd0be-7f55-420d-bdd8-e72531fc61ba"},"$type":"Reset.CheckGenericObserver"},"_position":{"x":-620.8632,"y":1503.204},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"37"},{"_position":{"x":-659.8632,"y":1633.204},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"38"},{"_action":{"boolVariable":{"_name":"_castHit"},"setTo":0,"$type":"NodeCanvas.Tasks.Actions.SetBoolean"},"_position":{"x":-914.8632,"y":1736.204},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"39"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":-726.2145,"y":1735.09},"$type":"NodeCanvas.BehaviourTrees.ConditionNode","$id":"40"},{"_action":{"boolVariable":{"_name":"_castHit"},"$type":"NodeCanvas.Tasks.Actions.SetBoolean"},"_position":{"x":-505.8632,"y":1739.204},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"41"},{"policy":1,"dynamic":true,"_position":{"x":-305.8632,"y":1532.204},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"42"},{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":-311.8632,"y":1674.204},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"43"},{"_action":{"actionName":{"_value":"Move"},"outputTo":{"_name":"_test"},"$type":"NodeCanvas.Tasks.Actions.CheckInputValue`1[[UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"_position":{"x":-326.9252,"y":1793.079},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"44"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":4},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":-159.1308,"y":1664.066},"$type":"NodeCanvas.BehaviourTrees.ConditionNode","$id":"45"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"25"},"_isDisabled":true,"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"28"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"29"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"6"},"_targetNode":{"$ref":"7"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"6"},"_targetNode":{"$ref":"11"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"7"},"_targetNode":{"$ref":"8"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"9"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"10"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"11"},"_targetNode":{"$ref":"12"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"11"},"_targetNode":{"$ref":"15"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"11"},"_targetNode":{"$ref":"24"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"12"},"_targetNode":{"$ref":"13"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"13"},"_targetNode":{"$ref":"14"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"15"},"_targetNode":{"$ref":"16"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"16"},"_targetNode":{"$ref":"17"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"17"},"_targetNode":{"$ref":"18"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"18"},"_targetNode":{"$ref":"19"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"18"},"_targetNode":{"$ref":"20"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"18"},"_targetNode":{"$ref":"21"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"21"},"_targetNode":{"$ref":"22"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"21"},"_targetNode":{"$ref":"23"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"25"},"_targetNode":{"$ref":"26"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"26"},"_targetNode":{"$ref":"27"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"29"},"_targetNode":{"$ref":"30"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"29"},"_targetNode":{"$ref":"31"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"32"},"_targetNode":{"$ref":"33"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"34"},"_targetNode":{"$ref":"35"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"35"},"_targetNode":{"$ref":"36"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"36"},"_targetNode":{"$ref":"37"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"36"},"_targetNode":{"$ref":"42"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"37"},"_targetNode":{"$ref":"38"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"38"},"_targetNode":{"$ref":"39"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"38"},"_targetNode":{"$ref":"40"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"38"},"_targetNode":{"$ref":"41"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"42"},"_targetNode":{"$ref":"43"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"42"},"_targetNode":{"$ref":"45"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"43"},"_targetNode":{"$ref":"44"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"camera":{"_name":"camera","_id":"e1cfd0be-7f55-420d-bdd8-e72531fc61ba","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Transform, - UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"facingDirection":{"_name":"facingDirection","_id":"c4e68b75-5129-428c-8177-abb7b38986f5","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[Reset.Player.Movement.PlayerFacingDirection, + UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"facingDirection":{"_name":"facingDirection","_id":"c4e68b75-5129-428c-8177-abb7b38986f5","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[PlayerFacingDirection, Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' _objectReferences: [] _graphSource: _version: 3.31 _category: _comments: - _translation: {x: 318, y: -176} - _zoomFactor: 1 + _translation: {x: 370, y: 304} + _zoomFactor: 0.37090367 _haltSerialization: 0 _externalSerializationFile: {fileID: 0} diff --git a/Assets/Scripts/Core/Graph Tasks/UpdateMovementDirection.cs b/Assets/Scripts/Core/Graph Tasks/UpdateMovementDirection.cs index 2954cdb..e498a2d 100644 --- a/Assets/Scripts/Core/Graph Tasks/UpdateMovementDirection.cs +++ b/Assets/Scripts/Core/Graph Tasks/UpdateMovementDirection.cs @@ -7,15 +7,7 @@ using Unity.Cinemachine; using Unity.Mathematics; using UnityEngine; using Reset.Movement; - -namespace Reset.Movement{ - public enum PlayerFacingDirection{ - TowardsTarget = 0, - MatchForward, - MatchCamera, - Static - } -} +using Reset.Units; namespace NodeCanvas.Tasks.Actions { diff --git a/Assets/Scripts/Player/Player.cs b/Assets/Scripts/Player/Player.cs index 4632e2a..54af215 100644 --- a/Assets/Scripts/Player/Player.cs +++ b/Assets/Scripts/Player/Player.cs @@ -5,12 +5,10 @@ using Sirenix.OdinInspector; public class Player : MonoBehaviour{ [HideInInspector] public PlayerControls controls; - [HideInInspector] public PlayerMovement movement; [HideInInspector] public new PlayerCamera camera; void Awake(){ controls = GetComponent(); - movement = GetComponent(); } void Start() diff --git a/Assets/Scripts/Player/UnitMovementHandler.cs b/Assets/Scripts/Player/UnitMovementHandler.cs index 387903c..74fd554 100644 --- a/Assets/Scripts/Player/UnitMovementHandler.cs +++ b/Assets/Scripts/Player/UnitMovementHandler.cs @@ -1,33 +1,215 @@ +using System; using System.Collections.Generic; using UnityEngine; using Drawing; +using Reset.Movement; using Sirenix.OdinInspector; -namespace Reset.Unit{ - public class UnitMovementHandler : MonoBehaviour{ - private CharacterController controller; +public enum PlayerFacingDirection{ + TowardsTarget = 0, + MatchForward, + MatchCamera, + Static +} + +namespace Reset.Units{ + // public interface IBuffSource{ - Unused good idea? + // public Object sourceObject(); + // public + // } + public class UnitMovementData{ + // Movement Direction + public Vector3 targetMoveDirection; + public PlayerFacingDirection moveFacing; + + public float accelerationSmoothing = 5f; + public float deaccelerationSmoothing = 5f; + public AnimationCurve deaccelerationCurve; // Move Speed - [ShowInInspector, ReadOnly] private float currentSpeed; - public float targetSpeed; - public float smoothing = 10f; + public float moveSpeedTarget = 15f; + public float moveSpeedSoothing = 10f; // Jumping - [ShowInInspector, ReadOnly] private float jumpPower; + [ShowInInspector, ReadOnly] public float jumpPower; public float jumpPowerDecay; // Gravity [ShowInInspector, ReadOnly] public float gravityPower; public float gravityMax; public float gravityAcceleration; + + // Rotation + public PlayerFacingDirection rotateFacing; + public float rotationSpeedTarget = 5f; + public float rotationSmoothing; + + // Smoothing + public Quaternion targetRotation; + public float currentRotSpeed; + } + + public class UnitMovementHandler : MonoBehaviour{ + // class MovementFloatModifier{ + // // IBuffSource source + // public float value; + // } + + // Debug viewing + + + // Smoothed Values + [ShowInInspector, ReadOnly] private float outputSpeed; + [ShowInInspector, ReadOnly] private Vector3 outputMoveDirection; + [ShowInInspector, ReadOnly] private Quaternion outputRotation; + [ShowInInspector, ReadOnly] private float outputRotationSpeed; + + private CharacterController controller; + public PlayerControls controls; + + [SerializeReference, ShowInInspector] + public UnitMovementData data = new UnitMovementData(); void Awake(){ - + controller = GetComponent(); } + void Update(){ + UpdateCurrentDirection(); + UpdateCurrentSpeed(); + UpdateCurrentGravity(); + UpdateCurrentRotation(); + // + DoMovement(); + } + + + private void UpdateCurrentDirection(){ + // Construct move direction + Vector3 targetDirection = data.targetMoveDirection; + + Debug.Log(controls); + // Get input value + Vector3 inputMovement = + new Vector3( + controls. + rawMoveInput.x, + 0f, + controls. + rawMoveInput.y); + + if (inputMovement.magnitude < .1f) { + inputMovement = Vector3.zero; + } + + // Change how movement is managed based on facing state + switch (data.moveFacing) { + case PlayerFacingDirection.TowardsTarget: + break; + case PlayerFacingDirection.MatchForward: // TODO: Recomment + // targetDirection = agent.transform.forward * inputMovement.magnitude; + targetDirection = inputMovement; + break; + case PlayerFacingDirection.MatchCamera: + targetDirection = Quaternion.Euler(Camera.main.transform.forward.DirectionTo(transform.forward)) * inputMovement; // NOTE: This used to be t: currentRotSpeed * Time.deltaTime. + // See how it feels with a hard set value and go fro there. + break; + case PlayerFacingDirection.Static: + break; + default: + throw new ArgumentOutOfRangeException(); + } + + // Remove Y from variables + Vector3 targetNoY = new Vector3(targetDirection.x, 0f, targetDirection.z); + Vector3 currentNoY = new Vector3(outputMoveDirection.x, 0f, outputMoveDirection.z); + + // Smooth movement + if (targetNoY.magnitude > currentNoY.magnitude) { + currentNoY = Vector3.Lerp(currentNoY, targetNoY,data.accelerationSmoothing * Time.deltaTime); + + } else { + float deaccelValue = data.deaccelerationCurve.Evaluate(inputMovement.magnitude); + + currentNoY = Vector3.Lerp(currentNoY, targetNoY, data.deaccelerationSmoothing * Time.deltaTime); + } + + // Commit move direction + outputMoveDirection = new Vector3(currentNoY.x, outputMoveDirection.y, currentNoY.z); + } + + private void UpdateCurrentSpeed(){ + outputSpeed = Mathf.Lerp(outputSpeed, data.moveSpeedTarget, data.moveSpeedSoothing * Time.deltaTime); + } + + private void UpdateCurrentGravity(){ + // Accelerate gravity + data.gravityPower += data.gravityAcceleration * Time.deltaTime; + data.gravityPower = Mathf.Min(data.gravityPower, data.gravityMax); + + // Apply a constant gravity if the player is grounded + if (controller.isGrounded) { + data.gravityPower = .1f; + } + + // Create the final gravity value + float gravityMoveDirection = data.jumpPower + Physics.gravity.y * data.gravityPower; + + // Commit gravity to move direction, ignoring XZ since those are done in UpdateMovementDirection + outputMoveDirection = new Vector3(outputMoveDirection.x, gravityMoveDirection, outputMoveDirection.z); + } + + private void UpdateCurrentRotation(){ + // Calculate rotation speed + outputRotationSpeed = Mathf.Lerp(outputRotationSpeed, data.rotationSpeedTarget, data.rotationSmoothing * Time.deltaTime); + + // Get input value + Vector3 inputMovement = new Vector3(controls.rawMoveInput.x, 0f, controls.rawMoveInput.y); + + switch (data.rotateFacing) { + case PlayerFacingDirection.TowardsTarget: + // Set rotation to just the direction of the target + + Debug.LogError("Not implemented..."); + + break; + case PlayerFacingDirection.MatchForward: + if (controls.rawMoveInput.magnitude < 0.01f) { break; } + + outputRotation = Quaternion.LookRotation(inputMovement) * + Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0f, null, 0f)); + + break; + case PlayerFacingDirection.MatchCamera: + // Craft a new rotation that flattens the camera's rotation to the ground + // Needed to keep the character from inheriting the camera's height-rotation + outputRotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0, null, 0)); + break; + case PlayerFacingDirection.Static: + outputRotation = transform.rotation; + break; + } + + // Set final rotation + transform.rotation = Quaternion.Lerp(transform.rotation, outputRotation, 10f * Time.deltaTime).Flatten(0, null, 0); + } + + public void DoMovement(){ + DoMovement(outputMoveDirection, outputSpeed); + } + public void DoMovement(Vector3 moveDir, float speed){ + Debug.Log( outputMoveDirection);; controller.Move(moveDir * speed * Time.deltaTime); } + + public void LateUpdate(){ + UpdateGravityLate(); + } + + private void UpdateGravityLate(){ + // Decay jump power + } } }