From 579b523a373d1add7e9817f270a63180e4e65816 Mon Sep 17 00:00:00 2001 From: Minimata Date: Fri, 6 Jun 2025 16:09:39 +0200 Subject: [PATCH] gd: basic weapon and readability refacto --- player_controller/PlayerController.tscn | 28 ++- player_controller/Scripts/PlayerController.cs | 176 +++++++++------- systems/dash/DashSystem.cs | 28 +-- .../inputs/{walk_mode => base_mode}/aim.tres | 0 .../{walk_mode => base_mode}/aim_cancel.tres | 0 .../{walk_mode => base_mode}/aim_release.tres | 0 .../{walk_mode => base_mode}/base_mode.tres | 197 +++++++++--------- .../inputs/{walk_mode => base_mode}/hit.tres | 0 .../inputs/{walk_mode => base_mode}/jump.tres | 0 .../inputs/{walk_mode => base_mode}/move.tres | 0 .../rotate_floorplane.tres | 0 .../{walk_mode => base_mode}/rotate_y.tres | 0 systems/weapon/WeaponSystem.cs | 21 ++ systems/weapon/WeaponSystem.cs.uid | 1 + systems/weapon/weapon.tscn | 13 ++ 15 files changed, 263 insertions(+), 201 deletions(-) rename systems/inputs/{walk_mode => base_mode}/aim.tres (100%) rename systems/inputs/{walk_mode => base_mode}/aim_cancel.tres (100%) rename systems/inputs/{walk_mode => base_mode}/aim_release.tres (100%) rename systems/inputs/{walk_mode => base_mode}/base_mode.tres (56%) rename systems/inputs/{walk_mode => base_mode}/hit.tres (100%) rename systems/inputs/{walk_mode => base_mode}/jump.tres (100%) rename systems/inputs/{walk_mode => base_mode}/move.tres (100%) rename systems/inputs/{walk_mode => base_mode}/rotate_floorplane.tres (100%) rename systems/inputs/{walk_mode => base_mode}/rotate_y.tres (100%) create mode 100644 systems/weapon/WeaponSystem.cs create mode 100644 systems/weapon/WeaponSystem.cs.uid create mode 100644 systems/weapon/weapon.tscn diff --git a/player_controller/PlayerController.tscn b/player_controller/PlayerController.tscn index b3c64f7..c3618d9 100644 --- a/player_controller/PlayerController.tscn +++ b/player_controller/PlayerController.tscn @@ -1,25 +1,25 @@ -[gd_scene load_steps=31 format=3 uid="uid://bei4nhkf8lwdo"] +[gd_scene load_steps=32 format=3 uid="uid://bei4nhkf8lwdo"] [ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"] -[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/walk_mode/base_mode.tres" id="3_cresl"] -[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/walk_mode/rotate_y.tres" id="4_rxwoh"] -[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/walk_mode/rotate_floorplane.tres" id="5_4u7i3"] +[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"] +[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"] +[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"] [ext_resource type="Script" uid="uid://dv7v1ywmbvvcd" path="res://player_controller/Scripts/HealthSystem.cs" id="5_umw0l"] [ext_resource type="Script" uid="uid://vuq8rjq3vegn" path="res://player_controller/Scripts/Stamina.cs" id="6_lxtc4"] [ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://player_controller/Scripts/StairsSystem.cs" id="7_bmt5a"] -[ext_resource type="Resource" uid="uid://dgfww8118d8gj" path="res://systems/inputs/walk_mode/aim.tres" id="7_cresl"] -[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/walk_mode/aim_release.tres" id="8_lhb11"] +[ext_resource type="Resource" uid="uid://dgfww8118d8gj" path="res://systems/inputs/base_mode/aim.tres" id="7_cresl"] +[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="8_lhb11"] [ext_resource type="Script" uid="uid://dd1yrt7eiiyf4" path="res://player_controller/Scripts/CapsuleCollider.cs" id="8_lmtjd"] [ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"] -[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/walk_mode/aim_cancel.tres" id="9_5p2qc"] +[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="9_5p2qc"] [ext_resource type="Script" uid="uid://bt0xv2q8iv1vn" path="res://player_controller/Scripts/Gravity.cs" id="9_lsueh"] -[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/walk_mode/jump.tres" id="10_4u7i3"] +[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="10_4u7i3"] [ext_resource type="Script" uid="uid://g8idirw62qe0" path="res://player_controller/Scripts/Bobbing.cs" id="10_7wk1w"] -[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/walk_mode/hit.tres" id="11_cresl"] +[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"] [ext_resource type="PackedScene" uid="uid://0ysqmqphq6mq" path="res://systems/head/head_system.tscn" id="11_rxwoh"] [ext_resource type="Script" uid="uid://b6k73aj5povgv" path="res://player_controller/Scripts/FieldOfView.cs" id="12_m2mxi"] [ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"] -[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/walk_mode/move.tres" id="17_h6vvl"] +[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="17_h6vvl"] [ext_resource type="PackedScene" uid="uid://cqduhd4opgwvm" path="res://systems/dash/dash_system.tscn" id="18_q5h8a"] [ext_resource type="Script" uid="uid://dyy5njw6pxoh4" path="res://systems/move/MoveSystem.cs" id="20_rxwoh"] [ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="22_rpwev"] @@ -28,6 +28,7 @@ [ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="26_infe6"] [ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="27_34snm"] [ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="28_n7qhm"] +[ext_resource type="PackedScene" uid="uid://ckm3d6k08a72u" path="res://systems/weapon/weapon.tscn" id="29_wv70j"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_xc2g5"] @@ -127,7 +128,6 @@ offset_bottom = 1.0 initial_node_to_watch = NodePath("../StateChart") [node name="StateChart" type="Node" parent="."] -unique_name_in_owner = true script = ExtResource("25_wv70j") metadata/_custom_type_script = "uid://couw105c3bde4" @@ -183,6 +183,12 @@ to = NodePath("../../Dashing") event = &"aim_pressed" delay_in_seconds = "0.0" +[node name="WeaponRoot" type="Node3D" parent="."] + +[node name="WeaponSystem" parent="WeaponRoot" instance=ExtResource("29_wv70j")] +transform = Transform3D(1, 0, 0, 0, 0.953043, 0.302836, 0, -0.302836, 0.953043, 0.45268, 1.44035, -0.692528) +skeleton = NodePath("../..") + [connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"] [connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"] [connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"] diff --git a/player_controller/Scripts/PlayerController.cs b/player_controller/Scripts/PlayerController.cs index 5c760d9..bbdb978 100644 --- a/player_controller/Scripts/PlayerController.cs +++ b/player_controller/Scripts/PlayerController.cs @@ -18,7 +18,8 @@ public partial class PlayerController : CharacterBody3D public HealthSystem HealthSystem; public MoveSystem MoveSystem; public TweenQueueSystem TweenQueueSystem; - public StateChart PlayerState; + public Node3D WeaponRoot; + public WeaponSystem WeaponSystem; private bool _movementEnabled = true; @@ -38,82 +39,89 @@ public partial class PlayerController : CharacterBody3D private bool _isAiming; private bool _dashCanceled; + private StateChart _playerState; + private StateChartState _weaponInHand; + private StateChartState _aiming; + private StateChartState _dashing; + private StateChartState _weaponThrown; + public override void _Ready() { + /////////////////////////// + // Getting components ///// + /////////////////////////// + + // General use stuff + TweenQueueSystem = GetNode("TweenQueueSystem"); + // Node3D mapNode = GetTree().Root.FindChild("Map", true, false) as Node3D; + + // Camera stuff + HeadSystem = GetNode("HeadSystem"); + Bobbing = GetNode("Bobbing"); + FieldOfView = GetNode("FieldOfView"); + Camera3D camera = GetNode("HeadSystem/CameraSmooth/Camera3D"); + Node3D cameraSmooth = GetNode("HeadSystem/CameraSmooth"); + ColorRect vignetteRect = GetNode( + "HeadSystem/CameraSmooth/Camera3D/CLVignette(Layer_1)/HealthVignetteRect"); + ColorRect distortionRect = GetNode( + "HeadSystem/CameraSmooth/Camera3D/CLDistortion(Layer_2)/HealthDistortionRect"); + ColorRect blurRect = GetNode("HeadSystem/CameraSmooth/Camera3D/CLBlur(Layer_2)/BlurRect"); + + // Movement stuff + WeaponRoot = GetNode("WeaponRoot"); + WeaponSystem = GetNode("WeaponRoot/WeaponSystem"); + MantleSystem = GetNode("MantleSystem"); + CapsuleCollider = GetNode("CapsuleCollider"); + Gravity = GetNode("Gravity"); + MoveSystem = GetNode("MoveSystem"); + DashSystem = GetNode("DashSystem"); + StairsSystem = GetNode("StairsSystem"); + RayCast3D stairsBelowRayCast3D = GetNode("StairsBelowRayCast3D"); + RayCast3D stairsAheadRayCast3D = GetNode("StairsAheadRayCast3D"); _headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS]; for (int i = 0; i < NUM_OF_HEAD_COLLISION_DETECTORS; i++) { _headCollisionDetectors[i] = GetNode( "HeadCollisionDetectors/HeadCollisionDetector" + i); } + + // RPG Stuff + Stamina = GetNode("Stamina"); + HealthSystem = GetNode("HealthSystem"); + + // State management + _playerState = StateChart.Of(GetNode("StateChart")); + _weaponInHand = StateChartState.Of(GetNode("StateChart/Root/WeaponInHand")); + _aiming = StateChartState.Of(GetNode("StateChart/Root/Aiming")); + _dashing = StateChartState.Of(GetNode("StateChart/Root/Dashing")); + _weaponThrown = StateChartState.Of(GetNode("StateChart/Root/WeaponThrown")); + + /////////////////////////// + // Initialize components // + /////////////////////////// + + // General use stuff + TweenQueueSystem.Init(this); - HeadSystem = GetNode("HeadSystem"); + // Camera stuff HeadSystem.Init(); + Bobbing.Init(camera); + FieldOfView.Init(camera); - // Get the state chart node and wrap it in a StateChart object like so, GetNode doesn't work - PlayerState = StateChart.Of(GetNode("%StateChart")); - - // Get the poisoned state node and wrap it in a State object, so we can easily - // interact with it from C#. - // _poisonedStateChartState = StateChartState.Of(GetNode("%Poisoned")); - - // Getting dependencies of the components (In godot we manage this from upwards to downwards not vice versa) - Camera3D camera = GetNode("HeadSystem/CameraSmooth/Camera3D"); - Node3D cameraSmooth = GetNode("HeadSystem/CameraSmooth"); - - RayCast3D stairsBelowRayCast3D = GetNode("StairsBelowRayCast3D"); - RayCast3D stairsAheadRayCast3D = GetNode("StairsAheadRayCast3D"); - + // Movement stuff // Getting universal setting from GODOT editor to be in sync float gravitySetting = (float)ProjectSettings.GetSetting("physics/3d/default_gravity"); - - ColorRect vignetteRect = GetNode( - "HeadSystem/CameraSmooth/Camera3D/CLVignette(Layer_1)/HealthVignetteRect"); - - ColorRect distortionRect = GetNode( - "HeadSystem/CameraSmooth/Camera3D/CLDistortion(Layer_2)/HealthDistortionRect"); - - ColorRect blurRect = GetNode("HeadSystem/CameraSmooth/Camera3D/CLBlur(Layer_2)/BlurRect"); - - // Node3D mapNode = GetTree().Root.FindChild("Map", true, false) as Node3D; - - // Getting components - - Bobbing = GetNode("Bobbing"); - Bobbing.Init(camera); - - FieldOfView = GetNode("FieldOfView"); - FieldOfView.Init(camera); - - CapsuleCollider = GetNode("CapsuleCollider"); - - Gravity = GetNode("Gravity"); Gravity.Init(gravitySetting); - - MantleSystem = GetNode("MantleSystem"); MantleSystem.Init(HeadSystem); - - TweenQueueSystem = GetNode("TweenQueueSystem"); - TweenQueueSystem.Init(this); - - MoveSystem = GetNode("MoveSystem"); var moveSystemParams = new MoveSystem.MoveSystemParameters(this, Gravity, MantleSystem, TweenQueueSystem, HeadSystem, CapsuleCollider); MoveSystem.Init(moveSystemParams); - - Stamina = GetNode("Stamina"); - Stamina.SetSpeeds(MoveSystem.WalkSpeed, MoveSystem.SprintSpeed); - - StairsSystem = GetNode("StairsSystem"); StairsSystem.Init(stairsBelowRayCast3D, stairsAheadRayCast3D, cameraSmooth); - - DashSystem = GetNode("DashSystem"); DashSystem.Init(HeadSystem, camera, TweenQueueSystem); - DashSystem.DashEnded += OnDashEnded; - - HealthSystem = GetNode("HealthSystem"); + WeaponSystem.Init(HeadSystem, camera, TweenQueueSystem); + // RPG Stuff HealthSystem.HealthSystemInitParams healthSystemParams = new HealthSystem.HealthSystemInitParams() { Gravity = Gravity, @@ -125,6 +133,28 @@ public partial class PlayerController : CharacterBody3D BlurRect = blurRect, }; HealthSystem.Init(healthSystemParams); + Stamina.SetSpeeds(MoveSystem.WalkSpeed, MoveSystem.SprintSpeed); + + /////////////////////////// + // Signal setup /////////// + /////////////////////////// + + DashSystem.DashEnded += OnDashEnded; + + _dashing.StateEntered += OnDashStarted; + _weaponThrown.StateEntered += OnWeaponThrown; + } + + public void OnDashStarted() + { + DashSystem.Dash(); + } + + public void OnWeaponThrown() + { + var (hasHit, location, collisionPoint, collisionNormal) = DashSystem.DashComputation; + var (endWithMantle, dashLocation, mantleLocation) = DashSystem.DashResolve; + var weaponThrowVector = dashLocation - Position; } public void OnInputMove(Vector3 value) @@ -144,30 +174,26 @@ public partial class PlayerController : CharacterBody3D public void OnInputAimPressed() { - PlayerState.SendEvent("aim_pressed"); - - if (_dashCanceled) - return; - - DashSystem.PrepareDash(); + _playerState.SendEvent("aim_pressed"); } public void OnInputAimReleased() { - PlayerState.SendEvent("aim_released"); - if (!_dashCanceled) - DashSystem.Dash(); - _dashCanceled = false; + _playerState.SendEvent("aim_released"); } public void OnInputAimCanceled() { - PlayerState.SendEvent("aim_canceled"); - _dashCanceled = true; + _playerState.SendEvent("aim_canceled"); DashSystem.CancelDash(); } public void OnInputHitPressed() { - PlayerState.SendEvent("hit_pressed"); + _playerState.SendEvent("hit_pressed"); + } + + public void OnDashEnded() + { + _playerState.SendEvent("dash_ended"); } public void OnInputJumpPressed() @@ -178,19 +204,19 @@ public partial class PlayerController : CharacterBody3D if (!doesCapsuleHaveCrouchingHeight && !isPlayerDead) MoveSystem.Jump(IsOnFloor()); } - - public void OnDashEnded() - { - PlayerState.SendEvent("dash_ended"); - } - + public override void _PhysicsProcess(double delta) { - TweenQueueSystem.ProcessTweens(); + WeaponRoot.SetRotation(HeadSystem.Rotation); var isPlayerDead = HealthSystem.IsDead(); var isHeadTouchingCeiling = IsHeadTouchingCeiling(); + TweenQueueSystem.ProcessTweens(); + + if (_aiming.Active) + DashSystem.PrepareDash(); + var moveAroundParams = new MoveSystem.MoveAroundParameters( delta, _inputMove, diff --git a/systems/dash/DashSystem.cs b/systems/dash/DashSystem.cs index 88abcc1..875df91 100644 --- a/systems/dash/DashSystem.cs +++ b/systems/dash/DashSystem.cs @@ -2,9 +2,9 @@ namespace Movementtests.systems; -public record DashComputation(bool HasHit, Vector3 Location, Vector3 CollisionPoint, Vector3 CollisionNormal); +public record DashComputationRecord(bool HasHit, Vector3 Location, Vector3 CollisionPoint, Vector3 CollisionNormal); -public record DashResolve(bool EndWithMantle, Vector3 DashLocation, Vector3 MantleLocation); +public record DashResolveRecord(bool EndWithMantle, Vector3 DashLocation, Vector3 MantleLocation); public partial class DashSystem: Node3D { @@ -19,7 +19,9 @@ public partial class DashSystem: Node3D private MantleSystem _mantleSystem; private MeshInstance3D _dashTarget; - private DashResolve _dashResolve; + public DashResolveRecord DashResolve { get; set; } + public DashComputationRecord DashComputation { get; set; } + [Signal] public delegate void DashStartedEventHandler(); @@ -40,20 +42,20 @@ public partial class DashSystem: Node3D _dashTarget.SetVisible(false); } - private DashComputation ComputeDashLocation() + private DashComputationRecord ComputeDashLocation() { if (!_dashCast3D.IsColliding()) { - return new DashComputation(false, _dashCast3D.ToGlobal(_dashCast3D.TargetPosition), Vector3.Zero, Vector3.Zero); + return new DashComputationRecord(false, _dashCast3D.ToGlobal(_dashCast3D.TargetPosition), Vector3.Zero, Vector3.Zero); } var collisionPoint = _dashCast3D.GetCollisionPoint(0); var collisionNormal = _dashCast3D.GetCollisionNormal(0); var collisionShape = (SphereShape3D) _dashCast3D.GetShape(); var centerSphereLocation = collisionPoint + collisionNormal * collisionShape.Radius; - return new DashComputation(true, centerSphereLocation, collisionPoint, collisionNormal); + return new DashComputationRecord(true, centerSphereLocation, collisionPoint, collisionNormal); } - public DashResolve PrepareDash() + public void PrepareDash() { _dashTarget.SetVisible(false); @@ -62,7 +64,8 @@ public partial class DashSystem: Node3D _head.Rotation.Y, _camera.Rotation.Z)); - var (hasHit, location, collisionPoint, collisionNormal) = ComputeDashLocation(); + DashComputation = ComputeDashLocation(); + var (hasHit, location, collisionPoint, collisionNormal) = DashComputation; var shouldMantle = false; var mantleLocation = Vector3.Zero; @@ -78,8 +81,7 @@ public partial class DashSystem: Node3D _dashTarget.SetVisible(true); _dashTarget.SetGlobalPosition(location); - _dashResolve = new DashResolve(shouldMantle, location, mantleLocation); - return _dashResolve; + DashResolve = new DashResolveRecord(shouldMantle, location, mantleLocation); } public void CancelDash() @@ -96,12 +98,12 @@ public partial class DashSystem: Node3D { EmitSignal(SignalName.DashStarted); _dashTarget.SetVisible(false); - var dashTweenInputs = new TweenQueueSystem.TweenInputs(_dashResolve.DashLocation, 0.1f); + var dashTweenInputs = new TweenQueueSystem.TweenInputs(DashResolve.DashLocation, 0.1f); var dashTween = _tweenQueueSystem.TweenToLocation(dashTweenInputs); dashTween.Finished += DashTweenEnded; - if (_dashResolve.EndWithMantle) + if (DashResolve.EndWithMantle) { - _tweenQueueSystem.QueueTween(_dashResolve.MantleLocation, 0.2f); + _tweenQueueSystem.QueueTween(DashResolve.MantleLocation, 0.2f); } } } diff --git a/systems/inputs/walk_mode/aim.tres b/systems/inputs/base_mode/aim.tres similarity index 100% rename from systems/inputs/walk_mode/aim.tres rename to systems/inputs/base_mode/aim.tres diff --git a/systems/inputs/walk_mode/aim_cancel.tres b/systems/inputs/base_mode/aim_cancel.tres similarity index 100% rename from systems/inputs/walk_mode/aim_cancel.tres rename to systems/inputs/base_mode/aim_cancel.tres diff --git a/systems/inputs/walk_mode/aim_release.tres b/systems/inputs/base_mode/aim_release.tres similarity index 100% rename from systems/inputs/walk_mode/aim_release.tres rename to systems/inputs/base_mode/aim_release.tres diff --git a/systems/inputs/walk_mode/base_mode.tres b/systems/inputs/base_mode/base_mode.tres similarity index 56% rename from systems/inputs/walk_mode/base_mode.tres rename to systems/inputs/base_mode/base_mode.tres index 5723232..c1e947d 100644 --- a/systems/inputs/walk_mode/base_mode.tres +++ b/systems/inputs/base_mode/base_mode.tres @@ -1,265 +1,258 @@ -[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=63 format=3 uid="uid://bl5crtu1gkrtr"] +[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=60 format=3 uid="uid://bl5crtu1gkrtr"] -[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_0pi3k"] -[ext_resource type="Script" uid="uid://dsa1dnifd6w32" path="res://addons/guide/guide_mapping_context.gd" id="2_ho3ad"] -[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/walk_mode/move.tres" id="2_p4e1v"] -[ext_resource type="Script" uid="uid://mtx1unc2aqn7" path="res://addons/guide/guide_input_mapping.gd" id="3_ufouq"] -[ext_resource type="Script" uid="uid://doauobik3xyea" path="res://addons/guide/inputs/guide_input_joy_axis_2d.gd" id="4_oapce"] -[ext_resource type="Script" uid="uid://bl8rjl4oaldje" path="res://addons/guide/modifiers/guide_modifier.gd" id="5_j3mg7"] -[ext_resource type="Script" uid="uid://bm5gjgadon6hb" path="res://addons/guide/modifiers/guide_modifier_input_swizzle.gd" id="6_8w5gu"] -[ext_resource type="Script" uid="uid://c47lkb48itd6l" path="res://addons/guide/modifiers/guide_modifier_deadzone.gd" id="7_xt1x5"] -[ext_resource type="Script" uid="uid://x74mnwgr08a7" path="res://addons/guide/triggers/guide_trigger.gd" id="8_nf3uo"] -[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/walk_mode/rotate_y.tres" id="9_paxxe"] -[ext_resource type="Script" uid="uid://bbhoxsiqwo07l" path="res://addons/guide/inputs/guide_input_joy_axis_1d.gd" id="10_500v3"] -[ext_resource type="Script" uid="uid://bjm4myqxg4phm" path="res://addons/guide/modifiers/guide_modifier_scale.gd" id="11_ew1hw"] -[ext_resource type="Script" uid="uid://ckggy40lm0vjc" path="res://addons/guide/modifiers/guide_modifier_negate.gd" id="12_u76sm"] -[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/walk_mode/rotate_floorplane.tres" id="13_3y0c4"] -[ext_resource type="Resource" uid="uid://dgfww8118d8gj" path="res://systems/inputs/walk_mode/aim.tres" id="14_bi271"] -[ext_resource type="Script" uid="uid://b4cdrn4paoj3i" path="res://addons/guide/triggers/guide_trigger_down.gd" id="15_dng4t"] -[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/walk_mode/aim_release.tres" id="16_34gm1"] -[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="17_sxu4n"] -[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/walk_mode/aim_cancel.tres" id="18_4dlli"] -[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="19_2murt"] -[ext_resource type="Script" uid="uid://brsxcrai2te83" path="res://addons/guide/triggers/guide_trigger_chorded_action.gd" id="20_xcfo4"] -[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="21_k8ji4"] -[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/walk_mode/jump.tres" id="22_ufouq"] -[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/walk_mode/hit.tres" id="23_oapce"] +[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"] +[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"] +[ext_resource type="Script" uid="uid://mtx1unc2aqn7" path="res://addons/guide/guide_input_mapping.gd" id="3_yp12v"] +[ext_resource type="Script" uid="uid://doauobik3xyea" path="res://addons/guide/inputs/guide_input_joy_axis_2d.gd" id="4_1rw8g"] +[ext_resource type="Script" uid="uid://bl8rjl4oaldje" path="res://addons/guide/modifiers/guide_modifier.gd" id="5_0qat1"] +[ext_resource type="Script" uid="uid://bm5gjgadon6hb" path="res://addons/guide/modifiers/guide_modifier_input_swizzle.gd" id="6_li5ak"] +[ext_resource type="Script" uid="uid://c47lkb48itd6l" path="res://addons/guide/modifiers/guide_modifier_deadzone.gd" id="7_si4d4"] +[ext_resource type="Script" uid="uid://x74mnwgr08a7" path="res://addons/guide/triggers/guide_trigger.gd" id="8_2tfaw"] +[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="9_q86qg"] +[ext_resource type="Script" uid="uid://bbhoxsiqwo07l" path="res://addons/guide/inputs/guide_input_joy_axis_1d.gd" id="10_cvxqo"] +[ext_resource type="Script" uid="uid://bjm4myqxg4phm" path="res://addons/guide/modifiers/guide_modifier_scale.gd" id="11_j3axn"] +[ext_resource type="Script" uid="uid://ckggy40lm0vjc" path="res://addons/guide/modifiers/guide_modifier_negate.gd" id="12_kxb2c"] +[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="13_v2ywt"] +[ext_resource type="Resource" uid="uid://dgfww8118d8gj" path="res://systems/inputs/base_mode/aim.tres" id="14_vtk18"] +[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="15_fykw6"] +[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="16_rvpjj"] +[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="17_s8kjn"] +[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="18_vibkn"] +[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="19_qkgmj"] +[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="21_818lq"] +[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="22_2hs2y"] +[ext_resource type="Script" uid="uid://dsa1dnifd6w32" path="res://addons/guide/guide_mapping_context.gd" id="23_llfhp"] [sub_resource type="Resource" id="Resource_vkvga"] -script = ExtResource("4_oapce") +script = ExtResource("4_1rw8g") x = 0 y = 1 joy_index = -1 [sub_resource type="Resource" id="Resource_kb1id"] -script = ExtResource("6_8w5gu") +script = ExtResource("6_li5ak") order = 2 [sub_resource type="Resource" id="Resource_rwam6"] -script = ExtResource("7_xt1x5") +script = ExtResource("7_si4d4") lower_threshold = 0.1 upper_threshold = 1.0 [sub_resource type="Resource" id="Resource_1igva"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_vkvga") -modifiers = Array[ExtResource("5_j3mg7")]([SubResource("Resource_kb1id"), SubResource("Resource_rwam6")]) -triggers = Array[ExtResource("8_nf3uo")]([]) +modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_kb1id"), SubResource("Resource_rwam6")]) +triggers = Array[ExtResource("8_2tfaw")]([]) [sub_resource type="Resource" id="Resource_88x08"] -script = ExtResource("1_0pi3k") -action = ExtResource("2_p4e1v") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_1igva")]) +script = ExtResource("1_qmhk6") +action = ExtResource("2_g6bbx") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1igva")]) metadata/_guide_input_mappings_collapsed = false [sub_resource type="Resource" id="Resource_05q5j"] -script = ExtResource("10_500v3") +script = ExtResource("10_cvxqo") axis = 2 joy_index = -1 [sub_resource type="Resource" id="Resource_tn8ci"] -script = ExtResource("7_xt1x5") +script = ExtResource("7_si4d4") lower_threshold = 0.2 upper_threshold = 1.0 [sub_resource type="Resource" id="Resource_1koh7"] -script = ExtResource("11_ew1hw") +script = ExtResource("11_j3axn") scale = Vector3(0.3, 0.3, 0.3) apply_delta_time = false [sub_resource type="Resource" id="Resource_eep0a"] -script = ExtResource("12_u76sm") +script = ExtResource("12_kxb2c") x = true y = true z = true [sub_resource type="Resource" id="Resource_dew8i"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_05q5j") -modifiers = Array[ExtResource("5_j3mg7")]([SubResource("Resource_tn8ci"), SubResource("Resource_1koh7"), SubResource("Resource_eep0a")]) -triggers = Array[ExtResource("8_nf3uo")]([]) +modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_tn8ci"), SubResource("Resource_1koh7"), SubResource("Resource_eep0a")]) +triggers = Array[ExtResource("8_2tfaw")]([]) [sub_resource type="Resource" id="Resource_tgr2g"] -script = ExtResource("1_0pi3k") -action = ExtResource("9_paxxe") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_dew8i")]) +script = ExtResource("1_qmhk6") +action = ExtResource("9_q86qg") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_dew8i")]) metadata/_guide_input_mappings_collapsed = true [sub_resource type="Resource" id="Resource_pf0ii"] -script = ExtResource("10_500v3") +script = ExtResource("10_cvxqo") axis = 3 joy_index = -1 [sub_resource type="Resource" id="Resource_nh7x4"] -script = ExtResource("7_xt1x5") +script = ExtResource("7_si4d4") lower_threshold = 0.2 upper_threshold = 1.0 [sub_resource type="Resource" id="Resource_04n84"] -script = ExtResource("11_ew1hw") +script = ExtResource("11_j3axn") scale = Vector3(0.1, 0.1, 0.1) apply_delta_time = false [sub_resource type="Resource" id="Resource_m3aj7"] -script = ExtResource("12_u76sm") +script = ExtResource("12_kxb2c") x = true y = true z = true [sub_resource type="Resource" id="Resource_qu2wi"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_pf0ii") -modifiers = Array[ExtResource("5_j3mg7")]([SubResource("Resource_nh7x4"), SubResource("Resource_04n84"), SubResource("Resource_m3aj7")]) -triggers = Array[ExtResource("8_nf3uo")]([]) +modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_nh7x4"), SubResource("Resource_04n84"), SubResource("Resource_m3aj7")]) +triggers = Array[ExtResource("8_2tfaw")]([]) [sub_resource type="Resource" id="Resource_iarn8"] -script = ExtResource("1_0pi3k") -action = ExtResource("13_3y0c4") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_qu2wi")]) +script = ExtResource("1_qmhk6") +action = ExtResource("13_v2ywt") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_qu2wi")]) metadata/_guide_input_mappings_collapsed = true [sub_resource type="Resource" id="Resource_ufouq"] -script = ExtResource("10_500v3") +script = ExtResource("10_cvxqo") axis = 4 joy_index = -1 -[sub_resource type="Resource" id="Resource_n42ky"] -script = ExtResource("15_dng4t") +[sub_resource type="Resource" id="Resource_ib0yi"] +script = ExtResource("15_fykw6") actuation_threshold = 0.5 [sub_resource type="Resource" id="Resource_qbthx"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_ufouq") -modifiers = Array[ExtResource("5_j3mg7")]([]) -triggers = Array[ExtResource("8_nf3uo")]([SubResource("Resource_n42ky")]) +modifiers = Array[ExtResource("5_0qat1")]([]) +triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_ib0yi")]) [sub_resource type="Resource" id="Resource_0hmrk"] -script = ExtResource("1_0pi3k") -action = ExtResource("14_bi271") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_qbthx")]) +script = ExtResource("1_qmhk6") +action = ExtResource("14_vtk18") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_qbthx")]) metadata/_guide_input_mappings_collapsed = false [sub_resource type="Resource" id="Resource_cqc4k"] -script = ExtResource("10_500v3") +script = ExtResource("10_cvxqo") axis = 4 joy_index = -1 [sub_resource type="Resource" id="Resource_vanwy"] -script = ExtResource("17_sxu4n") +script = ExtResource("17_s8kjn") actuation_threshold = 0.5 [sub_resource type="Resource" id="Resource_bkx7d"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_cqc4k") -modifiers = Array[ExtResource("5_j3mg7")]([]) -triggers = Array[ExtResource("8_nf3uo")]([SubResource("Resource_vanwy")]) +modifiers = Array[ExtResource("5_0qat1")]([]) +triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_vanwy")]) [sub_resource type="Resource" id="Resource_iihs4"] -script = ExtResource("1_0pi3k") -action = ExtResource("16_34gm1") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_bkx7d")]) +script = ExtResource("1_qmhk6") +action = ExtResource("16_rvpjj") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_bkx7d")]) metadata/_guide_input_mappings_collapsed = true [sub_resource type="Resource" id="Resource_lfx76"] -script = ExtResource("19_2murt") +script = ExtResource("19_qkgmj") button = 2 joy_index = -1 -[sub_resource type="Resource" id="Resource_hijs6"] -script = ExtResource("20_xcfo4") -action = ExtResource("14_bi271") -actuation_threshold = 0.5 - [sub_resource type="Resource" id="Resource_oruo7"] -script = ExtResource("21_k8ji4") +script = ExtResource("15_fykw6") actuation_threshold = 0.5 [sub_resource type="Resource" id="Resource_4ee3d"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_lfx76") -modifiers = Array[ExtResource("5_j3mg7")]([]) -triggers = Array[ExtResource("8_nf3uo")]([SubResource("Resource_hijs6"), SubResource("Resource_oruo7")]) +modifiers = Array[ExtResource("5_0qat1")]([]) +triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_oruo7")]) [sub_resource type="Resource" id="Resource_0s4kt"] -script = ExtResource("1_0pi3k") -action = ExtResource("18_4dlli") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_4ee3d")]) +script = ExtResource("1_qmhk6") +action = ExtResource("18_vibkn") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_4ee3d")]) [sub_resource type="Resource" id="Resource_oapce"] -script = ExtResource("19_2murt") +script = ExtResource("19_qkgmj") button = 0 joy_index = -1 [sub_resource type="Resource" id="Resource_j3mg7"] -script = ExtResource("21_k8ji4") +script = ExtResource("15_fykw6") actuation_threshold = 0.5 [sub_resource type="Resource" id="Resource_8w5gu"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_oapce") -modifiers = Array[ExtResource("5_j3mg7")]([]) -triggers = Array[ExtResource("8_nf3uo")]([SubResource("Resource_j3mg7")]) +modifiers = Array[ExtResource("5_0qat1")]([]) +triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_j3mg7")]) metadata/_guide_triggers_collapsed = false [sub_resource type="Resource" id="Resource_xt1x5"] -script = ExtResource("1_0pi3k") -action = ExtResource("22_ufouq") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_8w5gu")]) +script = ExtResource("1_qmhk6") +action = ExtResource("21_818lq") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_8w5gu")]) [sub_resource type="Resource" id="Resource_nf3uo"] -script = ExtResource("19_2murt") +script = ExtResource("19_qkgmj") button = 10 joy_index = -1 [sub_resource type="Resource" id="Resource_paxxe"] -script = ExtResource("21_k8ji4") +script = ExtResource("15_fykw6") actuation_threshold = 0.5 [sub_resource type="Resource" id="Resource_500v3"] -script = ExtResource("3_ufouq") +script = ExtResource("3_yp12v") override_action_settings = false is_remappable = false display_name = "" display_category = "" input = SubResource("Resource_nf3uo") -modifiers = Array[ExtResource("5_j3mg7")]([]) -triggers = Array[ExtResource("8_nf3uo")]([SubResource("Resource_paxxe")]) +modifiers = Array[ExtResource("5_0qat1")]([]) +triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_paxxe")]) [sub_resource type="Resource" id="Resource_ew1hw"] -script = ExtResource("1_0pi3k") -action = ExtResource("23_oapce") -input_mappings = Array[ExtResource("3_ufouq")]([SubResource("Resource_500v3")]) +script = ExtResource("1_qmhk6") +action = ExtResource("22_2hs2y") +input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_500v3")]) [resource] -script = ExtResource("2_ho3ad") +script = ExtResource("23_llfhp") display_name = "" -mappings = Array[ExtResource("1_0pi3k")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_0hmrk"), SubResource("Resource_iihs4"), SubResource("Resource_0s4kt"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw")]) +mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_0hmrk"), SubResource("Resource_iihs4"), SubResource("Resource_0s4kt"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw")]) metadata/_custom_type_script = "uid://dsa1dnifd6w32" diff --git a/systems/inputs/walk_mode/hit.tres b/systems/inputs/base_mode/hit.tres similarity index 100% rename from systems/inputs/walk_mode/hit.tres rename to systems/inputs/base_mode/hit.tres diff --git a/systems/inputs/walk_mode/jump.tres b/systems/inputs/base_mode/jump.tres similarity index 100% rename from systems/inputs/walk_mode/jump.tres rename to systems/inputs/base_mode/jump.tres diff --git a/systems/inputs/walk_mode/move.tres b/systems/inputs/base_mode/move.tres similarity index 100% rename from systems/inputs/walk_mode/move.tres rename to systems/inputs/base_mode/move.tres diff --git a/systems/inputs/walk_mode/rotate_floorplane.tres b/systems/inputs/base_mode/rotate_floorplane.tres similarity index 100% rename from systems/inputs/walk_mode/rotate_floorplane.tres rename to systems/inputs/base_mode/rotate_floorplane.tres diff --git a/systems/inputs/walk_mode/rotate_y.tres b/systems/inputs/base_mode/rotate_y.tres similarity index 100% rename from systems/inputs/walk_mode/rotate_y.tres rename to systems/inputs/base_mode/rotate_y.tres diff --git a/systems/weapon/WeaponSystem.cs b/systems/weapon/WeaponSystem.cs new file mode 100644 index 0000000..59c9947 --- /dev/null +++ b/systems/weapon/WeaponSystem.cs @@ -0,0 +1,21 @@ +using Godot; + +namespace Movementtests.systems; + +public partial class WeaponSystem : MeshInstance3D +{ + private Node3D _head; + private ShapeCast3D _dashCast3D; + private Camera3D _camera; + private TweenQueueSystem _tweenQueueSystem; + + private MantleSystem _mantleSystem; + private MeshInstance3D _dashTarget; + + public void Init(Node3D head, Camera3D camera, TweenQueueSystem tweenQueueSystem) + { + _head = head; + _camera = camera; + _tweenQueueSystem = tweenQueueSystem; + } +} \ No newline at end of file diff --git a/systems/weapon/WeaponSystem.cs.uid b/systems/weapon/WeaponSystem.cs.uid new file mode 100644 index 0000000..b49c8f2 --- /dev/null +++ b/systems/weapon/WeaponSystem.cs.uid @@ -0,0 +1 @@ +uid://iii3wfto4t5b diff --git a/systems/weapon/weapon.tscn b/systems/weapon/weapon.tscn new file mode 100644 index 0000000..11b11fc --- /dev/null +++ b/systems/weapon/weapon.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://ckm3d6k08a72u"] + +[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"] + +[sub_resource type="CylinderMesh" id="CylinderMesh_q5h8a"] +top_radius = 0.01 +bottom_radius = 0.01 +height = 1.0 + +[node name="Weapon" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +mesh = SubResource("CylinderMesh_q5h8a") +script = ExtResource("1_csqwk")