diff --git a/Assets/Player/Graphs/GrappleAimBT.asset b/Assets/Player/Graphs/GrappleAimBT.asset index acdf0c9..1998df9 100644 --- a/Assets/Player/Graphs/GrappleAimBT.asset +++ b/Assets/Player/Graphs/GrappleAimBT.asset @@ -12,15 +12,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3} m_Name: GrappleAimBT m_EditorClassIdentifier: - _serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"_position":{"x":730.5245,"y":284.5939},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"0"},{"_condition":{"actionName":{"_value":"Grapple"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":498.9515,"y":429.918},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"1"},{"_action":{"fieldOfView":{"label":"FOV","value":60.0,"changeValue":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.7,"changeRadius":1,"radius":2.0},"cameraOffset":{"label":"Screen - Position","newValue":{"x":2.0,"z":-1.0},"changeX":1,"changeZ":1},"$type":"NodeCanvas.Tasks.Actions.ChangeCameraSettings"},"_position":{"x":527.6321,"y":581.3029},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"2"},{"_action":{"waitTime":{"_value":0.3},"$type":"NodeCanvas.Tasks.Actions.Wait"},"_position":{"x":682.4366,"y":430.895},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"3"},{"_condition":{"actionName":{"_value":"Grapple"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":826.7462,"y":427.8908},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"4"},{"_action":{"fieldOfView":{"label":"FOV","changeValue":2},"orbitFollowTop":{"label":"Top","changeHeight":2,"changeRadius":2},"orbitFollowCenter":{"label":"Center","changeHeight":2,"changeRadius":2},"orbitFollowBottom":{"label":"Bottom","changeHeight":2,"changeRadius":2},"screenPosition":{"label":"Screen - Position","changeX":2,"changeY":2},"cameraOffset":{"label":"Screen Position","changeX":2,"changeY":2,"changeZ":2},"$type":"NodeCanvas.Tasks.Actions.ChangeCameraSettings"},"_position":{"x":880.8403,"y":568.1857},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"}],"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":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' + _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":359.9515,"y":502.918},"$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":184.6321,"y":659.3029},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"2"},{"policy":1,"_position":{"x":599.0,"y":507.0},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"3"},{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":470.0,"y":657.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"4"},{"_action":{"eventName":{"_value":"Grapple + Zoomed"},"delay":{},"$type":"NodeCanvas.Tasks.Actions.SendEvent"},"_position":{"x":438.0,"y":795.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"_action":{"waitTime":{"_value":0.1},"$type":"NodeCanvas.Tasks.Actions.Wait"},"_position":{"x":647.4366,"y":655.895},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"6"},{"failureRemap":1,"_position":{"x":839.0,"y":509.0},"$type":"NodeCanvas.BehaviourTrees.Remapper","$id":"7"},{"_condition":{"actionName":{"_value":"Grapple"},"actionPhase":{"_value":4},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_position":{"x":798.0,"y":585.0},"$type":"NodeCanvas.BehaviourTrees.Interruptor","$id":"8"},{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":838.9237,"y":701.0772},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"9"},{"_action":{"eventName":{"_value":"Grapple + Zoomed"},"delay":{},"$type":"NodeCanvas.Tasks.Actions.SendEvent"},"_position":{"x":807.9237,"y":837.0771},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"10"},{"_action":{"fieldOfView":{"label":"FOV","changeValue":2},"orbitFollowTop":{"label":"Top","changeHeight":2,"changeRadius":2},"orbitFollowCenter":{"label":"Center","changeHeight":2,"changeRadius":2},"orbitFollowBottom":{"label":"Bottom","changeHeight":2,"changeRadius":2},"screenPosition":{"label":"Screen + Position","changeX":2,"changeY":2},"cameraOffset":{"label":"Screen Position","changeX":2,"changeY":2,"changeZ":2},"$type":"NodeCanvas.Tasks.Actions.ChangeCameraSettings"},"_position":{"x":1186.84,"y":501.1857},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"11"}],"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":"7"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"11"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"5"},"$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":"9"},"_targetNode":{"$ref":"10"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' _objectReferences: [] _graphSource: _version: 3.31 _category: _comments: - _translation: {x: -21.80302, y: 59.90968} + _translation: {x: -285, y: -93} _zoomFactor: 1 _haltSerialization: 0 _externalSerializationFile: {fileID: 0} diff --git a/Assets/Player/Graphs/GroundedCheckBT.asset b/Assets/Player/Graphs/GroundedCheckBT.asset index 5ef36a4..80a6565 100644 --- a/Assets/Player/Graphs/GroundedCheckBT.asset +++ b/Assets/Player/Graphs/GroundedCheckBT.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3} m_Name: GroundedCheckBT m_EditorClassIdentifier: - _serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":476.0,"y":327.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"0"},{"_position":{"x":550.0,"y":433.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"1"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":458.0,"y":522.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"2"},{"_action":{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"inputVector3":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":396.0,"y":655.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"3"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":715.0,"y":523.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"4"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' + _serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"repeaterMode":2,"repeatTimes":{"_value":1},"_position":{"x":476.0,"y":327.0},"$type":"NodeCanvas.BehaviourTrees.Repeater","$id":"0"},{"_position":{"x":550.0,"y":433.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"1"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":458.0,"y":522.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"2"},{"_position":{"x":522.0,"y":632.0},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"3"},{"_action":{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"inputVector3":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":399.0,"y":775.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"4"},{"_action":{"airMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"inputVector3":{},"$type":"NodeCanvas.Tasks.Actions.SetAirMovement"},"_position":{"x":576.0,"y":776.0},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_position":{"x":715.0,"y":523.0},"$type":"NodeCanvas.BehaviourTrees.WaitUntil","$id":"6"}],"connections":[{"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.BehaviourTrees.BTConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{}},"derivedData":{"repeat":true,"$type":"NodeCanvas.BehaviourTrees.BehaviourTree+DerivedSerializationData"}}' _objectReferences: [] _graphSource: _version: 3.31 diff --git a/Assets/Player/Graphs/PlayerLocomotionFSM.asset b/Assets/Player/Graphs/PlayerLocomotionFSM.asset index 83a8d0f..956f347 100644 --- a/Assets/Player/Graphs/PlayerLocomotionFSM.asset +++ b/Assets/Player/Graphs/PlayerLocomotionFSM.asset @@ -12,16 +12,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f945e777233a59f4aba40aeca29093a6, type: 3} m_Name: PlayerLocomotionFSM m_EditorClassIdentifier: - _serializedGraph: '{"type":"NodeCanvas.StateMachines.FSM","nodes":[{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":10.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":0.3},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":559.9924,"y":711.7622},"$type":"NodeCanvas.StateMachines.ActionState","$id":"0"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":15.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":0.2},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":1161.288,"y":522.152},"$type":"NodeCanvas.StateMachines.ActionState","$id":"1"},{"_position":{"x":430.6569,"y":381.1322},"$type":"NodeCanvas.StateMachines.AnyState","$id":"2"},{"_position":{"x":465.0,"y":561.0},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"3"}],"connections":[{"_condition":{"actionName":{"_value":"Sprint"},"actionValue":{"_value":""},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"desiredVector3":{"_value":{"z":1.0}},"tolerance":{"_value":0.5},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"321e55c7-f93e-4667-a0dc-559eb61c6898","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean, + _serializedGraph: '{"type":"NodeCanvas.StateMachines.FSM","nodes":[{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":12.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":10.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c713d622-aafb-43e7-ae0e-ac0b86a85a37"},"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":559.9924,"y":711.7622},"$type":"NodeCanvas.StateMachines.ActionState","$id":"0"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":30.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"c713d622-aafb-43e7-ae0e-ac0b86a85a37"},"valueB":{"_value":2},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":916.0607,"y":852.7302},"$type":"NodeCanvas.StateMachines.ActionState","$id":"1"},{"_actionList":{"executionMode":1,"actions":[{"moveSpeed":{"_value":20.0},"moveDirection":{"_name":"groundMoveDirection","_targetVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6"},"$type":"NodeCanvas.Tasks.Actions.CalculateGroundedLocomotion"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5"},"valueB":{"_value":2.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_repeatStateActions":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":1161.288,"y":522.152},"$type":"NodeCanvas.StateMachines.ActionState","$id":"2"},{"_position":{"x":383.6569,"y":483.1322},"$type":"NodeCanvas.StateMachines.AnyState","$id":"3"},{"_position":{"x":419.0,"y":609.0},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"4"}],"connections":[{"_condition":{"actionName":{"_value":"Sprint"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"timeout":{"_value":0.1},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"checkAgainst":2,"checkAgainstValue":{"_value":{"z":1.0}},"desiredValue":{"_value":1.0},"tolerance":{"_value":0.32},"considerCameraRotation":{},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"321e55c7-f93e-4667-a0dc-559eb61c6898"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"321e55c7-f93e-4667-a0dc-559eb61c6898","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"groundMoveDirection":{"_name":"groundMoveDirection","_id":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"rotationSpeed":{"_name":"rotationSpeed","_id":"d888730f-97df-4288-bb99-1f6c8a34a7c5","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[System.Single, - mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}}}}' + mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"facingDirection":{"_name":"facingDirection","_id":"c713d622-aafb-43e7-ae0e-ac0b86a85a37","_isPublic":true,"$type":"NodeCanvas.Framework.Variable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}}}}' _objectReferences: [] _graphSource: _version: 3.31 _category: _comments: - _translation: {x: 1, y: -175} - _zoomFactor: 0.9967056 + _translation: {x: -258, y: -69} + _zoomFactor: 1 _haltSerialization: 0 _externalSerializationFile: {fileID: 0} diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset new file mode 100644 index 0000000..0143677 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1726182683, guid: a4865f1ab4504ed8a368670db22f409c, type: 3} + m_Name: AOTGenerationConfig + m_EditorClassIdentifier: + automateBeforeBuilds: 0 + deleteDllAfterBuilds: 1 + AutomateForAllAOTPlatforms: 1 + automateForPlatforms: 0900000014000000 + supportSerializedTypes: [] diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset.meta new file mode 100644 index 0000000..06f2bb9 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/AOTGenerationConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 516c69467762d38429c69cc7107c0555 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset new file mode 100644 index 0000000..4393db1 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 772478971, guid: a4865f1ab4504ed8a368670db22f409c, type: 3} + m_Name: ColorPaletteManager + m_EditorClassIdentifier: + colorPalettes: + - name: Country + showAlpha: 0 + colors: + - {r: 0.776, g: 0.651, b: 0.349, a: 1} + - {r: 0.863, g: 0.761, b: 0.631, a: 1} + - {r: 0.91, g: 0.831, b: 0.686, a: 1} + - {r: 0.961, g: 0.902, b: 0.788, a: 1} + - {r: 0.753, g: 0.714, b: 0.667, a: 1} + - {r: 0.478, g: 0.573, b: 0.431, a: 1} + - {r: 0.314, g: 0.427, b: 0.31, a: 1} + - {r: 0.596, g: 0.345, b: 0.235, a: 1} + - {r: 0.545, g: 0.329, b: 0.318, a: 1} + - {r: 0.647, g: 0.204, b: 0.227, a: 1} + - {r: 0.435, g: 0.161, b: 0.063, a: 1} + - {r: 0.357, g: 0.333, b: 0.278, a: 1} + - {r: 0.976, g: 0.98, b: 0.961, a: 1} + - {r: 0.165, g: 0.271, b: 0.11, a: 1} + - name: Beach + showAlpha: 0 + colors: + - {r: 0.996, g: 0.906, b: 0.459, a: 1} + - {r: 0.314, g: 0.592, b: 0.035, a: 1} + - {r: 0.486, g: 0.953, b: 0.875, a: 1} + - {r: 0.996, g: 0.82, b: 0.212, a: 1} + - {r: 1, g: 0.769, b: 0.165, a: 1} + - {r: 0.804, g: 0.835, b: 0.753, a: 1} + - {r: 1, g: 0.769, b: 0.165, a: 1} + - {r: 1, g: 0.702, b: 0.063, a: 1} + - {r: 1, g: 0.898, b: 0.569, a: 1} + - name: Fall + showAlpha: 0 + colors: + - {r: 0.82, g: 0.722, b: 0.318, a: 1} + - {r: 0.537, g: 0.192, b: 0.153, a: 1} + - {r: 0.996, g: 0.812, b: 0.012, a: 1} + - {r: 1, g: 0.431, b: 0.02, a: 1} + - {r: 0.937, g: 0.267, b: 0.094, a: 1} + - {r: 0.42, g: 0.212, b: 0.18, a: 1} + - {r: 0.992, g: 0.651, b: 0.004, a: 1} + - {r: 0.89, g: 0.353, b: 0.086, a: 1} + - {r: 1, g: 0.443, b: 0.004, a: 1} + - {r: 0.682, g: 0.275, b: 0.137, a: 1} + - {r: 0.306, g: 0.231, b: 0.114, a: 1} + - {r: 0.384, g: 0.416, b: 0.082, a: 1} + - {r: 0.165, g: 0.157, b: 0.008, a: 1} + - {r: 0.906, g: 0.635, b: 0.227, a: 1} + - {r: 0.82, g: 0.722, b: 0.318, a: 1} + - {r: 0.745, g: 0.435, b: 0.031, a: 1} + - {r: 0.765, g: 0.682, b: 0.569, a: 1} + - {r: 0.18, g: 0.149, b: 0.075, a: 1} + - {r: 0.702, g: 0.451, b: 0.059, a: 1} + - name: Passion + showAlpha: 0 + colors: + - {r: 0.925, g: 0.682, b: 0.624, a: 1} + - {r: 0.188, g: 0.114, b: 0.224, a: 1} + - {r: 0.349, g: 0.11, b: 0.231, a: 1} + - {r: 0.435, g: 0.267, b: 0.357, a: 1} + - name: Sepia + showAlpha: 0 + colors: + - {r: 0.353, g: 0.098, b: 0.02, a: 1} + - {r: 0.663, g: 0.188, b: 0.114, a: 1} + - {r: 0.906, g: 0.643, b: 0.082, a: 1} + - {r: 0.996, g: 0.839, b: 0.322, a: 1} + - {r: 0.486, g: 0.392, b: 0.02, a: 1} + - {r: 0.294, g: 0.235, b: 0.012, a: 1} + - name: Floral + showAlpha: 0 + colors: + - {r: 0.855, g: 0.518, b: 0.412, a: 1} + - {r: 0.827, g: 0.294, b: 0.333, a: 1} + - {r: 0.737, g: 0.118, b: 0.208, a: 1} + - {r: 0.549, g: 0.149, b: 0.235, a: 1} + - {r: 0.949, g: 0.925, b: 0.784, a: 1} + - {r: 0.945, g: 0.882, b: 0.69, a: 1} + - {r: 0.871, g: 0.812, b: 0.698, a: 1} + - {r: 0.4, g: 0.196, b: 0.243, a: 1} + - {r: 0.271, g: 0.157, b: 0.227, a: 1} + - name: Underwater + showAlpha: 0 + colors: + - {r: 0.663, g: 0.416, b: 0.733, a: 1} + - {r: 0.2, g: 0.6, b: 0.698, a: 1} + - {r: 0.11, g: 0.49, b: 0.698, a: 1} + - {r: 0.439, g: 0.627, b: 0.227, a: 1} + - {r: 0, g: 0.357, b: 0.604, a: 1} + - {r: 0.067, g: 0.271, b: 0.353, a: 1} + - name: Breeze + showAlpha: 0 + colors: + - {r: 0.706, g: 1, b: 0, a: 1} + - {r: 0.651, g: 1, b: 0.404, a: 1} + - {r: 0.122, g: 1, b: 0.514, a: 1} + - {r: 0.216, g: 0.894, b: 0.961, a: 1} + - {r: 0.4, g: 1, b: 0.882, a: 1} + - {r: 0.027, g: 0.792, b: 0.8, a: 1} + - name: Clovers + showAlpha: 0 + colors: + - {r: 0.431, g: 0.549, b: 0.102, a: 1} + - {r: 0.671, g: 0.714, b: 0.071, a: 1} + - {r: 0.969, g: 0.949, b: 0.831, a: 1} + - {r: 0.886, g: 0.902, b: 0.702, a: 1} + - {r: 0.753, g: 0.824, b: 0.627, a: 1} + - {r: 0.404, g: 0.6, b: 0.4, a: 1} + - name: Tropical + showAlpha: 0 + colors: + - {r: 0.953, g: 0.647, b: 0.804, a: 1} + - {r: 0.965, g: 0.741, b: 0.871, a: 1} + - {r: 0.949, g: 0.549, b: 0.643, a: 1} + - {r: 0.992, g: 0.659, b: 0.498, a: 1} + - {r: 0.976, g: 0.792, b: 0.729, a: 1} + - {r: 0.984, g: 0.855, b: 0.725, a: 1} + - {r: 0.259, g: 0.882, b: 0.663, a: 1} + - {r: 0.349, g: 0.753, b: 0.78, a: 1} + - {r: 0.725, g: 0.976, b: 0.91, a: 1} + - {r: 0.647, g: 0.745, b: 0.957, a: 1} + - {r: 0.725, g: 0.863, b: 0.973, a: 1} + - {r: 0.89, g: 0.945, b: 0.996, a: 1} diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset.meta new file mode 100644 index 0000000..40b4d6c --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ColorPaletteManager.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6a3216c4fd1c1a499b50f354c57f048 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset new file mode 100644 index 0000000..338ffe3 --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 188390376, guid: a4865f1ab4504ed8a368670db22f409c, type: 3} + m_Name: ImportSettingsConfig + m_EditorClassIdentifier: + automateBeforeBuild: 1 diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset.meta b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset.meta new file mode 100644 index 0000000..7b6786b --- /dev/null +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Editor/ImportSettingsConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6e0f897646bbb54b8306b7d6c6d955d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/InputSignal.asset b/Assets/Resources/InputSignal.asset new file mode 100644 index 0000000..be41e78 --- /dev/null +++ b/Assets/Resources/InputSignal.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b8d78c77b27bcee4792dedf004b44012, type: 3} + m_Name: InputSignal + m_EditorClassIdentifier: + _parameters: + - _ID: e1c42702-42ed-4f84-b52d-4e72b42a7de5 + _name: action + _type: UnityEngine.InputSystem.InputAction + - _ID: 95540415-c9c3-4b53-87b6-97dcfb13cf6e + _name: phase + _type: UnityEngine.InputSystem.InputActionPhase diff --git a/Assets/Resources/InputSignal.asset.meta b/Assets/Resources/InputSignal.asset.meta new file mode 100644 index 0000000..39b8c92 --- /dev/null +++ b/Assets/Resources/InputSignal.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69b5f370da7b862439a366000ea6e230 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index a8aac5f..3ffec2b 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -2921,8 +2921,8 @@ MonoBehaviour: m_EditorClassIdentifier: TargetOffset: {x: 0, y: 0, z: 0} TrackerSettings: - BindingMode: 5 - PositionDamping: {x: 0.5, y: 1, z: 0.2} + BindingMode: 4 + PositionDamping: {x: 0.7, y: 0.2, z: 0.7} AngularDampingMode: 0 RotationDamping: {x: 0, y: 0, z: 0} QuaternionDamping: 1 @@ -2942,11 +2942,11 @@ MonoBehaviour: RecenteringTarget: 2 HorizontalAxis: Value: 0 - Center: 41.584503 + Center: -0 Range: {x: -180, y: 180} Wrap: 1 Recentering: - Enabled: 0 + Enabled: 1 Wait: 0 Time: 60 Restrictions: 0 @@ -6582,6 +6582,7 @@ GameObject: - component: {fileID: 1992890475} - component: {fileID: 1992890472} - component: {fileID: 1992890471} + - component: {fileID: 1992890480} - component: {fileID: 1992890474} - component: {fileID: 1992890476} - component: {fileID: 1992890478} @@ -6606,6 +6607,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2d0c4f0666ff5f245bf2a135c782127b, type: 3} m_Name: m_EditorClassIdentifier: + inputSignal: {fileID: 11400000, guid: 69b5f370da7b862439a366000ea6e230, type: 2} rawMoveInput: {x: 0, y: 0} rawLookInput: {x: 0, y: 0} graph: {fileID: 0} @@ -6750,14 +6752,27 @@ MonoBehaviour: _serializedExposedParameters: [] _boundGraphSerialization: '{"type":"NodeCanvas.StateMachines.FSM","nodes":[{"_onEnterList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"valueB":{"_value":4},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},{"valueA":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"valueB":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"_isDisabled":true,"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[UnityEngine.Vector3, - UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldExit":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Ground - Idle","_position":{"x":279.7396,"y":305.6144},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"0"},{"_onEnterList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"Operation":2,"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetInt"}]},"_onUpdateList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"$type":"NodeCanvas.Tasks.Actions.CalculateAirMovement"}]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldUpdate":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Airborn - (Actionable)","_position":{"x":665.0512,"y":-148.5536},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"1"},{"_onEnterList":{"executionMode":1,"actions":[{"jumpStrength":{"_value":18.0},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"standStillJumpStrength":{},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"currentVelocityInheritence":{"_value":0.2},"directionalForce":{"_value":{"y":1.0,"z":0.3}},"directionalForceStrength":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Wall - Climb Jump","_position":{"x":1041.998,"y":-349.5591},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"2"},{"_onEnterList":{"executionMode":1,"actions":[{"jumpStrength":{},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"standStillJumpStrength":{},"jumpPower":{},"currentVelocityInheritence":{},"directionalForce":{},"directionalForceStrength":{},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Wall - Jump","_position":{"x":860.4374,"y":-478.9596},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"3"},{"_onEnterList":{"executionMode":1,"actions":[{"jumpStrength":{"_value":12.0},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"standStillJumpStrength":{"_value":1.0},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"currentVelocityInheritence":{"_value":1.0},"directionalForce":{},"directionalForceStrength":{},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Standard - Jump","_position":{"x":879.2953,"y":92.40906},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"4"},{"_onEnterList":{"executionMode":1,"actions":[]},"_onUpdateList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"$type":"NodeCanvas.Tasks.Actions.CalculateAirMovement"}]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldUpdate":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Airborn","_position":{"x":145.816,"y":-27.25839},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"5"},{"_onEnterList":{"executionMode":1,"actions":[{"jumpStrength":{"_value":10.0},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"standStillJumpStrength":{},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"currentVelocityInheritence":{"_value":0.3},"directionalForce":{"_value":{"x":1.0,"z":1.0}},"directionalForceStrength":{"_value":10.0},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Wall - Jump","_position":{"x":328.7507,"y":-416.5261},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"6"},{"_onEnterList":{"actions":[{"valueA":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetVector3"},{"valueA":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldUpdate":true,"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Stick","_position":{"x":1341.099,"y":82.87861},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"7"},{"_actionList":{"executionMode":1,"actions":[]},"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":1100.465,"y":268.9976},"$type":"NodeCanvas.StateMachines.ActionState","$id":"8"},{"_subFSM":{"_value":1},"_variablesMap":[{"_targetSubGraphVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6","_canRead":true,"_canWrite":true,"_type":"UnityEngine.Vector3","_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},{"_targetSubGraphVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5","_canRead":true,"_canWrite":true,"_type":"System.Single","_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"}],"_position":{"x":-257.669,"y":558.3375},"$type":"NodeCanvas.StateMachines.ConcurrentSubFSM"},{"_conditionList":{"conditions":[{"_invert":true,"$type":"NodeCanvas.Tasks.Conditions.DebugCondition"}]},"_actionList":{"executionMode":1,"actions":[{"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"gravityAcceleration":{"_value":1.0},"gravityMax":{"_value":8.0},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpPowerDecay":{"_value":2.0},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"rotationSpeed":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"rotationSmoothing":{"_value":1.0},"gravityPower":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"$type":"NodeCanvas.Tasks.Actions.ProcessMovement"}]},"_position":{"x":-260.1776,"y":405.5469},"$type":"NodeCanvas.StateMachines.OnFSMEnter"},{"_subTree":{"_value":2},"_position":{"x":-43.41095,"y":552.2315},"$type":"NodeCanvas.StateMachines.ConcurrentSubTree"},{"_subTree":{"_value":3},"_tag":"","_position":{"x":451.3007,"y":22.14104},"_comment":"","$type":"NodeCanvas.StateMachines.ConcurrentSubTree"}],"connections":[{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"eventName":{"_value":"ForwardRay"},"value":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckEventValue`1[[System.Boolean, - mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},{"actionName":{"_value":"Jump"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"actionName":{"_value":"Jump"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},{"eventName":{"_value":"RightRay"},"$type":"NodeCanvas.Tasks.Conditions.CheckEvent"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInt"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"actionName":{"_value":"Jump"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},{"eventName":{"_value":"LeftRay"},"$type":"NodeCanvas.Tasks.Conditions.CheckEvent"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Stick"},"actionValue":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"7"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"5"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"6"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"timeout":{"_value":1.0},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},"_sourceNode":{"$ref":"7"},"_targetNode":{"$ref":"8"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"619300a4-be8b-4ad4-ba2a-978468094ba2","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean, + UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldExit":true,"_color":{"r":1.0,"g":1.0,"b":1.0,"a":1.0},"_name":"Grounded","_position":{"x":279.7396,"y":305.6144},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"0"},{"_onEnterList":{"executionMode":1,"actions":[]},"_onUpdateList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.CalculateAirMovement"}]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldUpdate":true,"_color":{"r":0.4980392,"g":1.0,"b":0.9801429,"a":1.0},"_name":"Airborn + (Actionable)","_position":{"x":682.0512,"y":-146.5536},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"1"},{"_onEnterList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":12.5},"standStillJumpStrength":{},"currentVelocityInheritence":{"_value":0.2},"directionalForce":{"_value":{"y":1.0,"z":0.3}},"directionalForceStrength":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"Operation":2,"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetInt"}]},"foldEnter":true,"foldExit":true,"_color":{"r":0.4117647,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Wall + Climb Jump","_position":{"x":928.3156,"y":-465.0193},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"2"},{"_actionList":{"executionMode":1,"actions":[{"raycastHit":{"_name":"_wallJumpHit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{"_name":"_wallJumpHitNormal"},"point":{},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"}]},"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":477.2476,"y":-488.2733},"$type":"NodeCanvas.StateMachines.ActionState","$id":"3"},{"_onEnterList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":16.0},"standStillJumpStrength":{},"currentVelocityInheritence":{},"directionalForce":{"_value":{"x":-1.0,"y":0.1,"z":0.5}},"directionalForceStrength":{"_value":0.888},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"Operation":2,"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetInt"}]},"foldEnter":true,"foldExit":true,"_color":{"r":0.4117647,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Right + Wall Jump","_position":{"x":285.3196,"y":-670.1414},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"4"},{"_actionList":{"executionMode":1,"actions":[{"raycastHit":{"_name":"_wallJumpHit"},"transform":{},"collider":{},"gameObject":{"_name":""},"distance":{},"normal":{"_name":"_wallJumpHitNormal"},"point":{},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"signalDefinition":{},"argumentsMap":{},"$type":"NodeCanvas.Tasks.Conditions.InvokeSignal"}]},"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_position":{"x":296.1901,"y":-286.1208},"$type":"NodeCanvas.StateMachines.ActionState","$id":"5"},{"_onEnterList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":16.0},"standStillJumpStrength":{},"currentVelocityInheritence":{"_value":0.3},"directionalForce":{"_value":{"x":1.0,"y":0.1,"z":0.5}},"directionalForceStrength":{"_value":0.839},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"Operation":2,"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetInt"}]},"foldEnter":true,"foldExit":true,"_color":{"r":0.4132327,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Left + Wall Jump","_position":{"x":112.6937,"y":-458.72},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"6"},{"_onEnterList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":12.0},"standStillJumpStrength":{"_value":1.0},"currentVelocityInheritence":{"_value":1.0},"directionalForce":{},"directionalForceStrength":{},"$type":"NodeCanvas.Tasks.Actions.AddJump"},{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"Operation":2,"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetInt"}]},"foldEnter":true,"foldExit":true,"_color":{"r":0.4117647,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Standard + Jump","_position":{"x":899.8688,"y":90.13001},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"7"},{"_onEnterList":{"executionMode":1,"actions":[]},"_onUpdateList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"$type":"NodeCanvas.Tasks.Actions.CalculateAirMovement"}]},"_onExitList":{"executionMode":1,"actions":[]},"foldEnter":true,"foldUpdate":true,"_color":{"r":0.5019608,"g":1.0,"b":0.9803922,"a":1.0},"_name":"Airborn","_position":{"x":105.7695,"y":-10.21167},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"8"},{"_onEnterList":{"actions":[{"raycastHit":{"_name":"_wallStickHit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{"_name":"_wallStickHitNormal"},"point":{"_name":"_wallStickHitPoint"},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"targetProperty":1,"forcePositionChange":{},"targetValue":{"_value":{"y":-45.0}},"relativeToSelf":{},"relativeValue":{"_name":"_wallStickHitNormal"},"changeInstantly":{"_value":true},"smoothing":{"_value":0.5},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"},{"valueA":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"valueB":{"_value":3},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},{"valueA":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetVector3"},{"valueA":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"forcePositionChange":{},"targetValue":{"_value":{"y":-1.0}},"relativeToSelf":{"_value":true},"relativeValue":{},"changeInstantly":{},"smoothing":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"}]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"valueB":{"_value":10.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"foldEnter":true,"_color":{"r":0.4980392,"g":1.0,"b":0.9803922,"a":1.0},"_name":"Left + Wall Stick","_position":{"x":1248.076,"y":207.5006},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"9"},{"_onEnterList":{"executionMode":1,"actions":[]},"_onUpdateList":{"executionMode":1,"actions":[]},"_onExitList":{"executionMode":1,"actions":[]},"foldUpdate":true,"_color":{"r":0.4980392,"g":1.0,"b":0.9803922,"a":1.0},"_name":"Wall + Slide","_position":{"x":1027.8,"y":453.9219},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"10"},{"_actionList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":18.0},"standStillJumpStrength":{},"currentVelocityInheritence":{"_value":0.2},"directionalForce":{"_value":{"x":-0.5,"y":0.5}},"directionalForceStrength":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.AddJump"}]},"_color":{"r":0.4117647,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Left + Wall Launch","_position":{"x":1608.682,"y":-194.6805},"$type":"NodeCanvas.StateMachines.ActionState","$id":"11"},{"_name":"back + to airborne","_position":{"x":1218.379,"y":-228.1178},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"12"},{"_onEnterList":{"actions":[{"raycastHit":{"_name":"_wallStickHit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{"_name":"_wallStickHitNormal"},"point":{"_name":"_wallStickHitPoint"},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"targetProperty":1,"forcePositionChange":{},"targetValue":{"_value":{"y":-45.0}},"relativeToSelf":{},"relativeValue":{"_name":"_wallStickHitNormal"},"changeInstantly":{"_value":true},"smoothing":{"_value":0.5},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"},{"valueA":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"valueB":{"_value":3},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},{"valueA":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetVector3"},{"valueA":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"}]},"_onUpdateList":{"executionMode":1,"actions":[{"valueA":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"valueB":{},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"forcePositionChange":{},"targetValue":{"_value":{"y":-1.0}},"relativeToSelf":{"_value":true},"relativeValue":{},"changeInstantly":{},"smoothing":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"}]},"_onExitList":{"executionMode":1,"actions":[{"valueA":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"valueB":{"_value":10.0},"$type":"NodeCanvas.Tasks.Actions.SetFloat"},{"valueA":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"valueB":{"_value":1},"$type":"NodeCanvas.Tasks.Actions.SetVariable`1[[Reset.Player.Movement.PlayerFacingDirection, + Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"}]},"foldEnter":true,"foldUpdate":true,"foldExit":true,"_color":{"r":0.4980392,"g":1.0,"b":0.9803922,"a":1.0},"_name":"Right + Wall Stick","_position":{"x":1472.857,"y":367.8537},"$type":"NodeCanvas.StateMachines.SuperActionState","$id":"13"},{"_actionList":{"executionMode":1,"actions":[{"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpStrength":{"_value":18.0},"standStillJumpStrength":{},"currentVelocityInheritence":{"_value":0.2},"directionalForce":{"_value":{"x":0.5,"y":0.5}},"directionalForceStrength":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.AddJump"}]},"_color":{"r":0.4117647,"g":0.945098,"b":0.254902,"a":1.0},"_name":"Right + Wall Launch","_position":{"x":1519.156,"y":-282.6531},"$type":"NodeCanvas.StateMachines.ActionState","$id":"14"},{"_position":{"x":-206.0027,"y":131.3442},"$type":"NodeCanvas.StateMachines.EmptyState","$id":"15"},{"_actionList":{"actions":[{"raycastHit":{"_name":"_wallStickHit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{"_name":"_wallStickHitNormal"},"point":{"_name":"_wallStickHitPoint"},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"forcePositionChange":{},"targetValue":{"_name":"_wallStickHitPoint"},"relativeToSelf":{},"relativeValue":{},"changeInstantly":{"_value":true},"smoothing":{"_value":0.5},"_isDisabled":true,"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"},{"targetProperty":1,"forcePositionChange":{},"targetValue":{"_name":"_wallStickHitNormal"},"relativeToSelf":{},"relativeValue":{"_value":{"y":45.0}},"changeInstantly":{"_value":true},"smoothing":{"_value":0.5},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"}]},"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Right + Side Stick","_position":{"x":1758.793,"y":576.0048},"$type":"NodeCanvas.StateMachines.ActionState","$id":"16"},{"_actionList":{"actions":[{"raycastHit":{"_name":"_wallStickHit"},"transform":{},"collider":{},"gameObject":{},"distance":{},"normal":{"_name":"_wallStickHitNormal"},"point":{"_name":"_wallStickHitPoint"},"$type":"NodeCanvas.Tasks.Actions.DecomposeRaycastHit"},{"targetProperty":1,"forcePositionChange":{},"targetValue":{"_name":"_wallStickHitNormal"},"relativeToSelf":{},"relativeValue":{"_value":{"y":-45.0}},"changeInstantly":{"_value":true},"smoothing":{"_value":0.5},"$type":"NodeCanvas.Tasks.Actions.ChangeAgentTransform"}]},"_color":{"r":1.0,"g":0.42,"b":0.32,"a":1.0},"_name":"Left + Side Stick","_position":{"x":1742.802,"y":691.8009},"$type":"NodeCanvas.StateMachines.ActionState","$id":"17"},{"_subFSM":{"_value":1},"_variablesMap":[{"_targetSubGraphVariableID":"16ae5ce4-097a-4c21-94a5-2c5d9ce73eb6","_canRead":true,"_canWrite":true,"_type":"UnityEngine.Vector3","_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},{"_targetSubGraphVariableID":"d888730f-97df-4288-bb99-1f6c8a34a7c5","_canRead":true,"_canWrite":true,"_type":"System.Single","_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},{"_targetSubGraphVariableID":"c713d622-aafb-43e7-ae0e-ac0b86a85a37","_canRead":true,"_canWrite":true,"_type":"Reset.Player.Movement.PlayerFacingDirection","_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"}],"_position":{"x":81.68353,"y":697.9875},"$type":"NodeCanvas.StateMachines.ConcurrentSubFSM"},{"_conditionList":{"conditions":[{"_invert":true,"$type":"NodeCanvas.Tasks.Conditions.DebugCondition"}]},"_actionList":{"executionMode":1,"actions":[{"groundMoveDirection":{"_name":"groundMoveDirection","_targetVariableID":"a2c4fe25-9549-4bdd-8cec-2dbfc4a8856f"},"airMoveDirection":{"_name":"airMoveDirection","_targetVariableID":"2fc91db6-09dd-4a1f-9195-426a0c44de31"},"gravityAcceleration":{"_value":1.0},"gravityMax":{"_value":8.0},"jumpPower":{"_name":"jumpPower","_targetVariableID":"9a82efee-e317-423c-ad6e-5ef7e6145396"},"jumpPowerDecay":{"_value":2.0},"playerFacingDirection":{"_name":"facingDirection","_targetVariableID":"ff039cd9-e306-4c88-84db-54cbd3708ed5"},"rotationSpeed":{"_name":"rotationSpeed","_targetVariableID":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611"},"rotationSmoothing":{"_value":1.0},"gravityPower":{"_name":"gravityPower","_targetVariableID":"2221dc20-d9b3-4781-bd23-0b2038a7ff5e"},"$type":"NodeCanvas.Tasks.Actions.ProcessMovement"}]},"_position":{"x":79.17493,"y":544.9238},"$type":"NodeCanvas.StateMachines.OnFSMEnter"},{"_subTree":{"_value":2},"_position":{"x":-9.058411,"y":174.6085},"$type":"NodeCanvas.StateMachines.ConcurrentSubTree"},{"_subTree":{"_value":3},"_tag":"","_position":{"x":443.0804,"y":78.13696},"_comment":"","$type":"NodeCanvas.StateMachines.ConcurrentSubTree"}],"connections":[{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"7"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"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,"overrideAgent":{"_type":"UnityEngine.Transform","_value":4},"$type":"Reset.CheckGenericObserver"},{"eventName":{"_value":"Grapple + Zoomed"},"$type":"NodeCanvas.Tasks.Conditions.CheckEvent"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"0"},"_targetNode":{"$ref":"15"},"_isDisabled":true,"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"wallclimb"},"outputHitTo":{"_name":"_wallJumpHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"2"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"right-walljump"},"outputHitTo":{"_name":"_wallJumpHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"3"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"left-walljump"},"outputHitTo":{"_name":"_wallJumpHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"5"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"7"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"airJumpsRemaining","_targetVariableID":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d"},"checkType":4,"valueB":{},"$type":"NodeCanvas.Tasks.Conditions.CheckInt"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"8"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"left-wallstick"},"outputHitTo":{"_name":"_wallStickHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Stick"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"13"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"right-wallstick"},"outputHitTo":{"_name":"_wallStickHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Stick"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"9"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"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,"overrideAgent":{"_type":"UnityEngine.Transform","_value":4},"$type":"Reset.CheckGenericObserver"},{"eventName":{"_value":"Grapple + Zoomed"},"$type":"NodeCanvas.Tasks.Conditions.CheckEvent"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"1"},"_targetNode":{"$ref":"15"},"_isDisabled":true,"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"2"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"checkAgainst":2,"checkAgainstValue":{"_name":"_wallJumpHitNormal"},"desiredValue":{"_value":1.0},"tolerance":{"_value":0.5},"considerCameraRotation":{"_value":true},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"4"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"3"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"4"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"checkAgainst":2,"checkAgainstValue":{"_name":"_wallJumpHitNormal"},"desiredValue":{"_value":1.0},"tolerance":{"_value":0.5},"considerCameraRotation":{"_value":true},"negate":{},"$type":"NodeCanvas.Tasks.Conditions.GetMovementInputDotProduct"},"_sourceNode":{"$ref":"5"},"_targetNode":{"$ref":"6"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"5"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"6"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"7"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"valueA":{"_name":"isGrounded","_targetVariableID":"619300a4-be8b-4ad4-ba2a-978468094ba2"},"valueB":{"_value":true},"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"},"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"0"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"right-wallstick"},"outputHitTo":{"_name":"_wallStickHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Stick"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"9"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"observerLabel":{"_value":"left-wallstick"},"outputHitTo":{"_name":"_wallStickHit"},"$type":"NodeCanvas.Tasks.Conditions.CheckEnvironmentObserver"},{"actionName":{"_value":"Stick"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"13"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"conditions":[{"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,"overrideAgent":{"_type":"UnityEngine.Transform","_value":4},"$type":"Reset.CheckGenericObserver"},{"eventName":{"_value":"Grapple + Zoomed"},"$type":"NodeCanvas.Tasks.Conditions.CheckEvent"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"8"},"_targetNode":{"$ref":"15"},"_isDisabled":true,"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"timeout":{"_value":1.0},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},"_sourceNode":{"$ref":"9"},"_targetNode":{"$ref":"10"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"9"},"_targetNode":{"$ref":"11"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"checkMode":1,"conditions":[{"timeout":{"_value":2.0},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},{"valueA":{"_name":"isGrounded","_targetVariableID":"09b3259f-8b50-439a-ab86-ea3d8a4916f1"},"valueB":{"_value":true},"_invert":true,"$type":"NodeCanvas.Tasks.Conditions.CheckBoolean"}],"$type":"NodeCanvas.Framework.ConditionList"},"_sourceNode":{"$ref":"10"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"11"},"_targetNode":{"$ref":"12"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"12"},"_targetNode":{"$ref":"1"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"actionName":{"_value":"Jump"},"actionPhase":{"_value":3},"$type":"NodeCanvas.Tasks.Conditions.CheckInput"},"_sourceNode":{"$ref":"13"},"_targetNode":{"$ref":"14"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_condition":{"timeout":{"_value":1.0},"$type":"NodeCanvas.Tasks.Conditions.Timeout"},"_sourceNode":{"$ref":"13"},"_targetNode":{"$ref":"10"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"14"},"_targetNode":{"$ref":"12"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"16"},"_targetNode":{"$ref":"13"},"$type":"NodeCanvas.StateMachines.FSMConnection"},{"_sourceNode":{"$ref":"17"},"_targetNode":{"$ref":"9"},"$type":"NodeCanvas.StateMachines.FSMConnection"}],"canvasGroups":[],"localBlackboard":{"_variables":{"isGrounded":{"_propertyPath":"UnityEngine.CharacterController.isGrounded","_name":"isGrounded","_id":"619300a4-be8b-4ad4-ba2a-978468094ba2","$type":"NodeCanvas.Framework.Variable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"forwardRay":{"_propertyPath":"PlayerMovement.forwardRay","_name":"forwardRay","_id":"a2506ca5-1b47-4820-9921-3ff4ecc18564","$type":"NodeCanvas.Framework.Variable`1[[UnityEngine.RaycastHit, UnityEngine.PhysicsModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]"},"airJumpsRemaining":{"_name":"airJumpsRemaining","_id":"23f0ddc0-c4e8-462f-a7e0-fdd8e818d08d","$type":"NodeCanvas.Framework.Variable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"},"rotationSpeed":{"_value":0.5,"_name":"rotationSpeed","_id":"3a7d1c7c-8fb6-4a99-b25a-b434b62d4611","$type":"NodeCanvas.Framework.Variable`1[[System.Single, @@ -6770,12 +6785,13 @@ MonoBehaviour: - {fileID: 11400000, guid: b307c218c1a404548afe65e66737fa80, type: 2} - {fileID: 11400000, guid: c2ae6811bd56a6245a6ab9ec1b0503ae, type: 2} - {fileID: 11400000, guid: f9aba4b029eacea44966829321f0124a, type: 2} + - {fileID: 330585546} _boundGraphSource: _version: 3.31 _category: _comments: - _translation: {x: -51, y: 507} - _zoomFactor: 0.97967756 + _translation: {x: -51.136482, y: 544.1196} + _zoomFactor: 0.7282815 _firstActivation: 0 _enableAction: 0 _disableAction: 0 @@ -6809,6 +6825,172 @@ MonoBehaviour: - {fileID: 1379573502} - {fileID: 263093399} lockOnDocument: {fileID: 1223043171} +--- !u!114 &1992890480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1992890470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a8c0593fef54844383c2f154cf8806c, type: 3} + m_Name: + m_EditorClassIdentifier: + observers: + - label: left-wallstick + castType: 4 + active: 0 + length: 1.23 + direction: {x: -1.18, y: 0, z: 0.95} + offset: {x: 0.57, y: 1.28, z: -0.38} + ignoreLayers: + serializedVersion: 2 + m_Bits: 62 + width: 1.38 + size: {x: 1.27, y: 1.5, z: 0.61} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 2 + children: [] + - label: right-wallstick + castType: 4 + active: 0 + length: 1.23 + direction: {x: 1.18, y: 0, z: 0.95} + offset: {x: -0.57, y: 1.28, z: -0.38} + ignoreLayers: + serializedVersion: 2 + m_Bits: 62 + width: 1.38 + size: {x: 1.27, y: 1.5, z: 0.61} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 2 + children: [] + - label: left-walljump + castType: 4 + active: 0 + length: 1.66 + direction: {x: -1, y: 0, z: 0} + offset: {x: 0, y: 0.5, z: 0} + ignoreLayers: + serializedVersion: 2 + m_Bits: 63 + width: 0.77 + size: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 0 + children: [] + - label: right-walljump + castType: 4 + active: 0 + length: 1.66 + direction: {x: 1, y: 0, z: 0} + offset: {x: 0, y: 0.5, z: 0} + ignoreLayers: + serializedVersion: 2 + m_Bits: 63 + width: 0.77 + size: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 0 + children: [] + - label: grapple + castType: 4 + active: 0 + length: 10 + direction: {x: 0, y: 0, z: 0} + offset: {x: 0, y: 0, z: 0} + ignoreLayers: + serializedVersion: 2 + m_Bits: 63 + width: 0 + size: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 0 + children: [] + - label: wallclimb + castType: 3 + active: 0 + length: 1 + direction: {x: 0, y: 0, z: 1} + offset: {x: 0, y: 1, z: 0} + ignoreLayers: + serializedVersion: 2 + m_Bits: 63 + width: 0 + size: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + overlapHits: [] + drawLabel: 0 + labelTextLocation: 0 + labelSize: 0 + labelLocationOffset: {x: 0, y: 0, z: 0} + labelRotationOffset: {x: 0, y: 0, z: 0} + drawHitName: 0 + hitTextLocation: 0 + hitTextSize: 0 + hitLocationOffset: {x: 0, y: 0, z: 0} + hitRotationOffset: {x: 0, y: 0, z: 0} + gizmoDrawingCondition: 0 + children: [] + references: + version: 2 + RefIds: [] --- !u!1 &2024357130 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Core/Graph Tasks/AddJump.cs b/Assets/Scripts/Core/Graph Tasks/AddJump.cs index fe92eb3..2ac3476 100644 --- a/Assets/Scripts/Core/Graph Tasks/AddJump.cs +++ b/Assets/Scripts/Core/Graph Tasks/AddJump.cs @@ -10,19 +10,21 @@ using Reset.Player.Movement; namespace NodeCanvas.Tasks.Actions { [Category("Reset/Movement")] public class AddJump : ActionTask { - public BBParameter jumpStrength; public BBParameter airMoveDirection; - - public BBParameter playerFacingDirection; + public BBParameter jumpPower; - [Range(0f, 1f)] + [Space(5)] + public BBParameter jumpStrength; + + [SliderField(0, 1)] public BBParameter standStillJumpStrength; - public BBParameter jumpPower; [Tooltip("Determines how much current movement vectors into jump direction")] + [SliderField(0, 1)] public BBParameter currentVelocityInheritence; public BBParameter directionalForce; + [SliderField(0, 1)] public BBParameter directionalForceStrength; protected override string info { @@ -72,9 +74,12 @@ namespace NodeCanvas.Tasks.Actions { // Check threshold of current XZ velocity- if it's too close to zero, use the jumpStrength for jumping velocity. If it's not, use the current velocity float velocityThreshold = 4f; float magnitudeZeroDifference = Mathf.Clamp(currentVelocityVector3.magnitude - velocityThreshold, 0f, Mathf.Infinity) / velocityThreshold; // Divided by maximum to return a 0-1 value. Clamping not required. - float outputVelocity = Mathf.Lerp(jumpStrength.value, currentVelocityVector3.magnitude, Math.Clamp(magnitudeZeroDifference, 0f, 1f)); + float outputHoritontalVelocity = Mathf.Lerp(jumpStrength.value, currentVelocityVector3.magnitude, Math.Clamp(magnitudeZeroDifference, 0f, 1f)); + + outputHoritontalVelocity = Mathf.Min(outputHoritontalVelocity, Mathf.Lerp(standStillJumpStrength.value * jumpStrength.value, jumpStrength.value * .4f, magnitudeZeroDifference)); - outputVelocity = Mathf.Min(outputVelocity, Mathf.Lerp(standStillJumpStrength.value * jumpStrength.value, jumpStrength.value * .4f, magnitudeZeroDifference)); + // Do the same for directional jump strength + outputHoritontalVelocity = Mathf.Lerp(outputHoritontalVelocity, jumpStrength.value, directionalForceStrength.value); // Remap the dot to set -1 (opposing direction) to -.5f, and 1 (same direciton) to 1.2f // This is done to allow some sideways jumping direction change, but none backwards, and all forwards @@ -94,7 +99,7 @@ namespace NodeCanvas.Tasks.Actions { outputDirection = Camera.main.transform.rotation.Flatten(0, null, 0) * outputDirection; // Set air move direction - airMoveDirection.value += outputDirection * outputVelocity; + airMoveDirection.value += outputDirection * outputHoritontalVelocity; } EndAction(true); } diff --git a/Assets/Scripts/Core/Graph Tasks/CalculateAirMovement.cs b/Assets/Scripts/Core/Graph Tasks/CalculateAirMovement.cs index 075de6c..120c30c 100644 --- a/Assets/Scripts/Core/Graph Tasks/CalculateAirMovement.cs +++ b/Assets/Scripts/Core/Graph Tasks/CalculateAirMovement.cs @@ -3,16 +3,13 @@ using ParadoxNotion.Design; using UnityEngine; using Reset.Player.Movement; - namespace NodeCanvas.Tasks.Actions { [Category("Reset/Movement")] public class CalculateAirMovement : ActionTask{ public BBParameter airMoveDirection; - public BBParameter groundMoveDirection; + public BBParameter groundMoveDirection; // Unused on 7/29/25, delete if still unusued later - public BBParameter playerFacingDirection; - private float airControlPower = 1f; //Use for initialization. This is called only once in the lifetime of the task. @@ -25,7 +22,7 @@ namespace NodeCanvas.Tasks.Actions { //Call EndAction() to mark the action as finished, either in success or failure. //EndAction can be called from anywhere. protected override void OnExecute(){ - + airControlPower = 1f; } //Called once per frame while the action is active. @@ -34,7 +31,7 @@ namespace NodeCanvas.Tasks.Actions { airMoveDirection.value = Vector3.Lerp(airMoveDirection.value, Vector3.zero, .7f * Time.deltaTime); // Decay Air Control power - airControlPower = Mathf.Lerp(airControlPower, 0f, 3f * Time.deltaTime); + airControlPower = Mathf.Lerp(airControlPower, 0f, 2f * Time.deltaTime); // Add air control Vector3 inputVector3 = new(agent.GetComponent().rawMoveInput.x, 0f, agent.GetComponent().rawMoveInput.y); @@ -47,7 +44,7 @@ namespace NodeCanvas.Tasks.Actions { //Called when the task is disabled. protected override void OnStop() { - groundMoveDirection.value = agent.GetComponent().velocity; + // groundMoveDirection.value = agent.GetComponent().velocity; EndAction(true); } diff --git a/Assets/Scripts/Core/Graph Tasks/CalculateInputDotProduct.cs b/Assets/Scripts/Core/Graph Tasks/CalculateInputDotProduct.cs deleted file mode 100644 index 254b7e9..0000000 --- a/Assets/Scripts/Core/Graph Tasks/CalculateInputDotProduct.cs +++ /dev/null @@ -1,47 +0,0 @@ -using NodeCanvas.Framework; -using ParadoxNotion.Design; -using UnityEngine; - -namespace NodeCanvas.Tasks.Conditions { - - [Category("Core/Input")] - [Description("Returns a float from two Vector3s")] - public class GetMovementInputDotProduct : ConditionTask{ - [SliderField(0f,1f)] - public BBParameter desiredVector3; - public BBParameter tolerance; - public BBParameter negate; - - //Use for initialization. This is called only once in the lifetime of the task. - //Return null if init was successfull. Return an error string otherwise - protected override string OnInit(){ - return null; - } - - //This is called once each time the task is enabled. - //Call EndAction() to mark the action as finished, either in success or failure. - //EndAction can be called from anywhere. - protected override bool OnCheck(){ - Vector3 rawInputVector3 = new(agent.rawMoveInput.x, 0f, agent.rawMoveInput.y); - float dotProduct = Vector3.Dot(desiredVector3.value, rawInputVector3); - - //Debug.Log(dotProduct); - - if (dotProduct < tolerance.value) { - return true; - } - - return false; - } - - //Called when the task is disabled. - protected override void OnEnable() { - - } - - //Called when the task is paused. - protected override void OnDisable() { - - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs b/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs new file mode 100644 index 0000000..47e2ab6 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs @@ -0,0 +1,121 @@ +using System; +using NodeCanvas.Framework; +using ParadoxNotion.Design; +using ParadoxNotion.Serialization.FullSerializer; +using Sirenix.OdinInspector; +using UnityEngine; + +namespace NodeCanvas.Tasks.Actions { + + [Category("Reset")] + [Description("Update the agent's position and rotation (scale too, sure whynot) either instantly or over time.")] + public class ChangeAgentTransform : ActionTask{ + public enum TransformProperty{ + Position, + Rotation, + Scale + } + + protected override string info { + get{ + string basicText = string.Format($"Player {targetProperty.ToString()} to {(targetValue.isPresumedDynamic ? targetValue.name : targetValue.value)}"); + basicText += relativeToSelf.value ? ", relative to Self" : ""; + + return basicText; + } + } + + public TransformProperty targetProperty; + + [ParadoxNotion.Design.ShowIf("targetProperty", 0), Space(5)] + public BBParameter forcePositionChange; + + public BBParameter targetValue; + + public BBParameter relativeToSelf; + + [Tooltip("Set this to the current position if you're trying to rotate by 'this much'. Keep it zero for world space values.")] + public BBParameter relativeValue; + + public BBParameter changeInstantly; + public BBParameter smoothing; + + private Vector3 currentVel; + + + //Use for initialization. This is called only once in the lifetime of the task. + //Return null if init was successfull. Return an error string otherwise + protected override string OnInit() { + return null; + } + + //This is called once each time the task is enabled. + //Call EndAction() to mark the action as finished, either in success or failure. + //EndAction can be called from anywhere. + protected override void OnExecute() { + switch (targetProperty) { + case TransformProperty.Position: + Vector3 relativeUseValue = relativeValue.value; + if (relativeToSelf.value) { + relativeUseValue = agent.transform.position; + } + + if (changeInstantly.value) { + agent.Move(agent.transform.position.DirectionTo(relativeUseValue + targetValue.value)); + } + + break; + case TransformProperty.Rotation: + agent.transform.rotation = Quaternion.LookRotation(relativeValue.value) * Quaternion.Euler(targetValue.value); + break; + case TransformProperty.Scale: + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (changeInstantly.value) { + EndAction(true); + } + } + + //Called once per frame while the action is active. + protected override void OnUpdate() { + switch (targetProperty) { + case TransformProperty.Position: + Vector3 relativeUseValue = relativeValue.value; + if (relativeToSelf.value) { + relativeUseValue = agent.transform.position; + } + + if (!changeInstantly.value) { + Vector3 targetPosition = relativeUseValue + targetValue.value; + // agent.transform.position = Vector3.SmoothDamp(agent.transform.position, targetPosition, + // ref currentVel, smoothing.value * Time.deltaTime); + + agent.Move((agent.transform.position.DirectionTo(targetPosition)).normalized * .5f * Mathf.Lerp(0, 1, Vector3.Distance(agent.transform.position, targetPosition)) * smoothing.value * Time.deltaTime); + EndAction(); + } + + break; + case TransformProperty.Rotation: + agent.transform.rotation = Quaternion.Euler(relativeValue.value) * Quaternion.Euler(targetValue.value); + break; + case TransformProperty.Scale: + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + //Called when the task is disabled. + protected override void OnStop() { + + } + + //Called when the task is paused. + protected override void OnPause() { + + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs.meta b/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs.meta new file mode 100644 index 0000000..5bdbb3d --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/ChangeAgentTransform.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b77e2b9ac9aad644480508d5a86f4006 \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs b/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs index 9eab3e3..7ed0929 100644 --- a/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs +++ b/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs @@ -147,7 +147,7 @@ public class Vector3CameraValueGroupDrawer : ObjectDrawer{ + + public BBParameter observerLabel; + public BBParameter outputHitTo; + + protected override string info{ + get { + return $"Check Environment Observer, [\"{observerLabel.value}\"]"; + } + } + + //Use for initialization. This is called only once in the lifetime of the task. + //Return null if init was successfull. Return an error string otherwise + protected override string OnInit(){ + var observer = agent.FindObserverFromString(observerLabel.value); + if (observer == null) { + return $"An environment observer couldn't be found under the name {observerLabel.value}. Check your spelling and if it exists??"; + } + + return null; + } + + //Called whenever the condition gets enabled. + protected override void OnEnable() { + agent.FindObserverFromString(observerLabel.value).active = true; + } + + //Called whenever the condition gets disabled. + protected override void OnDisable() { + agent.FindObserverFromString(observerLabel.value).active = false; + } + + //Called once per frame while the condition is active. + //Return whether the condition is success or failure. + protected override bool OnCheck(){ + if (agent.EvaluateFromString(observerLabel.value) == true) { + if (outputHitTo.isDefined) { + EnvironmentObserver hitObserver = agent.FindObserverFromString(observerLabel.value, agent.observers); + + if (hitObserver.hit.Equals(default(RaycastHit))) { + Debug.LogError("You just tried to pull a RaycastHit for later use from an environment observer, but no RaycastHit is available. Don't forget that CastType.Box and CastType.Sphere CANNOT spit one out!"); + } else { + outputHitTo.value = hitObserver.hit; + return true; + } + } + + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/CheckEnvironmentObserver.cs.meta b/Assets/Scripts/Core/Graph Tasks/CheckEnvironmentObserver.cs.meta new file mode 100644 index 0000000..7af0474 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/CheckEnvironmentObserver.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 95ad4bd047d9654478597c68a81b01a0 \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs b/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs new file mode 100644 index 0000000..a808542 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs @@ -0,0 +1,102 @@ +using System.Drawing; +using NodeCanvas.Framework; +using ParadoxNotion.Design; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NodeCanvas.Editor; +using UnityEditor; + +namespace Reset { + [Category("Reset")] + [Description("Creates an environment observer unattached from the player, such as for checking from the Camera or another arbitray location.")] + public class CheckGenericObserver : ConditionTask{ + [Space(5)] + public BBParameter castType; + + public BBParameter length; + public BBParameter direction; + public BBParameter offset; + public BBParameter ignoreLayers; + + public BBParameter width; + + public BBParameter size; + + public BBParameter rotation; + + public bool drawGizmos; + public bool drawGizmosOnlyWhenActive; + + private EnvironmentObserver observer; + + protected override void OnTaskInspectorGUI(){ + BBParameterEditor.ParameterField("Cast Type", castType); + + BBParameterEditor.ParameterField("Length", length); + BBParameterEditor.ParameterField("Direction", direction); + BBParameterEditor.ParameterField("Offset", offset); + BBParameterEditor.ParameterField("Ignore Layers", ignoreLayers); + + if (castType.value == EnvironmentObserver.CastType.SphereCast || castType.value == EnvironmentObserver.CastType.SphereOverlap) { + BBParameterEditor.ParameterField("Width", width); + } + + if (castType.value == EnvironmentObserver.CastType.BoxCast || castType.value == EnvironmentObserver.CastType.BoxOverlap) { + BBParameterEditor.ParameterField("Size", size); + } + + if (castType.value != EnvironmentObserver.CastType.Ray) { + BBParameterEditor.ParameterField("Rotation", rotation); + } + + drawGizmos = EditorGUILayout.Toggle("Draw Gizmos", drawGizmos); + + if (drawGizmos) { + drawGizmosOnlyWhenActive = EditorGUILayout.Toggle("Draw Gizmos Only When Active", drawGizmosOnlyWhenActive); + } + } + + //Return null if init was successfull. Return an error string otherwise + protected override string OnInit(){ + return null; + } + + //Called whenever the condition gets enabled. + protected override void OnEnable() { + observer = new EnvironmentObserver(){ + castType = castType.value, + active = true, + + length = length.value, + direction = direction.value, + offset = offset.value, + ignoreLayers = ignoreLayers.value, + + width = width.value, + + size = size.value, + rotation = rotation.value + }; + } + + //Called whenever the condition gets disabled. + protected override void OnDisable() { + + } + + //Called once per frame while the condition is active. + //Return whether the condition is success or failure. + protected override bool OnCheck() { + bool check = observer.Evaluate(agent.gameObject); + + if (drawGizmos) { + observer.DrawObserverGizmo(agent.gameObject, true); + } + + return check; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs.meta b/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs.meta new file mode 100644 index 0000000..30a783c --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/CheckGenericObserver.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fb4b5bf056649ca48b1b14dbe499de46 \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/CheckInput.cs b/Assets/Scripts/Core/Graph Tasks/CheckInput.cs index 0241b44..da4a34a 100644 --- a/Assets/Scripts/Core/Graph Tasks/CheckInput.cs +++ b/Assets/Scripts/Core/Graph Tasks/CheckInput.cs @@ -1,49 +1,54 @@ +using System; +using System.Collections.Generic; using NodeCanvas.Framework; +using ParadoxNotion; using ParadoxNotion.Design; using UnityEngine; using UnityEngine.InputSystem; namespace NodeCanvas.Tasks.Conditions { - [Category("Reset/Input")] - [Description("Check if input condition was matched this frame")] + [Description("Check if input condition was matched this frame by phase.")] public class CheckInput : ConditionTask{ public BBParameter actionName; - public BBParameter actionValue; - + public BBParameter actionPhase; + + private SignalDefinition signalDefinition; protected override string info { - get { return "Player Input"; } + get { return $"Input {actionName.value} was {actionPhase.value}"; } } - - private InputAction action; - - //Use for initialization. This is called only once in the lifetime of the task. - //Return null if init was successfull. Return an error string otherwise + protected override string OnInit(){ + try { + signalDefinition = Resources.Load("InputSignal"); + } catch (Exception e) { + Debug.LogError($"Error finding the Input Signal defintion: {e.Message}"); + throw; + } + return null; } - //Called whenever the condition gets enabled. - protected override void OnEnable(){ - action = agent.GetComponent().actions.FindAction(actionName.value); + protected override void OnEnable() { + signalDefinition.onInvoke -= OnSignalInvoke; + signalDefinition.onInvoke += OnSignalInvoke; } - //Called whenever the condition gets disabled. protected override void OnDisable() { - + signalDefinition.onInvoke -= OnSignalInvoke; } - - //Called once per frame while the condition is active. - //Return whether the condition is success or failure. - protected override bool OnCheck() { - // if (action.type == InputActionType.Button){ - if (action.WasPressedThisFrame()) { return true; } - // } else if (action.type == InputActionType.Value) { - // - // } - - return false; + + void OnSignalInvoke(Transform sender, Transform receiver, bool isGlobal, params object[] args){ + // Take the input arguments as objects and convert them to InputAction & Phases + InputAction thisAction = (InputAction)args[0]; + InputActionPhase thisActionPhase = (InputActionPhase)args[1]; + + if (actionName.value == thisAction.name && actionPhase.value == thisActionPhase) { + YieldReturn(true); + } } + + protected override bool OnCheck() { return false; } } } diff --git a/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs b/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs new file mode 100644 index 0000000..4f0a6c5 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs @@ -0,0 +1,55 @@ +using NodeCanvas.Framework; +using ParadoxNotion.Design; +using UnityEngine; + + +namespace NodeCanvas.Tasks.Actions { + + [Category("Reset")] + [Description("Breaks down an incoming RaycastHit into it's constituent parts for later use.")] + public class DecomposeRaycastHit : ActionTask{ + public BBParameter raycastHit; + + public BBParameter transform; + public BBParameter collider; + public BBParameter gameObject; + public BBParameter distance; + public BBParameter normal; + public BBParameter point; + + //Use for initialization. This is called only once in the lifetime of the task. + //Return null if init was successfull. Return an error string otherwise + protected override string OnInit() { + return null; + } + + //This is called once each time the task is enabled. + //Call EndAction() to mark the action as finished, either in success or failure. + //EndAction can be called from anywhere. + protected override void OnExecute(){ + if (transform.isDefined){ transform.value = raycastHit.value.transform; } + if (collider.isDefined){ collider.value = raycastHit.value.collider; } + if (gameObject.isDefined){ gameObject.value = raycastHit.value.transform.gameObject; } + if (distance.isDefined){ distance.value = raycastHit.value.distance; } + if (normal.isDefined){ normal.value = raycastHit.value.normal; } + if (point.isDefined){ point.value = raycastHit.value.point; } + + EndAction(true); + } + + //Called once per frame while the action is active. + protected override void OnUpdate() { + + } + + //Called when the task is disabled. + protected override void OnStop() { + + } + + //Called when the task is paused. + protected override void OnPause() { + + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs.meta b/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs.meta new file mode 100644 index 0000000..92889a5 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/DecomposeRaycastHit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 79f7cbb75d876f84b8edfae676ba324c \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/GetMovementInputDotProduct.cs b/Assets/Scripts/Core/Graph Tasks/GetMovementInputDotProduct.cs new file mode 100644 index 0000000..16c0ac1 --- /dev/null +++ b/Assets/Scripts/Core/Graph Tasks/GetMovementInputDotProduct.cs @@ -0,0 +1,85 @@ +using System; +using NodeCanvas.Framework; +using NUnit.Framework.Constraints; +using ParadoxNotion.Design; +using ParadoxNotion.Serialization.FullSerializer; +using Sirenix.OdinInspector; +using UnityEngine; + +namespace NodeCanvas.Tasks.Conditions { + + [Category("Reset/Input")] + [Description("Returns a float from two Vector3s")] + public class GetMovementInputDotProduct : ConditionTask{ + enum CheckDotProductAgainst{ + ForwardDirection, + CameraDirection, + InputVector3 + } + + [ExposeField, fsSerializeAs] CheckDotProductAgainst checkAgainst; + [ParadoxNotion.Design.ShowIf("checkAgainst", 2)] public BBParameter checkAgainstValue; + [SliderField(-1f, 1f)] public BBParameter desiredValue; + public BBParameter tolerance; + + public BBParameter considerCameraRotation; + public BBParameter negate; + + //Use for initialization. This is called only once in the lifetime of the task. + //Return null if init was successfull. Return an error string otherwise + protected override string OnInit(){ + return null; + } + + //This is called once each time the task is enabled. + //Call EndAction() to mark the action as finished, either in success or failure. + //EndAction can be called from anywhere. + protected override bool OnCheck(){ + // Switch what the dot product is checked against + Vector3 valueToCheck; + + switch (checkAgainst) { + case CheckDotProductAgainst.ForwardDirection: + Debug.Log(agent.transform.forward); + valueToCheck = agent.transform.forward; + break; + case CheckDotProductAgainst.CameraDirection: + valueToCheck = Camera.main.transform.forward; + break; + case CheckDotProductAgainst.InputVector3: + valueToCheck = checkAgainstValue.value.normalized; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + // Get the input as a Vector3 + Vector3 rawInputVector3 = new Vector3(agent.rawMoveInput.x, 0f, agent.rawMoveInput.y); + if (considerCameraRotation.value) { + rawInputVector3 = Camera.main.transform.rotation * rawInputVector3; + } + + // Calculate dor product + float dotProduct = Vector3.Dot(valueToCheck, rawInputVector3); + + Debug.Log(dotProduct); + + // Compare against the desired tolerance and output result + if (tolerance.value > Mathf.Abs(dotProduct - tolerance.value)) { + return true; + } + + return false; + } + + //Called when the task is disabled. + protected override void OnEnable() { + + } + + //Called when the task is paused. + protected override void OnDisable() { + + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Graph Tasks/CalculateInputDotProduct.cs.meta b/Assets/Scripts/Core/Graph Tasks/GetMovementInputDotProduct.cs.meta similarity index 100% rename from Assets/Scripts/Core/Graph Tasks/CalculateInputDotProduct.cs.meta rename to Assets/Scripts/Core/Graph Tasks/GetMovementInputDotProduct.cs.meta diff --git a/Assets/Scripts/Core/Graph Tasks/ProcessMovement.cs b/Assets/Scripts/Core/Graph Tasks/ProcessMovement.cs index 1ab94de..bfab6d3 100644 --- a/Assets/Scripts/Core/Graph Tasks/ProcessMovement.cs +++ b/Assets/Scripts/Core/Graph Tasks/ProcessMovement.cs @@ -12,7 +12,8 @@ namespace Reset.Player.Movement{ public enum PlayerFacingDirection{ Target = 0, Movement, - MatchCamera + MatchCamera, + Static } } @@ -43,6 +44,7 @@ namespace NodeCanvas.Tasks.Actions { private float currentRotSpeed; private float lastLookMagnitude; private Quaternion targetRotation; + private Vector3 currentMoveDir; // References private PlayerControls controls; @@ -55,7 +57,7 @@ namespace NodeCanvas.Tasks.Actions { // Append the late update method to actually happen on late update MonoManager.current.onLateUpdate += LateUpdate; - // What + // Set ingitial rotation power currentRotSpeed = rotationSpeed.value; // Reference to controls @@ -67,8 +69,8 @@ namespace NodeCanvas.Tasks.Actions { //This is called once each time the task is enabled. //Call EndAction() to mark the action as finished, either in success or failure. //EndAction can be called from anywhere. - protected override void OnExecute() { - + protected override void OnExecute(){ + currentMoveDir = groundMoveDirection.value; } //Called once per frame while the action is active. @@ -88,26 +90,39 @@ namespace NodeCanvas.Tasks.Actions { break; case PlayerFacingDirection.Movement: // Check magnitude to avoid the "Look rotation viewing vector is zero" debug - if (controls.rawMoveInput.magnitude == 0) { break; } // Set desired rotation to input direction, with respect to camera rotation - targetRotation = Quaternion.LookRotation(new Vector3(controls.rawMoveInput.x, 0, controls.rawMoveInput.y)) * - Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0f, null, 0f)); + if (agent.isGrounded){ + if (controls.rawMoveInput.magnitude == 0) { break; } + + targetRotation = Quaternion.LookRotation(currentMoveDir) * + Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0f, null, 0f)); + } else { + if (airMoveDirection.value.magnitude == 0) { break; } + + targetRotation = Quaternion.LookRotation(airMoveDirection.value); + } 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 targetRotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.Flatten(0, null, 0)); break; + case PlayerFacingDirection.Static: + targetRotation = agent.transform.rotation; + break; } // Construct move direction Vector3 finalMoveDir = Vector3.zero; Vector3 gravityMoveDirection; + + // Change how input is managed based on facing state + currentMoveDir = Vector3.Slerp(currentMoveDir, groundMoveDirection.value, currentRotSpeed * Time.deltaTime); // Add input movement if (agent.isGrounded){ - finalMoveDir += groundMoveDirection.value + Vector3.down * .03f; + finalMoveDir += currentMoveDir + Vector3.down * .03f; gravityMoveDirection = new(0f, jumpPower.value + (Physics.gravity.y *.3f), 0f); } else { finalMoveDir += airMoveDirection.value; @@ -127,7 +142,7 @@ namespace NodeCanvas.Tasks.Actions { } // Set final rotation - agent.transform.rotation = Quaternion.Lerp(agent.transform.rotation, targetRotation, 10f * Time.deltaTime); + agent.transform.rotation = Quaternion.Lerp(agent.transform.rotation, targetRotation, 10f * Time.deltaTime).Flatten(0, null, 0); // ???? Moved this above but don't remember if this needs to be here still if (agent.isGrounded) { diff --git a/Assets/Scripts/Core/MathExtensions.cs b/Assets/Scripts/Core/MathExtensions.cs index c3c895b..279790c 100644 --- a/Assets/Scripts/Core/MathExtensions.cs +++ b/Assets/Scripts/Core/MathExtensions.cs @@ -13,4 +13,7 @@ public static class MathExtensions{ return (to - origin).normalized; } + public static Color Alpha(this Color input, float newAlpha){ + return new Color(input.r, input.g, input.b, newAlpha); + } } diff --git a/Assets/Scripts/Player/CameraSettingsProcessor.cs b/Assets/Scripts/Player/CameraSettingsProcessor.cs index 68f4d25..47670cf 100644 --- a/Assets/Scripts/Player/CameraSettingsProcessor.cs +++ b/Assets/Scripts/Player/CameraSettingsProcessor.cs @@ -28,6 +28,8 @@ public struct CameraSettingSingleValue{ public struct CameraSettingValues{ public CameraSettingSingleValue mainFieldOfView; + + public CameraSettingSingleValue orbitPositionDamping; public CameraSettingSingleValue orbitFollowTopHeight; public CameraSettingSingleValue orbitFollowTopRadius; @@ -43,6 +45,8 @@ public struct CameraSettingValues{ public CameraSettingValues(float defaultSmoothing){ mainFieldOfView = new CameraSettingSingleValue(defaultSmoothing); + orbitPositionDamping = new CameraSettingSingleValue(defaultSmoothing); + orbitFollowTopHeight = new CameraSettingSingleValue(defaultSmoothing); orbitFollowTopRadius = new CameraSettingSingleValue(defaultSmoothing); orbitFollowCenterHeight = new CameraSettingSingleValue(defaultSmoothing); @@ -86,6 +90,7 @@ public class CameraSettingsProcessor : MonoBehaviour{ values = new CameraSettingValues{ cameraOffsetOffset = new CameraSettingSingleValue(defaultSmoothing: .2f, offset.Offset), mainFieldOfView = new CameraSettingSingleValue(defaultSmoothing: .2f, main.Lens.FieldOfView), + orbitPositionDamping = new CameraSettingSingleValue(defaultSmoothing: .2f, orbit.TrackerSettings.PositionDamping), orbitFollowTopHeight = new CameraSettingSingleValue(defaultSmoothing: .2f, orbit.Orbits.Top.Height), orbitFollowTopRadius = new CameraSettingSingleValue(defaultSmoothing: .2f, orbit.Orbits.Top.Radius), orbitFollowCenterHeight = new CameraSettingSingleValue(defaultSmoothing: .2f, orbit.Orbits.Center.Height), @@ -101,6 +106,10 @@ public class CameraSettingsProcessor : MonoBehaviour{ values.mainFieldOfView.targetValue, ref values.mainFieldOfView.velocityRef, values.mainFieldOfView.smoothing); + orbit.TrackerSettings.PositionDamping = Vector3.SmoothDamp(orbit.TrackerSettings.PositionDamping, + values.orbitPositionDamping.targetValue, ref values.orbitPositionDamping.velocityRefV3, + values.orbitPositionDamping.smoothing); + orbit.Orbits.Top.Height = Mathf.SmoothDamp(orbit.Orbits.Top.Height, values.orbitFollowTopHeight.targetValue, ref values.orbitFollowTopHeight.velocityRef, values.orbitFollowTopHeight.smoothing); @@ -113,6 +122,8 @@ public class CameraSettingsProcessor : MonoBehaviour{ values.orbitFollowCenterHeight.targetValue, ref values.orbitFollowCenterHeight.velocityRef, values.orbitFollowCenterHeight.smoothing); + + orbit.Orbits.Center.Radius = Mathf.SmoothDamp(orbit.Orbits.Center.Radius, values.orbitFollowCenterRadius.targetValue, ref values.orbitFollowCenterRadius.velocityRef, values.orbitFollowCenterRadius.smoothing); diff --git a/Assets/Scripts/Player/PlayerControls.cs b/Assets/Scripts/Player/PlayerControls.cs index 2742493..ad63d8c 100644 --- a/Assets/Scripts/Player/PlayerControls.cs +++ b/Assets/Scripts/Player/PlayerControls.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using UnityEditor; using UnityEngine; using UnityEngine.InputSystem; @@ -6,11 +7,15 @@ using UnityEngine.UIElements; using NodeCanvas; using NodeCanvas.Framework; using ParadoxNotion; +using Sirenix.OdinInspector; public class PlayerControls : MonoBehaviour{ // References private Player thisPlayer; + private PlayerInput input; + public SignalDefinition inputSignal; + // TODO: Turn these into accessors public Vector2 rawMoveInput; public Vector2 rawLookInput; @@ -20,6 +25,31 @@ public class PlayerControls : MonoBehaviour{ void Awake(){ thisPlayer = GetComponent(); graph = GetComponent(); + input = GetComponent(); + + // Add the delegates for each method + foreach (InputAction action in input.actions) { + action.started += SendToGraph; + action.canceled += SendToGraph; + action.performed += SendToGraph; + } + } + + // Remove the delegates for each method + void OnDisable(){ + foreach (InputAction action in input.actions) { + action.started -= SendToGraph; + action.canceled -= SendToGraph; + action.performed -= SendToGraph; + } + } + + // This will call the OnSignalInvoke for this type of Signal Defintion. CheckInput is the recieving end. + public void SendToGraph(InputAction.CallbackContext ctx){ + inputSignal.Invoke(transform, transform, false, new object[]{ + ctx.action, + ctx.phase + }); } public void OnMove(InputValue value){ diff --git a/Assets/Scripts/Player/PlayerEnvironmentManager.cs b/Assets/Scripts/Player/PlayerEnvironmentManager.cs new file mode 100644 index 0000000..6235437 --- /dev/null +++ b/Assets/Scripts/Player/PlayerEnvironmentManager.cs @@ -0,0 +1,356 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Drawing; +using Sirenix.OdinInspector; +using Sirenix.Serialization; +using Unity.Mathematics; +using UnityEngine.Serialization; + +[Serializable] +public class EnvironmentObserver{ + enum LabelDrawingLocation{ + PlayerOffset, + HitLocation, + IntersectingLength, + } + + enum ObserverGizmoDrawingCondition{ + Always, + OnlyActive, + Never + } + + public enum CastType{ + Ray, + BoxOverlap, + SphereOverlap, + BoxCast, + SphereCast + } + + [PropertySpace(0, 5), LabelWidth(60)] + public string label; + [PropertySpace(0, 10), LabelWidth(60)] + public CastType castType; + + [Button(ButtonSizes.Large), GUIColor("@GetObserverStatusColorStatic(active, hit)"), PropertyOrder(-1), PropertySpace(5, 5)] + public void Active(){ + active = !active; + } + + [HideInInspector] + public bool active; + + // Parameters for Cast cast types + [FoldoutGroup("Settings")] public float length; + [FoldoutGroup("Settings")] public Vector3 direction; + [FoldoutGroup("Settings")] public Vector3 offset; + [PropertySpace(0, 5), FoldoutGroup("Settings")] public LayerMask ignoreLayers = ~0; + + [ShowIfGroup("Settings/CastsOnly", VisibleIf = "@castType == CastType.SphereCast || castType == CastType.SphereOverlap")] + [FoldoutGroup("Settings")] public float width; + + // Parameters for Overlap cast types + [ShowIfGroup("Settings/3DOnly", VisibleIf = "@castType == CastType.BoxCast && castType != CastType.BoxOverlap")] [FoldoutGroup("Settings")] + public Vector3 size; + + [ShowIfGroup("Settings/3DOnly")] + public Vector3 rotation; + + [HideInInspector] + public RaycastHit hit; + + [HideInInspector] + public Collider[] overlapHits; + + [FoldoutGroup("Text")] + [BoxGroup("Text/Label")] public bool drawLabel; + [ShowInInspector, SerializeField] [BoxGroup("Text/Label")] LabelDrawingLocation labelTextLocation; + [BoxGroup("Text/Label")] public float labelSize; + [BoxGroup("Text/Label")] public Vector3 labelLocationOffset; + [BoxGroup("Text/Label")] public Vector3 labelRotationOffset; + + [BoxGroup("Text/Hit")] public bool drawHitName; + [ShowInInspector, SerializeField] [BoxGroup("Text/Hit")] LabelDrawingLocation hitTextLocation; + [BoxGroup("Text/Hit")] public float hitTextSize; + [BoxGroup("Text/Hit")] public Vector3 hitLocationOffset; + [BoxGroup("Text/Hit")] public Vector3 hitRotationOffset; + [FoldoutGroup("Text"), SerializeField, ShowInInspector] ObserverGizmoDrawingCondition gizmoDrawingCondition; + + [SerializeReference, PropertySpace(5, 5)] + public List children; + + // NOTE: I had a ref for a RaycastHit here that would correspond to hit but idk if it's needed. + public bool Evaluate(GameObject source){ + if (active) { + // Remove player's layer from LayerMask. + ignoreLayers -= source.layer; + + // Set some of the variables used later during casting + Vector3 relativeStart = source.transform.position + offset; + Vector3 relativeStartWithRotation = source.transform.position + source.transform.rotation * offset ; + + switch (castType) { + case CastType.Ray: + Physics.Raycast(relativeStart, source.transform.rotation * direction, out hit, length, ignoreLayers); + break; + case CastType.BoxOverlap: + overlapHits = Physics.OverlapBox(relativeStartWithRotation, size / 2f, + source.transform.rotation * Quaternion.Euler(rotation), ignoreLayers); + + if (overlapHits.Length > 0) { + return true; + }; + + break; + case CastType.SphereOverlap: + break; + case CastType.BoxCast: + // TODO: Make this not an if statement. Check that it works with NodeCanvas first + if (Physics.BoxCast(relativeStartWithRotation, size / 2f, + source.transform.rotation * Quaternion.Euler(rotation) * direction, + out hit, source.transform.rotation * Quaternion.Euler(rotation), length, + ignoreLayers) + ) { + }; + break; + case CastType.SphereCast: + // TODO: Make this not an if statement. Check that it works with NodeCanvas first + if (Physics.SphereCast(relativeStartWithRotation, width / 2f, + source.transform.rotation * Quaternion.Euler(rotation) * direction, + out hit, length, + ignoreLayers) + ) { + }; + break; + } + + if (hit.transform != null) { + return true; + } + } + return false; + } + + public void DrawObserverGizmo(GameObject source, bool drawAnyways = false){ + if (!drawAnyways){ + if (gizmoDrawingCondition == ObserverGizmoDrawingCondition.Never || (gizmoDrawingCondition == ObserverGizmoDrawingCondition.OnlyActive ! & active)) { + return; + } + } + + Vector3 relativeStart = source.transform.position + offset; + Vector3 relativeStartWithRotation = source.transform.position + source.transform.rotation * (offset); + + // Setup the variables for boxcast, spherecast, etc + // Create an offset start point for the center of the wirebox, since gizmos are drawn with their pivot in the center. + Vector3 offsetWithRotationAndLength = (Quaternion.LookRotation(direction) * Quaternion.Euler(rotation)) * (Vector3.forward * (length / 2)); + Vector3 offsetFromCenter = relativeStartWithRotation + source.transform.rotation * offsetWithRotationAndLength; + + // Also create a rotation for use with the gizmos. Mainly just to shorten the lines + Quaternion gizmosRotation = source.transform.rotation * Quaternion.LookRotation(direction) * Quaternion.Euler(rotation); + Vector3 firstBoxOffset = gizmosRotation * (Vector3.forward * size.z); + + Color gizmoColor = Evaluate(source) ? Color.green : Color.red; + gizmoColor = active ? gizmoColor : Color.gray; + + using (Draw.ingame.WithColor(gizmoColor)){ + switch (castType) { + case CastType.Ray: + Draw.ingame.Line(relativeStart, relativeStart + (source.transform.rotation * direction.normalized) * length); + break; + case CastType.BoxOverlap: + Draw.ingame.WireBox(relativeStartWithRotation, source.transform.rotation * Quaternion.Euler(rotation), size); + break; + case CastType.SphereCast: + Draw.ingame.SolidCircle(relativeStartWithRotation, relativeStartWithRotation - Camera.main.transform.position, width * 1, gizmoColor.Alpha(.5f)); + Draw.ingame.WireCapsule(relativeStartWithRotation, relativeStartWithRotation + gizmosRotation * (Vector3.forward * (length - width / 2)), width); + break; + case CastType.BoxCast: + // Draw the gizmos for the boxcast + Draw.ingame.WireBox(offsetFromCenter, gizmosRotation, new float3(size.x, size.y, length)); + Draw.ingame.SolidBox(relativeStartWithRotation, gizmosRotation, size, gizmoColor.Alpha(.1f)); + + Draw.ingame.WireBox(relativeStartWithRotation, gizmosRotation, size); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + Draw.ingame.SolidCircle(relativeStartWithRotation, relativeStartWithRotation - Camera.main.transform.position, .4f); + Draw.ingame.SolidCircle(hit.point, hit.point - Camera.main.transform.position, .4f); + + // Set up variables for label (not hit name) + Vector3 labelStartPos = Vector3.zero; + switch (labelTextLocation) { + case LabelDrawingLocation.PlayerOffset: + labelStartPos = source.transform.position; + break; + case LabelDrawingLocation.IntersectingLength: + labelStartPos = offsetFromCenter; + break; + case LabelDrawingLocation.HitLocation:{ + if (hit.transform != null) { + labelStartPos = hit.point; + } + + break; + } + } + + // Draw label + if (drawLabel) { + Draw.ingame.Label3D( + labelStartPos + labelLocationOffset, + gizmosRotation * Quaternion.Euler(labelRotationOffset), + label, + labelSize, + LabelAlignment.MiddleLeft, + gizmoColor + ); + } + + // Set up variables for hit name + // Since the label is already drawn just use the previous startPos + switch (labelTextLocation) { + case LabelDrawingLocation.PlayerOffset: + labelStartPos = source.transform.position; + break; + case LabelDrawingLocation.IntersectingLength: + labelStartPos = offsetFromCenter; + break; + case LabelDrawingLocation.HitLocation:{ + if (hit.transform != null) { + labelStartPos = hit.point; + } + + break; + } + } + + // Draw hitname + if (drawLabel) { + Draw.ingame.Label3D( + labelStartPos + labelLocationOffset, + gizmosRotation * Quaternion.Euler(labelRotationOffset), + label, + hitTextSize, + LabelAlignment.MiddleLeft, + gizmoColor + ); + } + } + } + + static Color GetObserverStatusColorStatic(bool active, RaycastHit hit){ + if (active) { + if (hit.Equals(default(RaycastHit))) { + return Color.green; + } + + return Color.red; + } + + return Color.gray; + } +} + +public class PlayerEnvironmentManager : MonoBehaviour{ + [OdinSerialize] + public List observers; + + void Start(){ + CheckDuplicateLabels(observers); + } + + // TODO: Not working. + void CheckDuplicateLabels(List sourceList){ + foreach (EnvironmentObserver sourceObserver in observers) { + foreach (EnvironmentObserver observer in sourceList) { + if (sourceObserver == observer) { + continue; + } + + if (sourceObserver.label == observer.label) { + Debug.LogError($"Duplicate label found in observer: {observer.label} is in use multiple times"); + } + + if (observer.children != null && observer.children.Count > 0) { + CheckDuplicateLabels(observer.children); + } + } + } + } + + public bool EvaluateFromString(string searchLabel, List observerList = null){ + List listToUse = observers; + + if (observerList != null) { + listToUse = observerList; + } + + foreach (EnvironmentObserver observer in listToUse) { + if (observer.label == searchLabel) { + return observer.Evaluate(gameObject); + } + + if (observer.children != null && observer.children.Count > 0) { + foreach (EnvironmentObserver childObserver in observer.children) { + EvaluateFromString(searchLabel, childObserver.children); + } + } + } + + return false; + } + + public EnvironmentObserver FindObserverFromString(string searchLabel, List observerList = null){ + List listToUse = observers; + + if (observerList != null) { + listToUse = observerList; + } + + foreach (EnvironmentObserver observer in listToUse) { + if (observer.label == searchLabel) { + return observer; + } + + if (observer.children != null && observer.children.Count > 0) { + foreach (EnvironmentObserver childObserver in observer.children) { + FindObserverFromString(searchLabel, childObserver.children); + } + } + } + + return null; + } + + void Update(){ + } + + void LateUpdate(){ + // Draw Gizmos + foreach (EnvironmentObserver observer in observers) { + observer.DrawObserverGizmo(gameObject); + + if (observer.children != null && observer.children.Count > 0) { + foreach (EnvironmentObserver childObserver in observer.children) { + childObserver.DrawObserverGizmo(gameObject); + } + } + } + + // Clear hit + foreach (EnvironmentObserver observer in observers) { + observer.hit = default; + + if (observer.children != null && observer.children.Count > 0) { + foreach (EnvironmentObserver childObserver in observer.children) { + childObserver.hit = default; + } + } + } + } +} diff --git a/Assets/Scripts/Player/PlayerEnvironmentManager.cs.meta b/Assets/Scripts/Player/PlayerEnvironmentManager.cs.meta new file mode 100644 index 0000000..c6ddf71 --- /dev/null +++ b/Assets/Scripts/Player/PlayerEnvironmentManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7a8c0593fef54844383c2f154cf8806c \ No newline at end of file diff --git a/Assets/Scripts/Player/PlayerMovement.cs b/Assets/Scripts/Player/PlayerMovement.cs index 1101f95..83ff441 100644 --- a/Assets/Scripts/Player/PlayerMovement.cs +++ b/Assets/Scripts/Player/PlayerMovement.cs @@ -15,42 +15,42 @@ public class PlayerMovement : MonoBehaviour thisPlayer = GetComponent(); } - void Update(){ - // Create Ray Colors - Color forwardRayStatus = Color.red; - Color leftRayStatus = Color.red; - Color rightRayStatus = Color.red; - - if (forwardRay.collider&& forwardRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ forwardRayStatus = Color.green;} - if (leftRay.collider&& leftRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ leftRayStatus = Color.green;} - if (rightRay.collider&& rightRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ rightRayStatus = Color.green;} - - using (Draw.WithColor(forwardRayStatus)) { - Draw.Line(transform.position + transform.up, transform.position + transform.forward * 2.5f + transform.up); - } + // void Update(){ + // // Create Ray Colors + // Color forwardRayStatus = Color.red; + // Color leftRayStatus = Color.red; + // Color rightRayStatus = Color.red; + // + // if (forwardRay.collider&& forwardRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ forwardRayStatus = Color.green;} + // if (leftRay.collider&& leftRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ leftRayStatus = Color.green;} + // if (rightRay.collider&& rightRay.transform.gameObject.layer == LayerMask.NameToLayer("Environment")){ rightRayStatus = Color.green;} + // + // using (Draw.WithColor(forwardRayStatus)) { + // Draw.Line(transform.position + transform.up, transform.position + transform.forward * 2.5f + transform.up); + // } + // + // using (Draw.WithColor(leftRayStatus)) { + // Draw.Line(transform.position + transform.up, transform.position + -transform.right * 2f + transform.up); + // } + // + // using (Draw.WithColor(rightRayStatus)) { + // Draw.Line(transform.position + transform.up, transform.position + transform.right * 2f + transform.up); + // } + // } - using (Draw.WithColor(leftRayStatus)) { - Draw.Line(transform.position + transform.up, transform.position + -transform.right * 2f + transform.up); - } - - using (Draw.WithColor(rightRayStatus)) { - Draw.Line(transform.position + transform.up, transform.position + transform.right * 2f + transform.up); - } - } - - void FixedUpdate(){ - LayerMask environmentLayer = LayerMask.NameToLayer("Environment"); - - if (Physics.Raycast(transform.position + Vector3.up, transform.forward, out forwardRay, 2.5f, ~environmentLayer)){ - thisPlayer.controls.graph.SendEvent("ForwardRay", true, null); - } - - if (Physics.Raycast(transform.position + Vector3.up, transform.position + Vector3.left, out leftRay, maxDistance: 2f, ~environmentLayer )) { - thisPlayer.controls.graph.SendEvent("LeftRay", true, null); - } - - if (Physics.Raycast(transform.position + Vector3.up, transform.position + Vector3.right, out rightRay, maxDistance: 2f, ~environmentLayer )) { - thisPlayer.controls.graph.SendEvent("RightRay", true, null); - } - } + // void FixedUpdate(){ + // LayerMask environmentLayer = LayerMask.NameToLayer("Environment"); + // + // if (Physics.Raycast(transform.position + Vector3.up, transform.forward, out forwardRay, 2.5f, ~environmentLayer)){ + // thisPlayer.controls.graph.SendEvent("ForwardRay", true, null); + // } + // + // if (Physics.Raycast(transform.position + Vector3.up, transform.position + Vector3.left, out leftRay, maxDistance: 2f, ~environmentLayer )) { + // thisPlayer.controls.graph.SendEvent("LeftRay", true, null); + // } + // + // if (Physics.Raycast(transform.position + Vector3.up, transform.position + Vector3.right, out rightRay, maxDistance: 2f, ~environmentLayer )) { + // thisPlayer.controls.graph.SendEvent("RightRay", true, null); + // } + // } } diff --git a/Assets/Scripts/Wilds.Core.asmdef b/Assets/Scripts/Wilds.Core.asmdef index f468922..109462f 100644 --- a/Assets/Scripts/Wilds.Core.asmdef +++ b/Assets/Scripts/Wilds.Core.asmdef @@ -9,8 +9,7 @@ "GUID:de4e6084e6d474788bb8c799d6b461ec", "GUID:d8b63aba1907145bea998dd612889d6b", "GUID:4307f53044263cf4b835bd812fc161a4", - "GUID:4099e5319e98558428028d54bc62664e", - "GUID:1826c0224c0d048b88112c79bbb0cd85" + "GUID:e0cd26848372d4e5c891c569017e11f1" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Settings/Resources/ALINE.asset b/Assets/Settings/Resources/ALINE.asset index 9374594..7ec3d6d 100644 --- a/Assets/Settings/Resources/ALINE.asset +++ b/Assets/Settings/Resources/ALINE.asset @@ -17,7 +17,7 @@ MonoBehaviour: lineOpacity: 1 solidOpacity: 0.55 textOpacity: 1 - lineOpacityBehindObjects: 0.12 - solidOpacityBehindObjects: 0.45 - textOpacityBehindObjects: 0.9 + lineOpacityBehindObjects: 0.3186 + solidOpacityBehindObjects: 0.1286 + textOpacityBehindObjects: 0.0881 curveResolution: 1 diff --git a/Documents/Graphics/UI/Icons.afdesign b/Documents/Graphics/UI/Icons.afdesign new file mode 100644 index 0000000..8ba22df Binary files /dev/null and b/Documents/Graphics/UI/Icons.afdesign differ diff --git a/ProjectSettings/Packages/com.unity.probuilder/Settings.json b/ProjectSettings/Packages/com.unity.probuilder/Settings.json index a2a08b5..6d11fc5 100644 --- a/ProjectSettings/Packages/com.unity.probuilder/Settings.json +++ b/ProjectSettings/Packages/com.unity.probuilder/Settings.json @@ -124,7 +124,7 @@ { "type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "key": "ShapeBuilder.LastSize.Cube", - "value": "{\"m_Value\":{\"x\":20.036033630371095,\"y\":1.0208016633987427,\"z\":-17.9393310546875}}" + "value": "{\"m_Value\":{\"x\":53.82322311401367,\"y\":3.7740979194641115,\"z\":159.09600830078126}}" }, { "type": "UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",