From 175e67d2d6bf28bb2f3a85bb92a09b2ec994bfe6 Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 17:55:02 +0100 Subject: [PATCH 01/12] export fix --- .gitea/workflows/main.yaml | 1 + .gitea/workflows/release-branch.yaml | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index 6bf22be6..7e1d43a9 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -105,6 +105,7 @@ jobs: run: | mkdir -v -p build/windows ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe + ls -la build/windows # - name: Setup Butler # shell: bash diff --git a/.gitea/workflows/release-branch.yaml b/.gitea/workflows/release-branch.yaml index cd1c49a7..f45472bf 100644 --- a/.gitea/workflows/release-branch.yaml +++ b/.gitea/workflows/release-branch.yaml @@ -63,6 +63,7 @@ jobs: run: | mkdir -v -p build/windows ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --build-solutions --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe + ls -la build/windows zip -r Windows.zip build/windows - name: Upload Windows to itch.io shell: bash @@ -79,7 +80,7 @@ jobs: mkdir -v -p build/windowsArm ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --build-solutions --export-release "Windows ARM" build/windowsArm/${{ env.GAME_NAME }}.exe zip -r WindowsArm.zip build/windowsArm - - name: Upload Windows to itch.io + - name: Upload Windows ARM to itch.io shell: bash env: BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }} @@ -94,7 +95,7 @@ jobs: mkdir -v -p build/linux ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Linux/X11" build/linux/${{ env.GAME_NAME }}.x86_64 zip -r Linux.zip build/linux - - name: Upload Windows to itch.io + - name: Upload Linux to itch.io shell: bash env: BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }} @@ -109,7 +110,7 @@ jobs: mkdir -v -p build/mac ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "macOS" build/mac/${{ env.GAME_NAME }}.zip zip -r Mac.zip build/mac - - name: Upload Windows to itch.io + - name: Upload Mac to itch.io shell: bash env: BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }} -- 2.49.1 From 6c4454848acee630b7e4dfb48cffa0d70d406187 Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 18:15:50 +0100 Subject: [PATCH 02/12] removed something that has nothing to do on the vcs --- .gitignore | 1 + Movement tests.sln.DotSettings.user | 15 --------------- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 Movement tests.sln.DotSettings.user diff --git a/.gitignore b/.gitignore index 82c2b023..b6a141fa 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ *.suo *.user _ReSharper.* +*.DotSettings.user bin obj packages diff --git a/Movement tests.sln.DotSettings.user b/Movement tests.sln.DotSettings.user deleted file mode 100644 index 24317e8e..00000000 --- a/Movement tests.sln.DotSettings.user +++ /dev/null @@ -1,15 +0,0 @@ - - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - - - <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <Solution /> -</SessionState> - D:\Godot\Projects\movement-tests\.runsettings - True \ No newline at end of file -- 2.49.1 From 22e8c278788fa8cde5b88c4d74d2921afa06ca06 Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 18:36:18 +0100 Subject: [PATCH 03/12] trying somthing --- Movement tests.csproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Movement tests.csproj b/Movement tests.csproj index 5ad057f8..6d6d122a 100644 --- a/Movement tests.csproj +++ b/Movement tests.csproj @@ -125,8 +125,7 @@ - - + -- 2.49.1 From 3a21f00528c5ceec337b67fea9c0e04f159683d3 Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 18:42:46 +0100 Subject: [PATCH 04/12] removing tests because they might break the solution --- Movement tests.csproj | 1 - tests/components/DamageComponentUnitTest.cs | 101 ------------ .../components/DamageComponentUnitTest.cs.uid | 1 - tests/components/HealthComponentUnitTest.cs | 55 ------- .../components/HealthComponentUnitTest.cs.uid | 1 - .../components/KnockbackComponentUnitTest.cs | 32 ---- .../KnockbackComponentUnitTest.cs.uid | 1 - tests/components/MovementSystemUnitTest.cs | 32 ---- .../components/MovementSystemUnitTest.cs.uid | 1 - tests/enemies/EnemyUnitTest.cs | 30 ---- tests/enemies/EnemyUnitTest.cs.uid | 1 - tests/player/DashSystemUnitTest.cs | 55 ------- tests/player/DashSystemUnitTest.cs.uid | 1 - tests/player/HeadSystemUnitTest.cs | 91 ----------- tests/player/HeadSystemUnitTest.cs.uid | 1 - tests/player/PlayerControllerUnitTest.cs | 149 ------------------ tests/player/PlayerControllerUnitTest.cs.uid | 1 - tests/player/WeaponSystemUnitTest.cs | 51 ------ tests/player/WeaponSystemUnitTest.cs.uid | 1 - .../interactions/PlayerInteractionsTest.cs | 50 ------ .../PlayerInteractionsTest.cs.uid | 1 - .../player_interactions_scene.tscn | 35 ---- tests/player/movement/PlayerMovementTest.cs | 109 ------------- .../player/movement/PlayerMovementTest.cs.uid | 1 - .../movement/player_movement_scene.tscn | 35 ---- 25 files changed, 837 deletions(-) delete mode 100644 tests/components/DamageComponentUnitTest.cs delete mode 100644 tests/components/DamageComponentUnitTest.cs.uid delete mode 100644 tests/components/HealthComponentUnitTest.cs delete mode 100644 tests/components/HealthComponentUnitTest.cs.uid delete mode 100644 tests/components/KnockbackComponentUnitTest.cs delete mode 100644 tests/components/KnockbackComponentUnitTest.cs.uid delete mode 100644 tests/components/MovementSystemUnitTest.cs delete mode 100644 tests/components/MovementSystemUnitTest.cs.uid delete mode 100644 tests/enemies/EnemyUnitTest.cs delete mode 100644 tests/enemies/EnemyUnitTest.cs.uid delete mode 100644 tests/player/DashSystemUnitTest.cs delete mode 100644 tests/player/DashSystemUnitTest.cs.uid delete mode 100644 tests/player/HeadSystemUnitTest.cs delete mode 100644 tests/player/HeadSystemUnitTest.cs.uid delete mode 100644 tests/player/PlayerControllerUnitTest.cs delete mode 100644 tests/player/PlayerControllerUnitTest.cs.uid delete mode 100644 tests/player/WeaponSystemUnitTest.cs delete mode 100644 tests/player/WeaponSystemUnitTest.cs.uid delete mode 100644 tests/player/interactions/PlayerInteractionsTest.cs delete mode 100644 tests/player/interactions/PlayerInteractionsTest.cs.uid delete mode 100644 tests/player/interactions/player_interactions_scene.tscn delete mode 100644 tests/player/movement/PlayerMovementTest.cs delete mode 100644 tests/player/movement/PlayerMovementTest.cs.uid delete mode 100644 tests/player/movement/player_movement_scene.tscn diff --git a/Movement tests.csproj b/Movement tests.csproj index 6d6d122a..11a9afa1 100644 --- a/Movement tests.csproj +++ b/Movement tests.csproj @@ -125,7 +125,6 @@ - diff --git a/tests/components/DamageComponentUnitTest.cs b/tests/components/DamageComponentUnitTest.cs deleted file mode 100644 index 984a78c0..00000000 --- a/tests/components/DamageComponentUnitTest.cs +++ /dev/null @@ -1,101 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class DamageComponentUnitTest -{ - [TestCase] - public void DamageModifierAppliesWhenTypeMatches() - { - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var modifier = new RDamageModifier(EDamageTypes.Normal, 2.0f); - var signalTriggered = false; - modifier.DamageTaken += (_, _) => signalTriggered = true; - - var result = modifier.TakeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(20.0f); - AssertBool(signalTriggered).IsTrue(); - } - - [TestCase] - public void DamageModifierIgnoresWhenTypeDifferent() - { - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var modifier = new RDamageModifier(EDamageTypes.Fire, 3.0f); - var signalTriggered = false; - modifier.DamageTaken += (_, _) => signalTriggered = true; - - var result = modifier.TakeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); - AssertBool(signalTriggered).IsFalse(); // No damage actually taken - } - - [TestCase] - public void DamageableSumsAllModifiers() - { - var mod1 = new RDamageModifier(EDamageTypes.Normal, 1.0f); - var mod2 = new RDamageModifier(EDamageTypes.Normal, 0.5f); - - var damageable = new CDamageable(); - damageable.DamageModifiers = new[] { mod1, mod2 }; - var signalTriggered = false; - damageable.DamageTaken += (_, _) => signalTriggered = true; - - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var result = damageable.TakeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(15.0f); - AssertBool(signalTriggered).IsTrue(); - } - - [TestCase] - public void ComputeDamageModifierAppliesWhenTypeMatches() - { - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var modifier = new RDamageModifier(EDamageTypes.Normal, 2.0f); - var signalTriggered = false; - modifier.DamageTaken += (_, _) => signalTriggered = true; - - var result = modifier.ComputeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(20.0f); - AssertBool(signalTriggered).IsFalse(); - } - [TestCase] - public void ComputeDamageModifierIgnoresWhenTypeDifferent() - { - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var modifier = new RDamageModifier(EDamageTypes.Fire, 3.0f); - var signalTriggered = false; - modifier.DamageTaken += (_, _) => signalTriggered = true; - - var result = modifier.ComputeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); - AssertBool(signalTriggered).IsFalse(); - } - [TestCase] - public void ComputeDamageableSumsAllModifiers() - { - var mod1 = new RDamageModifier(EDamageTypes.Normal, 1.0f); - var mod2 = new RDamageModifier(EDamageTypes.Normal, 0.5f); - - var cDamageable = new CDamageable(); - cDamageable.DamageModifiers = new[] { mod1, mod2 }; - var signalTriggered = false; - cDamageable.DamageTaken += (_, _) => signalTriggered = true; - - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - var result = cDamageable.ComputeDamage(input); - - AssertFloat(result.Damage.DamageDealt).IsEqual(15.0f); - AssertBool(signalTriggered).IsFalse(); - } -} diff --git a/tests/components/DamageComponentUnitTest.cs.uid b/tests/components/DamageComponentUnitTest.cs.uid deleted file mode 100644 index 1351834c..00000000 --- a/tests/components/DamageComponentUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://db6rva7uccppc diff --git a/tests/components/HealthComponentUnitTest.cs b/tests/components/HealthComponentUnitTest.cs deleted file mode 100644 index 63d1cb0e..00000000 --- a/tests/components/HealthComponentUnitTest.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class HealthComponentUnitTest -{ - [TestCase] - public void ReadyInitializesCurrentHealth() - { - var cHealth = new CHealth(); - cHealth.RHealth = new RHealth(150.0f); - cHealth._Ready(); - AssertFloat(cHealth.CurrentHealth).IsEqual(150.0f); - } - - [TestCase] - public void ReduceHealthDecreasesAndDoesNotDeplete() - { - var cHealth = new CHealth(); - cHealth.RHealth = new RHealth(100.0f); - cHealth.CurrentHealth = 100.0f; - - var damage = new DamageRecord(Vector3.Zero, new RDamage(25.0f, EDamageTypes.Normal)); - var record = cHealth.ReduceHealth(source: null!, damageRecord: damage); - - AssertFloat(cHealth.CurrentHealth).IsEqual(75.0f); - AssertFloat(record.CurrentHealth).IsEqual(75.0f); - AssertFloat(record.PreviousHealth).IsEqual(100.0f); - AssertFloat(record.MaxHealth).IsEqual(100.0f); - } - - [TestCase] - public void ReduceHealthTriggersDepletionToZero() - { - var cHealth = new CHealth(); - cHealth.RHealth = new RHealth(50.0f); - cHealth.CurrentHealth = 50.0f; - - bool depleted = false; - cHealth.HealthDepleted += _ => depleted = true; - - var damage = new DamageRecord(Vector3.Zero, new RDamage(100.0f, EDamageTypes.Normal)); - var record = cHealth.ReduceHealth(source: null!, damageRecord: damage); - - AssertBool(depleted).IsTrue(); - AssertFloat(cHealth.CurrentHealth).IsEqual(0.0f); - AssertFloat(record.CurrentHealth).IsEqual(-50.0f); - AssertFloat(record.MaxHealth).IsEqual(50.0f); - } -} diff --git a/tests/components/HealthComponentUnitTest.cs.uid b/tests/components/HealthComponentUnitTest.cs.uid deleted file mode 100644 index 00cee7a1..00000000 --- a/tests/components/HealthComponentUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bd52i51hncgmf diff --git a/tests/components/KnockbackComponentUnitTest.cs b/tests/components/KnockbackComponentUnitTest.cs deleted file mode 100644 index 605d7f75..00000000 --- a/tests/components/KnockbackComponentUnitTest.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class KnockbackComponentUnitTest -{ - [TestCase] - public void RegisterAndComputeKnockback() - { - var cKnock = new CKnockback(); - cKnock.RKnockback = new RKnockback(2.0f); - cKnock.GlobalPosition = Vector3.Zero; - - var damage = new DamageRecord(new Vector3(10, 0, 0), new RDamage(0, EDamageTypes.Normal)); - var record = new KnockbackRecord(damage, 1.5f); - - cKnock.RegisterKnockback(record); - var force = cKnock.ComputeKnockback(); - - // Direction from source(10,0,0) to target(0,0,0) is (-1,0,0), scaled by modifier(2) and multiplier(1.5) => (-3,0,0) - AssertVector(force).IsEqual(new Vector3(-3, 0, 0)); - - // Second call returns zero since internal state resets - var second = cKnock.ComputeKnockback(); - AssertVector(second).IsEqual(Vector3.Zero); - } -} diff --git a/tests/components/KnockbackComponentUnitTest.cs.uid b/tests/components/KnockbackComponentUnitTest.cs.uid deleted file mode 100644 index c5795539..00000000 --- a/tests/components/KnockbackComponentUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bv0eionbgbig5 diff --git a/tests/components/MovementSystemUnitTest.cs b/tests/components/MovementSystemUnitTest.cs deleted file mode 100644 index 4e075eef..00000000 --- a/tests/components/MovementSystemUnitTest.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.scenes.movement; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class MovementSystemUnitTest -{ - [TestCase] - public void GroundedMovementAcceleratesAndAppliesGravity() - { - var move = new CGroundedMovement(); - move.RMovement = new RMovement(speed: 10.0f, acceleration: 1.0f, gravityModifier: 0.5f, targetHeight: 0.0f); - move.WallInFrontRayCast = new RayCast3D(); - //move.GlobalPosition = Vector3.Zero; - - var inputs = new MovementInputs( - Velocity: Vector3.Zero, - TargetLocation: new Vector3(10, 0, 0), - isOnFloor: false, - gravity: Vector3.Down * 9.8f, - delta: 1.0 - ); - - var v = move.ComputeVelocity(inputs); - - AssertVector(v).IsEqualApprox(new Vector3(10, -4.9f, 0), new Vector3(0.001f, 0.001f, 0.001f)); - } -} diff --git a/tests/components/MovementSystemUnitTest.cs.uid b/tests/components/MovementSystemUnitTest.cs.uid deleted file mode 100644 index 83493b96..00000000 --- a/tests/components/MovementSystemUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cofj5s4x74ay diff --git a/tests/enemies/EnemyUnitTest.cs b/tests/enemies/EnemyUnitTest.cs deleted file mode 100644 index cbd73410..00000000 --- a/tests/enemies/EnemyUnitTest.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class EnemyUnitTest -{ - [TestCase] - public void ComputeDamageNoComponent() - { - var enemy = new Enemy(); - var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); - - var result = enemy.ComputeDamage(input); - AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); - } - - [TestCase] - public void Unstun() - { - var enemy = new Enemy(); - enemy.IsStunned = true; - enemy.Unstun(); - AssertBool(enemy.IsStunned).IsFalse(); - } -} diff --git a/tests/enemies/EnemyUnitTest.cs.uid b/tests/enemies/EnemyUnitTest.cs.uid deleted file mode 100644 index 1c82d5ec..00000000 --- a/tests/enemies/EnemyUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cojxgcs6xqqoq diff --git a/tests/player/DashSystemUnitTest.cs b/tests/player/DashSystemUnitTest.cs deleted file mode 100644 index 1da71c91..00000000 --- a/tests/player/DashSystemUnitTest.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.systems; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class DashSystemUnitTest -{ - private DashSystem _dashSystem; - - [BeforeTest] - public void SetupTest() - { - _dashSystem = new DashSystem(); - - _dashSystem.DashCast3D = new ShapeCast3D(); - _dashSystem.AddChild(_dashSystem.DashCast3D); - - _dashSystem.DashCastDrop = new ShapeCast3D(); - _dashSystem.AddChild(_dashSystem.DashCastDrop); - - _dashSystem.DashTarget = new MeshInstance3D(); - _dashSystem.AddChild(_dashSystem.DashTarget); - - _dashSystem.DashDropIndicator = new MeshInstance3D(); - _dashSystem.AddChild(_dashSystem.DashDropIndicator); - - _dashSystem.DashDropLocationIndicator = new MeshInstance3D(); - _dashSystem.AddChild(_dashSystem.DashDropLocationIndicator); - } - - [AfterTest] - public void CleanupTest() - { - _dashSystem?.Free(); - } - - [TestCase] - public void TestStopPreparingDash() - { - _dashSystem.CanDashThroughTarget = true; - _dashSystem.DashTarget.Visible = true; - _dashSystem.DashDropIndicator.Visible = true; - _dashSystem.DashDropLocationIndicator.Visible = true; - - _dashSystem.StopPreparingDash(); - - AssertBool(_dashSystem.CanDashThroughTarget).IsFalse(); - AssertBool(_dashSystem.DashTarget.Visible).IsFalse(); - AssertBool(_dashSystem.DashDropIndicator.Visible).IsFalse(); - AssertBool(_dashSystem.DashDropLocationIndicator.Visible).IsFalse(); - } -} diff --git a/tests/player/DashSystemUnitTest.cs.uid b/tests/player/DashSystemUnitTest.cs.uid deleted file mode 100644 index 545620a4..00000000 --- a/tests/player/DashSystemUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://pv570go4cxws diff --git a/tests/player/HeadSystemUnitTest.cs b/tests/player/HeadSystemUnitTest.cs deleted file mode 100644 index 07d06790..00000000 --- a/tests/player/HeadSystemUnitTest.cs +++ /dev/null @@ -1,91 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.systems; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class HeadSystemUnitTest -{ - private HeadSystem _head; - - [BeforeTest] - public void SetupTest() - { - _head = new HeadSystem(); - _head._camera = new Camera3D(); - _head.AddChild(_head._camera); - - _head._cameraAnchor = new Marker3D(); - _head.AddChild(_head._cameraAnchor); - - _head._fpRig = new Node3D(); - _head.AddChild(_head._fpRig); - - _head._fpDisplacedRig = new Node3D(); - _head.AddChild(_head._fpDisplacedRig); - } - - [AfterTest] - public void CleanupTest() - { - _head?.Free(); - } - - [TestCase] - public void TestResetHeadBobbing() - { - _head._bobbingAccumulator = 10.0f; - _head.ResetHeadBobbing(); - AssertFloat(_head._bobbingAccumulator).IsEqual(0.0f); - } - - [TestCase] - public void TestComputeHowMuchInputForward() - { - Vector3 forwardInput = new Vector3(0, 0, -1); - AssertFloat(_head.ComputeHowMuchInputForward(forwardInput)).IsEqual(1.0f); - - Vector3 backwardInput = new Vector3(0, 0, 1); - AssertFloat(_head.ComputeHowMuchInputForward(backwardInput)).IsEqual(-1.0f); - } - - [TestCase] - public void TestComputeHowMuchInputSideways() - { - Vector3 rightInput = new Vector3(1, 0, 0); - AssertFloat(_head.ComputeHowMuchInputSideways(rightInput)).IsEqual(1.0f); - - Vector3 leftInput = new Vector3(-1, 0, 0); - AssertFloat(_head.ComputeHowMuchInputSideways(leftInput)).IsEqual(-1.0f); - } - - [TestCase] - public void TestGetForwardHorizontalVector() - { - Vector3 forward = _head.GetForwardHorizontalVector(); - AssertVector(forward).IsEqualApprox(Vector3.Back, new Vector3(0.001f, 0.001f, 0.001f)); - } - - [TestCase] - public void TestLookAroundRotation() - { - var inputs = new HeadSystem.CameraParameters( - Delta: 0.016, - LookDir: new Vector2(1, 0), - PlayerInput: Vector3.Zero, - PlayerVelocity: Vector3.Zero, - WallContactPoint: Vector3.Zero, - SensitivitMultiplier: 1.0f, - WithCameraJitter: false, - WithCameraBobbing: false, - BobbingMultiplier: 1.0f, - FovMultiplier: 1.0f - ); - - float initialY = _head.Rotation.Y; - _head.LookAround(inputs); - AssertFloat(_head.Rotation.Y).IsEqual(initialY + 1.0f); - } -} diff --git a/tests/player/HeadSystemUnitTest.cs.uid b/tests/player/HeadSystemUnitTest.cs.uid deleted file mode 100644 index 110c87c4..00000000 --- a/tests/player/HeadSystemUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bp0xn8k3dmfkg diff --git a/tests/player/PlayerControllerUnitTest.cs b/tests/player/PlayerControllerUnitTest.cs deleted file mode 100644 index c41fe8fc..00000000 --- a/tests/player/PlayerControllerUnitTest.cs +++ /dev/null @@ -1,149 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.interfaces; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class PlayerControllerUnitTest -{ - private PlayerController _player; - - [BeforeTest] - public void SetupTest() - { - _player = new PlayerController(); - _player.TargetSpeed = 7.0f; - _player.Gravity = 9.8f; - - var rHealth = new RHealth(100.0f); - _player.RHealth = rHealth; - _player.CHealth = new CHealth { RHealth = rHealth, CurrentHealth = 100.0f }; - } - - [AfterTest] - public void CleanupTest() - { - _player?.Free(); - } - - [TestCase] - public void TestCalculateGravityForce() - { - _player.Weight = 3.0f; - // gravity is 9.8f - AssertFloat(_player.CalculateGravityForce()).IsEqualApprox(29.4f, 0.001f); - } - - [TestCase] - public void TestIsPlayerInputtingForward() - { - // Test Keyboard Input - _player.InputDeviceChanged(false); - _player.OnInputMoveKeyboard(Vector3.Forward); - AssertBool(_player.IsPlayerInputtingForward()).IsTrue(); - - _player.OnInputMoveKeyboard(Vector3.Back); - AssertBool(_player.IsPlayerInputtingForward()).IsFalse(); - - // Test Gamepad Input - _player.InputDeviceChanged(true); - _player.OnInputMove(new Vector3(0, 0, -1)); - AssertBool(_player.IsPlayerInputtingForward()).IsTrue(); - } - - [TestCase] - public void TestSetVerticalVelocity() - { - _player.Velocity = new Vector3(1, 0, 2); - _player.SetVerticalVelocity(5.0f); - AssertVector(_player.Velocity).IsEqual(new Vector3(1, 5, 2)); - } - - [TestCase] - public void TestComputeHVelocityGround() - { - _player.Velocity = Vector3.Zero; - _player.AccelerationFloor = 10.0f; - - float delta = 0.1f; - Vector3 newVelocity = _player.ComputeHVelocity(delta, _player.AccelerationFloor, _player.DecelerationFloor, Vector3.Forward); - AssertVector(newVelocity).IsEqual(new Vector3(0, 0, -7.0f)); - } - - [TestCase] - public void TestComputeHVelocityAir() - { - _player.Velocity = new Vector3(5, 0, 0); - _player.AccelerationAir = 2.0f; - _player.DecelerationAir = 2.0f; - - float delta = 0.5f; - Vector3 newVelocity = _player.ComputeHVelocity(delta, _player.AccelerationAir, _player.DecelerationAir, Vector3.Zero); - - AssertVector(newVelocity).IsEqual(Vector3.Zero); - } - - [TestCase] - public void TestReduceHealth() - { - var damageRecord = new DamageRecord(Vector3.Zero, new RDamage(25.0f, EDamageTypes.Normal)); - _player.ReduceHealth(_player, damageRecord); - AssertFloat(_player.CHealth.CurrentHealth).IsEqual(75.0f); - } - - [TestCase] - public void TestEmpoweredActionsLeft() - { - var mockUi = new PlayerUi(); - var dashIcons = new TextureRect[3] { new TextureRect(), new TextureRect(), new TextureRect() }; - mockUi._dashIcons = dashIcons; - - _player.PlayerUi = mockUi; - - _player.EmpoweredActionsLeft = 2; - AssertInt(_player.EmpoweredActionsLeft).IsEqual(2); - AssertBool(dashIcons[0].Visible).IsTrue(); - AssertBool(dashIcons[1].Visible).IsTrue(); - AssertBool(dashIcons[2].Visible).IsFalse(); - } - - [TestCase] - public void TestDashCooldownTimeout() - { - _player.CanDash = false; - _player.DashCooldownTimeout(); - AssertBool(_player.CanDash).IsTrue(); - } - - [TestCase] - public void TestGetInputLocalHDirection() - { - _player.InputDeviceChanged(false); - _player.OnInputMoveKeyboard(new Vector3(1, 0, 1)); - - Vector3 expected = new Vector3(1, 0, 1).Normalized(); - AssertVector(_player.GetInputLocalHDirection()).IsEqualApprox(expected, new Vector3(0.001f, 0.001f, 0.001f)); - } - - [TestCase] - public void TestComputeKnockback() - { - var cKnockback = new CKnockback(); - cKnockback.RKnockback = new RKnockback(10.0f); - _player.CKnockback = cKnockback; - - var damageRecord = new DamageRecord(new Vector3(10, 0, 0), new RDamage(0, EDamageTypes.Normal)); - var knockbackRecord = new KnockbackRecord(damageRecord, 1.0f); - - _player.GlobalPosition = Vector3.Zero; - cKnockback.GlobalPosition = Vector3.Zero; - - _player.RegisterKnockback(knockbackRecord); - - Vector3 knockback = cKnockback.ComputeKnockback(); - AssertVector(knockback).IsEqual(new Vector3(-10, 0, 0)); - } -} diff --git a/tests/player/PlayerControllerUnitTest.cs.uid b/tests/player/PlayerControllerUnitTest.cs.uid deleted file mode 100644 index 16a906a1..00000000 --- a/tests/player/PlayerControllerUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://kmphtu0ovixi diff --git a/tests/player/WeaponSystemUnitTest.cs b/tests/player/WeaponSystemUnitTest.cs deleted file mode 100644 index cd575190..00000000 --- a/tests/player/WeaponSystemUnitTest.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Godot; -using GdUnit4; -using static GdUnit4.Assertions; -using Movementtests.systems; -using Movementtests.systems.damage; - -namespace Movementtests.tests; - -[TestSuite, RequireGodotRuntime] -public class WeaponSystemUnitTest -{ - private WeaponSystem _weapon; - - [BeforeTest] - public void SetupTest() - { - _weapon = new WeaponSystem(); - _weapon.RDamage = new RDamage(5.0f, EDamageTypes.Normal); - - _weapon.WeaponMesh = new MeshInstance3D(); - _weapon.AddChild(_weapon.WeaponMesh); - _weapon.WeaponLocationIndicator = new MeshInstance3D(); - _weapon.AddChild(_weapon.WeaponLocationIndicator); - } - - [AfterTest] - public void CleanupTest() - { - _weapon?.Free(); - } - - [TestCase] - public void TestWeaponLeftAndBackVisibility() - { - _weapon.Visible = false; - - _weapon.WeaponLeft(); - AssertBool(_weapon.Visible).IsTrue(); - - _weapon.WeaponBack(); - AssertBool(_weapon.Visible).IsFalse(); - } - - [TestCase] - public void TestThrowWeaponOnCurveSetsUnfrozen() - { - _weapon.Freeze = true; - _weapon.ThrowWeaponOnCurve(); - AssertBool(_weapon.Freeze).IsFalse(); - } -} diff --git a/tests/player/WeaponSystemUnitTest.cs.uid b/tests/player/WeaponSystemUnitTest.cs.uid deleted file mode 100644 index 487b0dea..00000000 --- a/tests/player/WeaponSystemUnitTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://vkv8aderakcb diff --git a/tests/player/interactions/PlayerInteractionsTest.cs b/tests/player/interactions/PlayerInteractionsTest.cs deleted file mode 100644 index fcd83f87..00000000 --- a/tests/player/interactions/PlayerInteractionsTest.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Threading.Tasks; -using Godot; -using GodotStateCharts; - -namespace Movementtests.tests; - -using GdUnit4; -using static GdUnit4.Assertions; - -[TestSuite, RequireGodotRuntime] -public class PlayerInteractionsTest -{ - private ISceneRunner _runner; - private Node _scene; - private PlayerController _player; - - private readonly float _tolerance = 0.01f; - private readonly Vector3 _vectorTolerance = new Vector3(0.01f, 0.01f, 0.01f); - - [BeforeTest] - public void SetupTest() - { - _runner = ISceneRunner.Load("res://tests/player/interactions/player_interactions_scene.tscn"); - - _scene = _runner.Scene()!; - var player = _scene.FindChild("Player") as PlayerController; - _player = player!; - } - [AfterTest] - public void CleanupTest() {} - - [TestCase("BaseLocation")] - public async Task PlayerMoveForward(string markerName) - { - var marker = _scene.FindChild(markerName) as Marker3D; - AssertObject(marker).IsNotNull(); - _player.GlobalPosition = marker!.GlobalPosition; - await _runner.AwaitIdleFrame(); - - var startPos = _player.GlobalPosition; - - _runner.SimulateKeyPress(Key.W); - await _runner.AwaitMillis(300); - _runner.SimulateKeyRelease(Key.W); - - var endPos = _player.GlobalPosition; - var direction = startPos.DirectionTo(endPos); - AssertVector(direction).IsEqualApprox(Vector3.Forward, _vectorTolerance); - } -} \ No newline at end of file diff --git a/tests/player/interactions/PlayerInteractionsTest.cs.uid b/tests/player/interactions/PlayerInteractionsTest.cs.uid deleted file mode 100644 index 75e43ca5..00000000 --- a/tests/player/interactions/PlayerInteractionsTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://denedm5b8rmhh diff --git a/tests/player/interactions/player_interactions_scene.tscn b/tests/player/interactions/player_interactions_scene.tscn deleted file mode 100644 index 0a7887de..00000000 --- a/tests/player/interactions/player_interactions_scene.tscn +++ /dev/null @@ -1,35 +0,0 @@ -[gd_scene format=3 uid="uid://l0lflvsjbyvs"] - -[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="1_dv0re"] -[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://scenes/player_controller/PlayerController.tscn" id="2_52d52"] - -[node name="PlayerMovementScene" type="Node3D" unique_id=231040688] - -[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=241909240] -use_collision = true -collision_layer = 256 -collision_mask = 65553 - -[node name="Ground" type="CSGBox3D" parent="CSGCombiner3D" unique_id=432200143] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -0.5, -3.25) -use_collision = true -collision_layer = 256 -collision_mask = 65553 -size = Vector3(1000, 1, 1000) -material = ExtResource("1_dv0re") - -[node name="Ground2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=854660236] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0.5, -1.75) -use_collision = true -collision_layer = 256 -collision_mask = 65553 -size = Vector3(1.5, 1, 1.5) -material = ExtResource("1_dv0re") - -[node name="Player" parent="." unique_id=709076448 instance=ExtResource("2_52d52")] -TutorialDone = true - -[node name="BaseLocation" type="Marker3D" parent="." unique_id=1793710692] - -[node name="MantleLocation1" type="Marker3D" parent="." unique_id=550080845] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0, 0) diff --git a/tests/player/movement/PlayerMovementTest.cs b/tests/player/movement/PlayerMovementTest.cs deleted file mode 100644 index 1ffbe76d..00000000 --- a/tests/player/movement/PlayerMovementTest.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Threading.Tasks; -using Godot; -using GodotStateCharts; - -namespace Movementtests.tests; - -using GdUnit4; -using static GdUnit4.Assertions; - -[TestSuite, RequireGodotRuntime] -public class PlayerMovementTest -{ - private ISceneRunner _runner; - private Node _scene; - private PlayerController _player; - - private readonly float _tolerance = 0.01f; - private readonly Vector3 _vectorTolerance = new Vector3(0.01f, 0.01f, 0.01f); - - [Before] - public void Setup() {} - [After] - public void Cleanup() {} - - [BeforeTest] - public void SetupTest() - { - _runner = ISceneRunner.Load("res://tests/player/movement/player_movement_scene.tscn"); - - _scene = _runner.Scene()!; - var player = _scene.FindChild("Player") as PlayerController; - _player = player!; - } - [AfterTest] - public void CleanupTest() {} - - [TestCase("BaseLocation")] - public async Task PlayerMoveForward(string markerName) - { - var marker = _scene.FindChild(markerName) as Marker3D; - AssertObject(marker).IsNotNull(); - _player.GlobalPosition = marker!.GlobalPosition; - await _runner.AwaitIdleFrame(); - - var startPos = _player.GlobalPosition; - - _runner.SimulateKeyPress(Key.W); - await _runner.AwaitMillis(100); - _runner.SimulateKeyRelease(Key.W); - - var endPos = _player.GlobalPosition; - var direction = startPos.DirectionTo(endPos); - AssertVector(direction).IsEqualApprox(Vector3.Forward, _vectorTolerance); - } - - [TestCase("BaseLocation")] - public async Task PlayerJump(string markerName) - { - var marker = _scene.FindChild(markerName) as Marker3D; - AssertObject(marker).IsNotNull(); - _player.GlobalPosition = marker!.GlobalPosition; - await _runner.AwaitIdleFrame(); - - var startPos = _player.GlobalPosition; - - _runner.SimulateKeyPress(Key.Space); - await _runner.AwaitIdleFrame(); - - var jumping = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Jump")); - AssertBool(jumping.Active).IsTrue(); - - _runner.SimulateKeyRelease(Key.Space); - await _runner.AwaitIdleFrame(); - var endPos = _player.GlobalPosition; - var direction = startPos.DirectionTo(endPos); - AssertVector(direction).IsEqualApprox(Vector3.Up, _vectorTolerance); - AssertVector(_player.Velocity.Normalized()).IsEqualApprox(Vector3.Up, _vectorTolerance); - - await _runner.AwaitMillis(600); - endPos = _player.GlobalPosition; - AssertVector(endPos - startPos).IsEqualApprox(Vector3.Zero, _vectorTolerance); - - var grounded = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Grounded")); - AssertBool(grounded.Active).IsTrue(); - } - - [TestCase("MantleLocation1")] - public async Task PlayerMantle(string markerName) - { - var marker = _scene.FindChild(markerName) as Marker3D; - AssertObject(marker).IsNotNull(); - _player.GlobalPosition = marker!.GlobalPosition; - await _runner.AwaitMillis(100); - - var startPos = _player.GlobalPosition; - - _runner.SimulateKeyPress(Key.Space); - await _runner.AwaitMillis(100); - var mantling = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Mantling")); - AssertBool(mantling.Active).IsTrue(); - - _runner.SimulateKeyRelease(Key.Space); - await _runner.AwaitMillis(500); - - var endPos = _player.GlobalPosition; - AssertFloat((endPos - startPos).Length()).IsGreater(_tolerance); - AssertFloat(endPos.Y).IsEqualApprox(1.0f, _tolerance); - } -} \ No newline at end of file diff --git a/tests/player/movement/PlayerMovementTest.cs.uid b/tests/player/movement/PlayerMovementTest.cs.uid deleted file mode 100644 index a5061437..00000000 --- a/tests/player/movement/PlayerMovementTest.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://x5pj2ymam2gg diff --git a/tests/player/movement/player_movement_scene.tscn b/tests/player/movement/player_movement_scene.tscn deleted file mode 100644 index e40a34fc..00000000 --- a/tests/player/movement/player_movement_scene.tscn +++ /dev/null @@ -1,35 +0,0 @@ -[gd_scene format=3 uid="uid://i8kb38q7bdfk"] - -[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="1_bdfhg"] -[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://scenes/player_controller/PlayerController.tscn" id="1_hg1sy"] - -[node name="PlayerMovementScene" type="Node3D" unique_id=231040688] - -[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=241909240] -use_collision = true -collision_layer = 256 -collision_mask = 65553 - -[node name="Ground" type="CSGBox3D" parent="CSGCombiner3D" unique_id=432200143] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -0.5, -3.25) -use_collision = true -collision_layer = 256 -collision_mask = 65553 -size = Vector3(1000, 1, 1000) -material = ExtResource("1_bdfhg") - -[node name="Ground2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=854660236] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0.5, -1.75) -use_collision = true -collision_layer = 256 -collision_mask = 65553 -size = Vector3(1.5, 1, 1.5) -material = ExtResource("1_bdfhg") - -[node name="Player" parent="." unique_id=709076448 instance=ExtResource("1_hg1sy")] -TutorialDone = true - -[node name="BaseLocation" type="Marker3D" parent="." unique_id=1793710692] - -[node name="MantleLocation1" type="Marker3D" parent="." unique_id=550080845] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0, 0) -- 2.49.1 From 5408f455af663530d198af11d7b81c4dae71858e Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 18:56:50 +0100 Subject: [PATCH 05/12] removed internal --- export_presets.cfg | 6 ++--- scenes/enemies/Enemy.cs | 2 +- scenes/player_controller/PlayerUi.cs | 2 +- .../components/dash/DashSystem.cs | 20 +++++++------- .../components/head/HeadSystem.cs | 26 +++++++++---------- .../scripts/PlayerController.cs | 6 ++--- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index f7bcbbbc..f7f3baa6 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -46,7 +46,7 @@ kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=true +dotnet/embed_build_outputs=false texture_format/bptc=true texture_format/s3tc=true texture_format/etc=false @@ -125,7 +125,7 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=true +dotnet/embed_build_outputs=false texture_format/bptc=true texture_format/s3tc=true texture_format/etc=false @@ -472,4 +472,4 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=true +dotnet/embed_build_outputs=false diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index 9b86f798..f7a10210 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -57,7 +57,7 @@ public partial class Enemy : CharacterBody3D, // Private stuff private Area3D _damageBox = null!; - internal Node3D _target = null!; + private Node3D _target = null!; private Healthbar _healthbar = null!; public override void _Ready() diff --git a/scenes/player_controller/PlayerUi.cs b/scenes/player_controller/PlayerUi.cs index bb9bf0f0..746ef740 100644 --- a/scenes/player_controller/PlayerUi.cs +++ b/scenes/player_controller/PlayerUi.cs @@ -5,7 +5,7 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")] public partial class PlayerUi : Control { - internal TextureRect[] _dashIcons = new TextureRect[3]; + private TextureRect[] _dashIcons = new TextureRect[3]; private TextureRect _enemyTarget; private Healthbar _healthbar; diff --git a/scenes/player_controller/components/dash/DashSystem.cs b/scenes/player_controller/components/dash/DashSystem.cs index 87d4d587..1b282f7e 100644 --- a/scenes/player_controller/components/dash/DashSystem.cs +++ b/scenes/player_controller/components/dash/DashSystem.cs @@ -26,17 +26,17 @@ public partial class DashSystem: Node3D public Vector3 PlannedMantleLocation { get; set; } public MantleSystem MantleSystem { get; set; } = null!; - internal HeadSystem Head = null!; + private HeadSystem Head = null!; public ShapeCast3D DashCast3D = null!; - internal Camera3D Camera = null!; - internal Vector3 DashDirection = Vector3.Zero; + private Camera3D Camera = null!; + private Vector3 DashDirection = Vector3.Zero; - internal ShapeCast3D DashCastDrop = null!; - internal MeshInstance3D DashDropIndicator = null!; - internal MeshInstance3D DashDropLocationIndicator = null!; - internal MeshInstance3D DashTarget = null!; - internal CpuParticles3D DashIndicator = null!; - internal AnimationPlayer DashIndicatorAnim = null!; + private ShapeCast3D DashCastDrop = null!; + private MeshInstance3D DashDropIndicator = null!; + private MeshInstance3D DashDropLocationIndicator = null!; + private MeshInstance3D DashTarget = null!; + private CpuParticles3D DashIndicator = null!; + private AnimationPlayer DashIndicatorAnim = null!; [Export] public PackedScene DashIndicatorScene { get; set; } = null!; @@ -75,7 +75,7 @@ public partial class DashSystem: Node3D DashIndicatorAnim = GetNode("DashIndicator/AnimationPlayer"); } - internal DashLocation ComputeDashLocation() + private DashLocation ComputeDashLocation() { var targetLocation = DashCast3D.ToGlobal(DashCast3D.TargetPosition); var hasHit = DashCast3D.IsColliding(); diff --git a/scenes/player_controller/components/head/HeadSystem.cs b/scenes/player_controller/components/head/HeadSystem.cs index 50653503..9e883ad9 100644 --- a/scenes/player_controller/components/head/HeadSystem.cs +++ b/scenes/player_controller/components/head/HeadSystem.cs @@ -39,10 +39,10 @@ public partial class HeadSystem : Node3D float BobbingMultiplier, float FovMultiplier); - internal Camera3D _camera; - internal Marker3D _cameraAnchor; - internal AnimationPlayer _animationPlayer; - internal AnimationTree _animationTree; + private Camera3D _camera; + private Marker3D _cameraAnchor; + private AnimationPlayer _animationPlayer; + private AnimationTree _animationTree; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] public float LookSensitivity { get; set; } = 1f; @@ -63,11 +63,11 @@ public partial class HeadSystem : Node3D [Export(PropertyHint.Range, "0,1,0.01,or_greater")] public float SlidingJitterAmplitude { get; set; } = 0.1f; - internal FastNoiseLite _slidingNoise = new FastNoiseLite(); + private FastNoiseLite _slidingNoise = new FastNoiseLite(); [ExportGroup("Bobbing")] - internal float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis + private float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis [Export(PropertyHint.Range, "0,10,0.01,or_greater")] public float BobbingFrequency { set; get; } = 2.4f; [Export(PropertyHint.Range, "0,0.4,0.01,or_greater")] @@ -84,11 +84,11 @@ public partial class HeadSystem : Node3D public float FovMaxedOutSpeed { get; set; } = 20f; [ExportGroup("First Person rig")] - internal Node3D _fpRig; - internal Node3D _rightHandedWeapon; - internal Node3D _leftHandedWeapon; - internal Node3D _fpDisplacedRig; - internal Vector3 _fpDisplacedRigInitialRotation; + private Node3D _fpRig; + private Node3D _rightHandedWeapon; + private Node3D _leftHandedWeapon; + private Node3D _fpDisplacedRig; + private Vector3 _fpDisplacedRigInitialRotation; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] public float WeaponSway { get; set; } = 5f; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] @@ -190,8 +190,8 @@ public partial class HeadSystem : Node3D EmitSignalHitboxDeactivated(); } - internal bool _footstepEmitted; - internal bool _isPlayingForcingAnim; + private bool _footstepEmitted; + private bool _isPlayingForcingAnim; public void ResetHeadBobbing() { diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index eb353c52..4b1ffa4e 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -277,8 +277,8 @@ public partial class PlayerController : CharacterBody3D, private float _inputRotateFloorplane; // Basic falling - internal float TargetSpeed; - internal float Gravity; + private float TargetSpeed; + private float Gravity; // Jump stuff private int _currentInputBufferFrames; @@ -302,7 +302,7 @@ public partial class PlayerController : CharacterBody3D, private Vector3 _currentWallContactPoint = Vector3.Zero; // Dash stuff - internal bool CanDash = true; + private bool CanDash = true; private bool _canDashAirborne = true; private float _playerHeight; private float _playerRadius; -- 2.49.1 From 290f79afd49b0792e1598c2e0a20aaf8ceeaa816 Mon Sep 17 00:00:00 2001 From: Minimata Date: Thu, 26 Feb 2026 19:18:27 +0100 Subject: [PATCH 06/12] removed null! --- addons/forge/core/ForgeManagers.cs | 2 +- .../attributes/AttributeEditorProperty.cs | 2 +- .../AttributeSetClassEditorProperty.cs | 2 +- .../forge/editor/cues/CueKeyEditorProperty.cs | 2 +- .../editor/tags/TagContainerEditorProperty.cs | 12 +- addons/forge/editor/tags/TagEditorProperty.cs | 12 +- addons/forge/editor/tags/TagsEditor.cs | 2 +- addons/forge/nodes/ForgeEntity.cs | 10 +- scenes/components/damage/RDamageModifier.cs | 2 +- scenes/components/health/CHealth.cs | 6 +- scenes/components/knockback/CKnockback.cs | 4 +- .../components/movement/CGroundedMovement.cs | 4 +- scenes/enemies/Enemy.cs | 32 ++-- .../components/dash/DashSystem.cs | 22 +-- .../components/weapon/WeaponSystem.cs | 16 +- .../scripts/PlayerController.cs | 172 +++++++++--------- 16 files changed, 151 insertions(+), 151 deletions(-) diff --git a/addons/forge/core/ForgeManagers.cs b/addons/forge/core/ForgeManagers.cs index c13cf167..0adbf778 100644 --- a/addons/forge/core/ForgeManagers.cs +++ b/addons/forge/core/ForgeManagers.cs @@ -8,7 +8,7 @@ namespace Gamesmiths.Forge.Godot.Core; public class ForgeManagers { - public static ForgeManagers Instance { get; private set; } = null!; + public static ForgeManagers Instance { get; private set; } public TagsManager TagsManager { get; private set; } diff --git a/addons/forge/editor/attributes/AttributeEditorProperty.cs b/addons/forge/editor/attributes/AttributeEditorProperty.cs index dbdf791f..19c7a622 100644 --- a/addons/forge/editor/attributes/AttributeEditorProperty.cs +++ b/addons/forge/editor/attributes/AttributeEditorProperty.cs @@ -11,7 +11,7 @@ public partial class AttributeEditorProperty : EditorProperty private const int ButtonSize = 26; private const int PopupSize = 300; - private Label _label = null!; + private Label _label; public override void _Ready() { diff --git a/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs b/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs index fbda0d75..5b6fbc7a 100644 --- a/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs +++ b/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs @@ -14,7 +14,7 @@ namespace Gamesmiths.Forge.Godot.Editor.Attributes; [Tool] public partial class AttributeSetClassEditorProperty : EditorProperty { - private OptionButton _optionButton = null!; + private OptionButton _optionButton; public override void _Ready() { diff --git a/addons/forge/editor/cues/CueKeyEditorProperty.cs b/addons/forge/editor/cues/CueKeyEditorProperty.cs index 8681f14c..5db6769c 100644 --- a/addons/forge/editor/cues/CueKeyEditorProperty.cs +++ b/addons/forge/editor/cues/CueKeyEditorProperty.cs @@ -14,7 +14,7 @@ public partial class CueKeyEditorProperty : EditorProperty private const int ButtonSize = 26; private const int PopupSize = 300; - private Label _label = null!; + private Label _label; public override void _Ready() { diff --git a/addons/forge/editor/tags/TagContainerEditorProperty.cs b/addons/forge/editor/tags/TagContainerEditorProperty.cs index e2ab253f..eb893491 100644 --- a/addons/forge/editor/tags/TagContainerEditorProperty.cs +++ b/addons/forge/editor/tags/TagContainerEditorProperty.cs @@ -15,13 +15,13 @@ public partial class TagContainerEditorProperty : EditorProperty { private readonly Dictionary _treeItemToNode = []; - private VBoxContainer _root = null!; - private Button _containerButton = null!; - private ScrollContainer _scroll = null!; - private Tree _tree = null!; + private VBoxContainer _root; + private Button _containerButton; + private ScrollContainer _scroll; + private Tree _tree; - private Texture2D _checkedIcon = null!; - private Texture2D _uncheckedIcon = null!; + private Texture2D _checkedIcon; + private Texture2D _uncheckedIcon; private GodotStringArray _currentValue = []; diff --git a/addons/forge/editor/tags/TagEditorProperty.cs b/addons/forge/editor/tags/TagEditorProperty.cs index 05edd2de..ce491b46 100644 --- a/addons/forge/editor/tags/TagEditorProperty.cs +++ b/addons/forge/editor/tags/TagEditorProperty.cs @@ -13,13 +13,13 @@ public partial class TagEditorProperty : EditorProperty { private readonly Dictionary _treeItemToNode = []; - private VBoxContainer _root = null!; - private Button _containerButton = null!; - private ScrollContainer _scroll = null!; - private Tree _tree = null!; + private VBoxContainer _root; + private Button _containerButton; + private ScrollContainer _scroll; + private Tree _tree; - private Texture2D _checkedIcon = null!; - private Texture2D _uncheckedIcon = null!; + private Texture2D _checkedIcon; + private Texture2D _uncheckedIcon; private string _currentValue = string.Empty; diff --git a/addons/forge/editor/tags/TagsEditor.cs b/addons/forge/editor/tags/TagsEditor.cs index e14a9f57..f9b3f235 100644 --- a/addons/forge/editor/tags/TagsEditor.cs +++ b/addons/forge/editor/tags/TagsEditor.cs @@ -16,7 +16,7 @@ public partial class TagsEditor : VBoxContainer, ISerializationListener { private readonly Dictionary _treeItemToNode = []; - private TagsManager _tagsManager = null!; + private TagsManager _tagsManager; private ForgeData? _forgePluginData; diff --git a/addons/forge/nodes/ForgeEntity.cs b/addons/forge/nodes/ForgeEntity.cs index 6f638655..f6455110 100644 --- a/addons/forge/nodes/ForgeEntity.cs +++ b/addons/forge/nodes/ForgeEntity.cs @@ -18,15 +18,15 @@ public partial class ForgeEntity : Node, IForgeEntity [Export] public ForgeTagContainer BaseTags { get; set; } = new(); - public EntityAttributes Attributes { get; set; } = null!; + public EntityAttributes Attributes { get; set; } - public EntityTags Tags { get; set; } = null!; + public EntityTags Tags { get; set; } - public EffectsManager EffectsManager { get; set; } = null!; + public EffectsManager EffectsManager { get; set; } - public EntityAbilities Abilities { get; set; } = null!; + public EntityAbilities Abilities { get; set; } - public EventManager Events { get; set; } = null!; + public EventManager Events { get; set; } public override void _Ready() { diff --git a/scenes/components/damage/RDamageModifier.cs b/scenes/components/damage/RDamageModifier.cs index 29bebc7b..b421b409 100644 --- a/scenes/components/damage/RDamageModifier.cs +++ b/scenes/components/damage/RDamageModifier.cs @@ -7,7 +7,7 @@ using Movementtests.systems.damage; [GlobalClass] public partial class RDamageModifier : Resource, IDamageable { - public event Action DamageTaken = null!; + public event Action DamageTaken; [Export] public EDamageTypes DamageType { get; set;} diff --git a/scenes/components/health/CHealth.cs b/scenes/components/health/CHealth.cs index ea6b6f25..f07ec474 100644 --- a/scenes/components/health/CHealth.cs +++ b/scenes/components/health/CHealth.cs @@ -5,11 +5,11 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_heart.png")] public partial class CHealth : Node, IHealthable { - public event Action HealthChanged = null!; - public event Action HealthDepleted = null!; + public event Action HealthChanged; + public event Action HealthDepleted; [Export] - public RHealth RHealth { get; set; } = null!; + public RHealth RHealth { get; set; } public float CurrentHealth { get; set; } diff --git a/scenes/components/knockback/CKnockback.cs b/scenes/components/knockback/CKnockback.cs index b631b29b..4f53c899 100644 --- a/scenes/components/knockback/CKnockback.cs +++ b/scenes/components/knockback/CKnockback.cs @@ -5,9 +5,9 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_wind.png")] public partial class CKnockback : Node3D, IKnockbackable { - [Export] public RKnockback RKnockback { get; set;} = null!; + [Export] public RKnockback RKnockback { get; set; } - private KnockbackRecord _knockbackRecord = null!; + private KnockbackRecord _knockbackRecord; public void RegisterKnockback(KnockbackRecord knockbackRecord) { diff --git a/scenes/components/movement/CGroundedMovement.cs b/scenes/components/movement/CGroundedMovement.cs index bd804fca..3943c36f 100644 --- a/scenes/components/movement/CGroundedMovement.cs +++ b/scenes/components/movement/CGroundedMovement.cs @@ -6,9 +6,9 @@ namespace Movementtests.scenes.movement; [GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_path_follow.png")] public partial class CGroundedMovement : Node3D, IMoveable { - [Export] public RMovement RMovement { get; set; } = null!; + [Export] public RMovement RMovement { get; set; } - [Export] public RayCast3D WallInFrontRayCast { get; set; } = null!; + [Export] public RayCast3D WallInFrontRayCast { get; set; } public Vector3 ComputeVelocity(MovementInputs inputs) diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index f7a10210..40c5171a 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -16,37 +16,37 @@ public partial class Enemy : CharacterBody3D, IStunnable { // Signals and events - public event Action DamageTaken = null!; - public event Action HealthChanged = null!; - public event Action HealthDepleted = null!; + public event Action DamageTaken; + public event Action HealthChanged; + public event Action HealthDepleted; // Public export components [Export] - public Node3D Target { get; set; } = null!; + public Node3D Target { get; set;} [Export] public float EnemyHeight { get; set; } = 1f; [ExportGroup("Health")] [Export] - public RHealth RHealth { get; set; } = null!; + public RHealth RHealth { get; set; } [Export] - public RDeathEffect[] DeathEffects { get; set; } = null!; - public IHealthable CHealth { get; set; } = null!; + public RDeathEffect[] DeathEffects { get; set; } + public IHealthable CHealth { get; set; } [ExportGroup("Damage")] [Export] - public RDamage RDamage { get; set; } = null!; - public IDamageable CDamageable { get; set; } = null!; + public RDamage RDamage { get; set; } + public IDamageable CDamageable { get; set; } [Export] - public RKnockback RKnockback { get; set; } = null!; - public IKnockbackable CKnockback { get; set; } = null!; + public RKnockback RKnockback { get; set; } + public IKnockbackable CKnockback { get; set; } [ExportGroup("Movement")] [Export] - public RMovement RMovement { get; set; } = null!; - public IMoveable CMovement { get; set; } = null!; + public RMovement RMovement { get; set; } + public IMoveable CMovement { get; set; } // Public stuff public float CurrentHealth @@ -56,9 +56,9 @@ public partial class Enemy : CharacterBody3D, } // Private stuff - private Area3D _damageBox = null!; - private Node3D _target = null!; - private Healthbar _healthbar = null!; + private Area3D _damageBox; + private Node3D _target; + private Healthbar _healthbar; public override void _Ready() { diff --git a/scenes/player_controller/components/dash/DashSystem.cs b/scenes/player_controller/components/dash/DashSystem.cs index 1b282f7e..ec773b93 100644 --- a/scenes/player_controller/components/dash/DashSystem.cs +++ b/scenes/player_controller/components/dash/DashSystem.cs @@ -24,21 +24,21 @@ public partial class DashSystem: Node3D public bool ShouldMantle { get; set; } public Vector3 PlannedMantleLocation { get; set; } - public MantleSystem MantleSystem { get; set; } = null!; + public MantleSystem MantleSystem { get; set; } - private HeadSystem Head = null!; - public ShapeCast3D DashCast3D = null!; - private Camera3D Camera = null!; + private HeadSystem Head; + public ShapeCast3D DashCast3D; + private Camera3D Camera; private Vector3 DashDirection = Vector3.Zero; - private ShapeCast3D DashCastDrop = null!; - private MeshInstance3D DashDropIndicator = null!; - private MeshInstance3D DashDropLocationIndicator = null!; - private MeshInstance3D DashTarget = null!; - private CpuParticles3D DashIndicator = null!; - private AnimationPlayer DashIndicatorAnim = null!; + private ShapeCast3D DashCastDrop; + private MeshInstance3D DashDropIndicator; + private MeshInstance3D DashDropLocationIndicator; + private MeshInstance3D DashTarget; + private CpuParticles3D DashIndicator; + private AnimationPlayer DashIndicatorAnim; - [Export] public PackedScene DashIndicatorScene { get; set; } = null!; + [Export] public PackedScene DashIndicatorScene { get; set; } [Signal] public delegate void DashStartedEventHandler(); diff --git a/scenes/player_controller/components/weapon/WeaponSystem.cs b/scenes/player_controller/components/weapon/WeaponSystem.cs index e9590a0e..3ad61e8c 100644 --- a/scenes/player_controller/components/weapon/WeaponSystem.cs +++ b/scenes/player_controller/components/weapon/WeaponSystem.cs @@ -22,11 +22,11 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer [Export(PropertyHint.Range, "0,0.2,0.01,or_greater")] public float StraightThrowDuration { get; set; } = 0.1f; - private StateChart _weaponState = null!; - public StateChartState InHandState = null!; - public StateChartState FlyingState = null!; - public StateChartState PlantedState = null!; - private ShapeCast3D _dashCast3D = null!; + private StateChart _weaponState; + public StateChartState InHandState; + public StateChartState FlyingState; + public StateChartState PlantedState; + private ShapeCast3D _dashCast3D; private Transform3D _startTransform; private Vector3 _startMeshRotation; @@ -36,9 +36,9 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer public Vector3 PlantNormal { get; set; } public Node? PlantObject { get; set; } - public MeshInstance3D WeaponLocationIndicator { get; set; } = null!; - public StandardMaterial3D WeaponLocationIndicatorMaterial { get; set; } = null!; - public MeshInstance3D WeaponMesh { get; set; } = null!; + public MeshInstance3D WeaponLocationIndicator { get; set; } + public StandardMaterial3D WeaponLocationIndicatorMaterial { get; set; } + public MeshInstance3D WeaponMesh { get; set; } public void Init() { diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index 4b1ffa4e..5876f7cc 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -49,45 +49,45 @@ public partial class PlayerController : CharacterBody3D, [Signal] public delegate void PlayerDiedEventHandler(); - public event Action DamageTaken = null!; - public event Action HealthChanged = null!; - public event Action HealthDepleted = null!; + public event Action DamageTaken; + public event Action HealthChanged; + public event Action HealthDepleted; /////////////////////////// // Public stuff // /////////////////////////// - public HeadSystem HeadSystem = null!; - public StairsSystem StairsSystem = null!; - public MantleSystem MantleSystem = null!; - public DashSystem DashSystem = null!; - public CollisionShape3D StandingCollider = null!; - public CollisionShape3D SlideCollider = null!; - public WeaponSystem WeaponSystem = null!; - public WallHugSystem WallHugSystem = null!; - public PlayerUi PlayerUi = null!; - public TextureRect DashIndicator = null!; - public ColorRect PowerCooldownIndicator = null!; - public Node3D DashIndicatorNode = null!; - public MeshInstance3D DashIndicatorMesh = null!; - public CylinderMesh DashIndicatorMeshCylinder = null!; - public RayCast3D WallRunSnapper = null!; - public ShapeCast3D GroundDetector = null!; - public ShapeCast3D CeilingDetector = null!; - public RayCast3D DirectGroundDetector = null!; - public Area3D WeaponHitbox = null!; - public AudioStreamPlayer3D SfxPlayer = null!; + public HeadSystem HeadSystem; + public StairsSystem StairsSystem; + public MantleSystem MantleSystem; + public DashSystem DashSystem; + public CollisionShape3D StandingCollider; + public CollisionShape3D SlideCollider; + public WeaponSystem WeaponSystem; + public WallHugSystem WallHugSystem; + public PlayerUi PlayerUi; + public TextureRect DashIndicator; + public ColorRect PowerCooldownIndicator; + public Node3D DashIndicatorNode; + public MeshInstance3D DashIndicatorMesh; + public CylinderMesh DashIndicatorMeshCylinder; + public RayCast3D WallRunSnapper; + public ShapeCast3D GroundDetector; + public ShapeCast3D CeilingDetector; + public RayCast3D DirectGroundDetector; + public Area3D WeaponHitbox; + public AudioStreamPlayer3D SfxPlayer; - public ShapeCast3D DashDamageDetector = null!; - public Area3D SlidingEnemyDetector = null!; + public ShapeCast3D DashDamageDetector; + public Area3D SlidingEnemyDetector; - public EntityAttributes Attributes { get; set; } = null!; - public EntityTags Tags { get; set; } = null!; - public EffectsManager EffectsManager { get; set; } = null!; - public EntityAbilities Abilities { get; set; } = null!; - public EventManager Events { get; set; } = null!; + public EntityAttributes Attributes { get; set; } + public EntityTags Tags { get; set; } + public EffectsManager EffectsManager { get; set; } + public EntityAbilities Abilities { get; set; } + public EventManager Events { get; set; } // Inspector stuff - [Export] public Marker3D TutorialWeaponTarget = null!; + [Export] public Marker3D TutorialWeaponTarget; [Export] public bool TutorialDone { get; set; } [Export] public bool HasSword { get; set; } = true; [Export] public bool HasParry { get; set; } = true; @@ -102,9 +102,9 @@ public partial class PlayerController : CharacterBody3D, [Export(PropertyHint.Range, "0,10f,0.1,or_greater")] public float AimAssistReductionStartDistance { get; set; } = 10f; - [ExportGroup("Damage")] [Export] public RDamage RDamage { get; set; } = null!; - [Export] public RKnockback? RKnockback { get; set; } = null!; - [Export] public RHealth? RHealth { get; set; } = null!; + [ExportGroup("Damage")] [Export] public RDamage RDamage { get; set; } + [Export] public RKnockback? RKnockback { get; set; } + [Export] public RHealth? RHealth { get; set; } [ExportGroup("Targeting")] [Export(PropertyHint.Range, "0,20,0.1,or_greater")] @@ -114,7 +114,7 @@ public partial class PlayerController : CharacterBody3D, [ExportGroup("Instantiation")] [Export] - public PackedScene Explosion { get; set; } = null!; + public PackedScene Explosion { get; set; } // Movement stuff [ExportCategory("Movement")] @@ -141,7 +141,7 @@ public partial class PlayerController : CharacterBody3D, [Export(PropertyHint.Range, "0,1,0.01,or_greater")] public float MantleTime { get; set; } = 0.1f; [Export] - public PackedScene MantlePath { get; set; } = null!; + public PackedScene MantlePath { get; set; } [Export(PropertyHint.Range, "0,50,0.1")] public float MantleDashStrength { get; set; } = 15f; @@ -266,8 +266,8 @@ public partial class PlayerController : CharacterBody3D, // Stairs and shit private float _lastFrameWasOnFloor = -Mathf.Inf; private const int NumOfHeadCollisionDetectors = 4; - private RayCast3D[] _headCollisionDetectors = null!; - private AudioStreamPlaybackInteractive _audioStream = null!; + private RayCast3D[] _headCollisionDetectors; + private AudioStreamPlaybackInteractive _audioStream; // Basic movement private bool _movementEnabled = true; @@ -291,7 +291,7 @@ public partial class PlayerController : CharacterBody3D, private Path? _mantlePath; private bool _customMantle; private Transform3D _customMantleStartTransform; - private Curve3D _customMantleCurve = null!; + private Curve3D _customMantleCurve; private Vector3 _mantleStartPosition; private Vector3 _velocityOnMantleStarted = Vector3.Zero; @@ -328,56 +328,56 @@ public partial class PlayerController : CharacterBody3D, private float _aimAssistMultiplier = 1.0f; // Timers - private Timer _timeScaleAimInAirTimer = null!; - private Timer _weaponThrowUncatchableTimer = null!; - private Timer _simpleDashCooldownTimer = null!; - private Timer _airborneDashCooldownTimer = null!; - private Timer _powerCooldownTimer = null!; - private Timer _invincibilityTimer = null!; - private Timer _attackCooldown = null!; + private Timer _timeScaleAimInAirTimer; + private Timer _weaponThrowUncatchableTimer; + private Timer _simpleDashCooldownTimer; + private Timer _airborneDashCooldownTimer; + private Timer _powerCooldownTimer; + private Timer _invincibilityTimer; + private Timer _attackCooldown; // State chart - private StateChart _playerState = null!; + private StateChart _playerState; - private StateChartState _aiming = null!; - private StateChartState _powerExpired = null!; - private StateChartState _powerRecharging = null!; - private StateChartState _powerFull = null!; + private StateChartState _aiming; + private StateChartState _powerExpired; + private StateChartState _powerRecharging; + private StateChartState _powerFull; - private StateChartState _grounded = null!; - private StateChartState _airborne = null!; - private StateChartState _coyoteEnabled = null!; - private StateChartState _jumping = null!; - private StateChartState _simpleJump = null!; - private StateChartState _doubleJump = null!; - private StateChartState _mantling = null!; - private StateChartState _simpleDash = null!; - private StateChartState _aimedDash = null!; - private StateChartState _weaponDash = null!; - private StateChartState _sliding = null!; - private StateChartState _groundSliding = null!; - private StateChartState _airGliding = null!; - private StateChartState _airGlidingDoubleJump = null!; - private StateChartState _slideCanceled = null!; - private StateChartState _slamming = null!; - private StateChartState _onWall = null!; - private StateChartState _onWallHugging = null!; - private StateChartState _onWallHanging = null!; - private StateChartState _onWallRunning = null!; + private StateChartState _grounded; + private StateChartState _airborne; + private StateChartState _coyoteEnabled; + private StateChartState _jumping; + private StateChartState _simpleJump; + private StateChartState _doubleJump; + private StateChartState _mantling; + private StateChartState _simpleDash; + private StateChartState _aimedDash; + private StateChartState _weaponDash; + private StateChartState _sliding; + private StateChartState _groundSliding; + private StateChartState _airGliding; + private StateChartState _airGlidingDoubleJump; + private StateChartState _slideCanceled; + private StateChartState _slamming; + private StateChartState _onWall; + private StateChartState _onWallHugging; + private StateChartState _onWallHanging; + private StateChartState _onWallRunning; - private StateChartState _attackStandard = null!; - private StateChartState _attackDash = null!; - private StateChartState _parryStandard = null!; - private StateChartState _parryDash = null!; + private StateChartState _attackStandard; + private StateChartState _attackDash; + private StateChartState _parryStandard; + private StateChartState _parryDash; - private Transition _onJumpFromWall = null!; - private Transition _onJumpFromWallFalling = null!; - private Transition _onJumpFromWallRunning = null!; - private Transition _onLeaveWallFromRun = null!; - private Transition _onAirborneToGrounded = null!; + private Transition _onJumpFromWall; + private Transition _onJumpFromWallFalling; + private Transition _onJumpFromWallRunning; + private Transition _onLeaveWallFromRun; + private Transition _onAirborneToGrounded; - private Transition _onGroundSlideJump = null!; - private Transition _onAirGlideDoubleJump = null!; + private Transition _onGroundSlideJump; + private Transition _onAirGlideDoubleJump; // Damage public CDamageable? CDamageable { get; set; } @@ -395,9 +395,9 @@ public partial class PlayerController : CharacterBody3D, private readonly List _hitEnemies = new List(); - private ShapeCast3D _closeEnemyDetector = null!; - private RayCast3D _aimAssisRayCast = null!; - private Camera3D _camera = null!; + private ShapeCast3D _closeEnemyDetector; + private RayCast3D _aimAssisRayCast; + private Camera3D _camera; public override void _Ready() { @@ -2348,7 +2348,7 @@ public partial class PlayerController : CharacterBody3D, _audioStream.SwitchToClipByName("parry"); } - private PhysicsDirectSpaceState3D _spaceState = null!; + private PhysicsDirectSpaceState3D _spaceState; public void StartDashAction(bool isParry) { if (isParry) HeadSystem.OnParry(); -- 2.49.1 From c92eb19a1c9e064802dfc53601ba3b6188e5d3bb Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 09:43:12 +0100 Subject: [PATCH 07/12] Revert "removed null!" This reverts commit 290f79afd49b0792e1598c2e0a20aaf8ceeaa816. --- addons/forge/core/ForgeManagers.cs | 2 +- .../attributes/AttributeEditorProperty.cs | 2 +- .../AttributeSetClassEditorProperty.cs | 2 +- .../forge/editor/cues/CueKeyEditorProperty.cs | 2 +- .../editor/tags/TagContainerEditorProperty.cs | 12 +- addons/forge/editor/tags/TagEditorProperty.cs | 12 +- addons/forge/editor/tags/TagsEditor.cs | 2 +- addons/forge/nodes/ForgeEntity.cs | 10 +- scenes/components/damage/RDamageModifier.cs | 2 +- scenes/components/health/CHealth.cs | 6 +- scenes/components/knockback/CKnockback.cs | 4 +- .../components/movement/CGroundedMovement.cs | 4 +- scenes/enemies/Enemy.cs | 32 ++-- .../components/dash/DashSystem.cs | 22 +-- .../components/weapon/WeaponSystem.cs | 16 +- .../scripts/PlayerController.cs | 172 +++++++++--------- 16 files changed, 151 insertions(+), 151 deletions(-) diff --git a/addons/forge/core/ForgeManagers.cs b/addons/forge/core/ForgeManagers.cs index 0adbf778..c13cf167 100644 --- a/addons/forge/core/ForgeManagers.cs +++ b/addons/forge/core/ForgeManagers.cs @@ -8,7 +8,7 @@ namespace Gamesmiths.Forge.Godot.Core; public class ForgeManagers { - public static ForgeManagers Instance { get; private set; } + public static ForgeManagers Instance { get; private set; } = null!; public TagsManager TagsManager { get; private set; } diff --git a/addons/forge/editor/attributes/AttributeEditorProperty.cs b/addons/forge/editor/attributes/AttributeEditorProperty.cs index 19c7a622..dbdf791f 100644 --- a/addons/forge/editor/attributes/AttributeEditorProperty.cs +++ b/addons/forge/editor/attributes/AttributeEditorProperty.cs @@ -11,7 +11,7 @@ public partial class AttributeEditorProperty : EditorProperty private const int ButtonSize = 26; private const int PopupSize = 300; - private Label _label; + private Label _label = null!; public override void _Ready() { diff --git a/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs b/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs index 5b6fbc7a..fbda0d75 100644 --- a/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs +++ b/addons/forge/editor/attributes/AttributeSetClassEditorProperty.cs @@ -14,7 +14,7 @@ namespace Gamesmiths.Forge.Godot.Editor.Attributes; [Tool] public partial class AttributeSetClassEditorProperty : EditorProperty { - private OptionButton _optionButton; + private OptionButton _optionButton = null!; public override void _Ready() { diff --git a/addons/forge/editor/cues/CueKeyEditorProperty.cs b/addons/forge/editor/cues/CueKeyEditorProperty.cs index 5db6769c..8681f14c 100644 --- a/addons/forge/editor/cues/CueKeyEditorProperty.cs +++ b/addons/forge/editor/cues/CueKeyEditorProperty.cs @@ -14,7 +14,7 @@ public partial class CueKeyEditorProperty : EditorProperty private const int ButtonSize = 26; private const int PopupSize = 300; - private Label _label; + private Label _label = null!; public override void _Ready() { diff --git a/addons/forge/editor/tags/TagContainerEditorProperty.cs b/addons/forge/editor/tags/TagContainerEditorProperty.cs index eb893491..e2ab253f 100644 --- a/addons/forge/editor/tags/TagContainerEditorProperty.cs +++ b/addons/forge/editor/tags/TagContainerEditorProperty.cs @@ -15,13 +15,13 @@ public partial class TagContainerEditorProperty : EditorProperty { private readonly Dictionary _treeItemToNode = []; - private VBoxContainer _root; - private Button _containerButton; - private ScrollContainer _scroll; - private Tree _tree; + private VBoxContainer _root = null!; + private Button _containerButton = null!; + private ScrollContainer _scroll = null!; + private Tree _tree = null!; - private Texture2D _checkedIcon; - private Texture2D _uncheckedIcon; + private Texture2D _checkedIcon = null!; + private Texture2D _uncheckedIcon = null!; private GodotStringArray _currentValue = []; diff --git a/addons/forge/editor/tags/TagEditorProperty.cs b/addons/forge/editor/tags/TagEditorProperty.cs index ce491b46..05edd2de 100644 --- a/addons/forge/editor/tags/TagEditorProperty.cs +++ b/addons/forge/editor/tags/TagEditorProperty.cs @@ -13,13 +13,13 @@ public partial class TagEditorProperty : EditorProperty { private readonly Dictionary _treeItemToNode = []; - private VBoxContainer _root; - private Button _containerButton; - private ScrollContainer _scroll; - private Tree _tree; + private VBoxContainer _root = null!; + private Button _containerButton = null!; + private ScrollContainer _scroll = null!; + private Tree _tree = null!; - private Texture2D _checkedIcon; - private Texture2D _uncheckedIcon; + private Texture2D _checkedIcon = null!; + private Texture2D _uncheckedIcon = null!; private string _currentValue = string.Empty; diff --git a/addons/forge/editor/tags/TagsEditor.cs b/addons/forge/editor/tags/TagsEditor.cs index f9b3f235..e14a9f57 100644 --- a/addons/forge/editor/tags/TagsEditor.cs +++ b/addons/forge/editor/tags/TagsEditor.cs @@ -16,7 +16,7 @@ public partial class TagsEditor : VBoxContainer, ISerializationListener { private readonly Dictionary _treeItemToNode = []; - private TagsManager _tagsManager; + private TagsManager _tagsManager = null!; private ForgeData? _forgePluginData; diff --git a/addons/forge/nodes/ForgeEntity.cs b/addons/forge/nodes/ForgeEntity.cs index f6455110..6f638655 100644 --- a/addons/forge/nodes/ForgeEntity.cs +++ b/addons/forge/nodes/ForgeEntity.cs @@ -18,15 +18,15 @@ public partial class ForgeEntity : Node, IForgeEntity [Export] public ForgeTagContainer BaseTags { get; set; } = new(); - public EntityAttributes Attributes { get; set; } + public EntityAttributes Attributes { get; set; } = null!; - public EntityTags Tags { get; set; } + public EntityTags Tags { get; set; } = null!; - public EffectsManager EffectsManager { get; set; } + public EffectsManager EffectsManager { get; set; } = null!; - public EntityAbilities Abilities { get; set; } + public EntityAbilities Abilities { get; set; } = null!; - public EventManager Events { get; set; } + public EventManager Events { get; set; } = null!; public override void _Ready() { diff --git a/scenes/components/damage/RDamageModifier.cs b/scenes/components/damage/RDamageModifier.cs index b421b409..29bebc7b 100644 --- a/scenes/components/damage/RDamageModifier.cs +++ b/scenes/components/damage/RDamageModifier.cs @@ -7,7 +7,7 @@ using Movementtests.systems.damage; [GlobalClass] public partial class RDamageModifier : Resource, IDamageable { - public event Action DamageTaken; + public event Action DamageTaken = null!; [Export] public EDamageTypes DamageType { get; set;} diff --git a/scenes/components/health/CHealth.cs b/scenes/components/health/CHealth.cs index f07ec474..ea6b6f25 100644 --- a/scenes/components/health/CHealth.cs +++ b/scenes/components/health/CHealth.cs @@ -5,11 +5,11 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_heart.png")] public partial class CHealth : Node, IHealthable { - public event Action HealthChanged; - public event Action HealthDepleted; + public event Action HealthChanged = null!; + public event Action HealthDepleted = null!; [Export] - public RHealth RHealth { get; set; } + public RHealth RHealth { get; set; } = null!; public float CurrentHealth { get; set; } diff --git a/scenes/components/knockback/CKnockback.cs b/scenes/components/knockback/CKnockback.cs index 4f53c899..b631b29b 100644 --- a/scenes/components/knockback/CKnockback.cs +++ b/scenes/components/knockback/CKnockback.cs @@ -5,9 +5,9 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_wind.png")] public partial class CKnockback : Node3D, IKnockbackable { - [Export] public RKnockback RKnockback { get; set; } + [Export] public RKnockback RKnockback { get; set;} = null!; - private KnockbackRecord _knockbackRecord; + private KnockbackRecord _knockbackRecord = null!; public void RegisterKnockback(KnockbackRecord knockbackRecord) { diff --git a/scenes/components/movement/CGroundedMovement.cs b/scenes/components/movement/CGroundedMovement.cs index 3943c36f..bd804fca 100644 --- a/scenes/components/movement/CGroundedMovement.cs +++ b/scenes/components/movement/CGroundedMovement.cs @@ -6,9 +6,9 @@ namespace Movementtests.scenes.movement; [GlobalClass, Icon("res://assets/ui/IconGodotNode/node_3D/icon_path_follow.png")] public partial class CGroundedMovement : Node3D, IMoveable { - [Export] public RMovement RMovement { get; set; } + [Export] public RMovement RMovement { get; set; } = null!; - [Export] public RayCast3D WallInFrontRayCast { get; set; } + [Export] public RayCast3D WallInFrontRayCast { get; set; } = null!; public Vector3 ComputeVelocity(MovementInputs inputs) diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index 40c5171a..f7a10210 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -16,37 +16,37 @@ public partial class Enemy : CharacterBody3D, IStunnable { // Signals and events - public event Action DamageTaken; - public event Action HealthChanged; - public event Action HealthDepleted; + public event Action DamageTaken = null!; + public event Action HealthChanged = null!; + public event Action HealthDepleted = null!; // Public export components [Export] - public Node3D Target { get; set;} + public Node3D Target { get; set; } = null!; [Export] public float EnemyHeight { get; set; } = 1f; [ExportGroup("Health")] [Export] - public RHealth RHealth { get; set; } + public RHealth RHealth { get; set; } = null!; [Export] - public RDeathEffect[] DeathEffects { get; set; } - public IHealthable CHealth { get; set; } + public RDeathEffect[] DeathEffects { get; set; } = null!; + public IHealthable CHealth { get; set; } = null!; [ExportGroup("Damage")] [Export] - public RDamage RDamage { get; set; } - public IDamageable CDamageable { get; set; } + public RDamage RDamage { get; set; } = null!; + public IDamageable CDamageable { get; set; } = null!; [Export] - public RKnockback RKnockback { get; set; } - public IKnockbackable CKnockback { get; set; } + public RKnockback RKnockback { get; set; } = null!; + public IKnockbackable CKnockback { get; set; } = null!; [ExportGroup("Movement")] [Export] - public RMovement RMovement { get; set; } - public IMoveable CMovement { get; set; } + public RMovement RMovement { get; set; } = null!; + public IMoveable CMovement { get; set; } = null!; // Public stuff public float CurrentHealth @@ -56,9 +56,9 @@ public partial class Enemy : CharacterBody3D, } // Private stuff - private Area3D _damageBox; - private Node3D _target; - private Healthbar _healthbar; + private Area3D _damageBox = null!; + private Node3D _target = null!; + private Healthbar _healthbar = null!; public override void _Ready() { diff --git a/scenes/player_controller/components/dash/DashSystem.cs b/scenes/player_controller/components/dash/DashSystem.cs index ec773b93..1b282f7e 100644 --- a/scenes/player_controller/components/dash/DashSystem.cs +++ b/scenes/player_controller/components/dash/DashSystem.cs @@ -24,21 +24,21 @@ public partial class DashSystem: Node3D public bool ShouldMantle { get; set; } public Vector3 PlannedMantleLocation { get; set; } - public MantleSystem MantleSystem { get; set; } + public MantleSystem MantleSystem { get; set; } = null!; - private HeadSystem Head; - public ShapeCast3D DashCast3D; - private Camera3D Camera; + private HeadSystem Head = null!; + public ShapeCast3D DashCast3D = null!; + private Camera3D Camera = null!; private Vector3 DashDirection = Vector3.Zero; - private ShapeCast3D DashCastDrop; - private MeshInstance3D DashDropIndicator; - private MeshInstance3D DashDropLocationIndicator; - private MeshInstance3D DashTarget; - private CpuParticles3D DashIndicator; - private AnimationPlayer DashIndicatorAnim; + private ShapeCast3D DashCastDrop = null!; + private MeshInstance3D DashDropIndicator = null!; + private MeshInstance3D DashDropLocationIndicator = null!; + private MeshInstance3D DashTarget = null!; + private CpuParticles3D DashIndicator = null!; + private AnimationPlayer DashIndicatorAnim = null!; - [Export] public PackedScene DashIndicatorScene { get; set; } + [Export] public PackedScene DashIndicatorScene { get; set; } = null!; [Signal] public delegate void DashStartedEventHandler(); diff --git a/scenes/player_controller/components/weapon/WeaponSystem.cs b/scenes/player_controller/components/weapon/WeaponSystem.cs index 3ad61e8c..e9590a0e 100644 --- a/scenes/player_controller/components/weapon/WeaponSystem.cs +++ b/scenes/player_controller/components/weapon/WeaponSystem.cs @@ -22,11 +22,11 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer [Export(PropertyHint.Range, "0,0.2,0.01,or_greater")] public float StraightThrowDuration { get; set; } = 0.1f; - private StateChart _weaponState; - public StateChartState InHandState; - public StateChartState FlyingState; - public StateChartState PlantedState; - private ShapeCast3D _dashCast3D; + private StateChart _weaponState = null!; + public StateChartState InHandState = null!; + public StateChartState FlyingState = null!; + public StateChartState PlantedState = null!; + private ShapeCast3D _dashCast3D = null!; private Transform3D _startTransform; private Vector3 _startMeshRotation; @@ -36,9 +36,9 @@ public partial class WeaponSystem : RigidBody3D, IDamageDealer public Vector3 PlantNormal { get; set; } public Node? PlantObject { get; set; } - public MeshInstance3D WeaponLocationIndicator { get; set; } - public StandardMaterial3D WeaponLocationIndicatorMaterial { get; set; } - public MeshInstance3D WeaponMesh { get; set; } + public MeshInstance3D WeaponLocationIndicator { get; set; } = null!; + public StandardMaterial3D WeaponLocationIndicatorMaterial { get; set; } = null!; + public MeshInstance3D WeaponMesh { get; set; } = null!; public void Init() { diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index 5876f7cc..4b1ffa4e 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -49,45 +49,45 @@ public partial class PlayerController : CharacterBody3D, [Signal] public delegate void PlayerDiedEventHandler(); - public event Action DamageTaken; - public event Action HealthChanged; - public event Action HealthDepleted; + public event Action DamageTaken = null!; + public event Action HealthChanged = null!; + public event Action HealthDepleted = null!; /////////////////////////// // Public stuff // /////////////////////////// - public HeadSystem HeadSystem; - public StairsSystem StairsSystem; - public MantleSystem MantleSystem; - public DashSystem DashSystem; - public CollisionShape3D StandingCollider; - public CollisionShape3D SlideCollider; - public WeaponSystem WeaponSystem; - public WallHugSystem WallHugSystem; - public PlayerUi PlayerUi; - public TextureRect DashIndicator; - public ColorRect PowerCooldownIndicator; - public Node3D DashIndicatorNode; - public MeshInstance3D DashIndicatorMesh; - public CylinderMesh DashIndicatorMeshCylinder; - public RayCast3D WallRunSnapper; - public ShapeCast3D GroundDetector; - public ShapeCast3D CeilingDetector; - public RayCast3D DirectGroundDetector; - public Area3D WeaponHitbox; - public AudioStreamPlayer3D SfxPlayer; + public HeadSystem HeadSystem = null!; + public StairsSystem StairsSystem = null!; + public MantleSystem MantleSystem = null!; + public DashSystem DashSystem = null!; + public CollisionShape3D StandingCollider = null!; + public CollisionShape3D SlideCollider = null!; + public WeaponSystem WeaponSystem = null!; + public WallHugSystem WallHugSystem = null!; + public PlayerUi PlayerUi = null!; + public TextureRect DashIndicator = null!; + public ColorRect PowerCooldownIndicator = null!; + public Node3D DashIndicatorNode = null!; + public MeshInstance3D DashIndicatorMesh = null!; + public CylinderMesh DashIndicatorMeshCylinder = null!; + public RayCast3D WallRunSnapper = null!; + public ShapeCast3D GroundDetector = null!; + public ShapeCast3D CeilingDetector = null!; + public RayCast3D DirectGroundDetector = null!; + public Area3D WeaponHitbox = null!; + public AudioStreamPlayer3D SfxPlayer = null!; - public ShapeCast3D DashDamageDetector; - public Area3D SlidingEnemyDetector; + public ShapeCast3D DashDamageDetector = null!; + public Area3D SlidingEnemyDetector = null!; - public EntityAttributes Attributes { get; set; } - public EntityTags Tags { get; set; } - public EffectsManager EffectsManager { get; set; } - public EntityAbilities Abilities { get; set; } - public EventManager Events { get; set; } + public EntityAttributes Attributes { get; set; } = null!; + public EntityTags Tags { get; set; } = null!; + public EffectsManager EffectsManager { get; set; } = null!; + public EntityAbilities Abilities { get; set; } = null!; + public EventManager Events { get; set; } = null!; // Inspector stuff - [Export] public Marker3D TutorialWeaponTarget; + [Export] public Marker3D TutorialWeaponTarget = null!; [Export] public bool TutorialDone { get; set; } [Export] public bool HasSword { get; set; } = true; [Export] public bool HasParry { get; set; } = true; @@ -102,9 +102,9 @@ public partial class PlayerController : CharacterBody3D, [Export(PropertyHint.Range, "0,10f,0.1,or_greater")] public float AimAssistReductionStartDistance { get; set; } = 10f; - [ExportGroup("Damage")] [Export] public RDamage RDamage { get; set; } - [Export] public RKnockback? RKnockback { get; set; } - [Export] public RHealth? RHealth { get; set; } + [ExportGroup("Damage")] [Export] public RDamage RDamage { get; set; } = null!; + [Export] public RKnockback? RKnockback { get; set; } = null!; + [Export] public RHealth? RHealth { get; set; } = null!; [ExportGroup("Targeting")] [Export(PropertyHint.Range, "0,20,0.1,or_greater")] @@ -114,7 +114,7 @@ public partial class PlayerController : CharacterBody3D, [ExportGroup("Instantiation")] [Export] - public PackedScene Explosion { get; set; } + public PackedScene Explosion { get; set; } = null!; // Movement stuff [ExportCategory("Movement")] @@ -141,7 +141,7 @@ public partial class PlayerController : CharacterBody3D, [Export(PropertyHint.Range, "0,1,0.01,or_greater")] public float MantleTime { get; set; } = 0.1f; [Export] - public PackedScene MantlePath { get; set; } + public PackedScene MantlePath { get; set; } = null!; [Export(PropertyHint.Range, "0,50,0.1")] public float MantleDashStrength { get; set; } = 15f; @@ -266,8 +266,8 @@ public partial class PlayerController : CharacterBody3D, // Stairs and shit private float _lastFrameWasOnFloor = -Mathf.Inf; private const int NumOfHeadCollisionDetectors = 4; - private RayCast3D[] _headCollisionDetectors; - private AudioStreamPlaybackInteractive _audioStream; + private RayCast3D[] _headCollisionDetectors = null!; + private AudioStreamPlaybackInteractive _audioStream = null!; // Basic movement private bool _movementEnabled = true; @@ -291,7 +291,7 @@ public partial class PlayerController : CharacterBody3D, private Path? _mantlePath; private bool _customMantle; private Transform3D _customMantleStartTransform; - private Curve3D _customMantleCurve; + private Curve3D _customMantleCurve = null!; private Vector3 _mantleStartPosition; private Vector3 _velocityOnMantleStarted = Vector3.Zero; @@ -328,56 +328,56 @@ public partial class PlayerController : CharacterBody3D, private float _aimAssistMultiplier = 1.0f; // Timers - private Timer _timeScaleAimInAirTimer; - private Timer _weaponThrowUncatchableTimer; - private Timer _simpleDashCooldownTimer; - private Timer _airborneDashCooldownTimer; - private Timer _powerCooldownTimer; - private Timer _invincibilityTimer; - private Timer _attackCooldown; + private Timer _timeScaleAimInAirTimer = null!; + private Timer _weaponThrowUncatchableTimer = null!; + private Timer _simpleDashCooldownTimer = null!; + private Timer _airborneDashCooldownTimer = null!; + private Timer _powerCooldownTimer = null!; + private Timer _invincibilityTimer = null!; + private Timer _attackCooldown = null!; // State chart - private StateChart _playerState; + private StateChart _playerState = null!; - private StateChartState _aiming; - private StateChartState _powerExpired; - private StateChartState _powerRecharging; - private StateChartState _powerFull; + private StateChartState _aiming = null!; + private StateChartState _powerExpired = null!; + private StateChartState _powerRecharging = null!; + private StateChartState _powerFull = null!; - private StateChartState _grounded; - private StateChartState _airborne; - private StateChartState _coyoteEnabled; - private StateChartState _jumping; - private StateChartState _simpleJump; - private StateChartState _doubleJump; - private StateChartState _mantling; - private StateChartState _simpleDash; - private StateChartState _aimedDash; - private StateChartState _weaponDash; - private StateChartState _sliding; - private StateChartState _groundSliding; - private StateChartState _airGliding; - private StateChartState _airGlidingDoubleJump; - private StateChartState _slideCanceled; - private StateChartState _slamming; - private StateChartState _onWall; - private StateChartState _onWallHugging; - private StateChartState _onWallHanging; - private StateChartState _onWallRunning; + private StateChartState _grounded = null!; + private StateChartState _airborne = null!; + private StateChartState _coyoteEnabled = null!; + private StateChartState _jumping = null!; + private StateChartState _simpleJump = null!; + private StateChartState _doubleJump = null!; + private StateChartState _mantling = null!; + private StateChartState _simpleDash = null!; + private StateChartState _aimedDash = null!; + private StateChartState _weaponDash = null!; + private StateChartState _sliding = null!; + private StateChartState _groundSliding = null!; + private StateChartState _airGliding = null!; + private StateChartState _airGlidingDoubleJump = null!; + private StateChartState _slideCanceled = null!; + private StateChartState _slamming = null!; + private StateChartState _onWall = null!; + private StateChartState _onWallHugging = null!; + private StateChartState _onWallHanging = null!; + private StateChartState _onWallRunning = null!; - private StateChartState _attackStandard; - private StateChartState _attackDash; - private StateChartState _parryStandard; - private StateChartState _parryDash; + private StateChartState _attackStandard = null!; + private StateChartState _attackDash = null!; + private StateChartState _parryStandard = null!; + private StateChartState _parryDash = null!; - private Transition _onJumpFromWall; - private Transition _onJumpFromWallFalling; - private Transition _onJumpFromWallRunning; - private Transition _onLeaveWallFromRun; - private Transition _onAirborneToGrounded; + private Transition _onJumpFromWall = null!; + private Transition _onJumpFromWallFalling = null!; + private Transition _onJumpFromWallRunning = null!; + private Transition _onLeaveWallFromRun = null!; + private Transition _onAirborneToGrounded = null!; - private Transition _onGroundSlideJump; - private Transition _onAirGlideDoubleJump; + private Transition _onGroundSlideJump = null!; + private Transition _onAirGlideDoubleJump = null!; // Damage public CDamageable? CDamageable { get; set; } @@ -395,9 +395,9 @@ public partial class PlayerController : CharacterBody3D, private readonly List _hitEnemies = new List(); - private ShapeCast3D _closeEnemyDetector; - private RayCast3D _aimAssisRayCast; - private Camera3D _camera; + private ShapeCast3D _closeEnemyDetector = null!; + private RayCast3D _aimAssisRayCast = null!; + private Camera3D _camera = null!; public override void _Ready() { @@ -2348,7 +2348,7 @@ public partial class PlayerController : CharacterBody3D, _audioStream.SwitchToClipByName("parry"); } - private PhysicsDirectSpaceState3D _spaceState; + private PhysicsDirectSpaceState3D _spaceState = null!; public void StartDashAction(bool isParry) { if (isParry) HeadSystem.OnParry(); -- 2.49.1 From ddc85655be934c01b1f9ad4b3e46c8e92a90c9df Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 09:43:38 +0100 Subject: [PATCH 08/12] Revert "removed internal" This reverts commit 5408f455af663530d198af11d7b81c4dae71858e. --- export_presets.cfg | 6 ++--- scenes/enemies/Enemy.cs | 2 +- scenes/player_controller/PlayerUi.cs | 2 +- .../components/dash/DashSystem.cs | 20 +++++++------- .../components/head/HeadSystem.cs | 26 +++++++++---------- .../scripts/PlayerController.cs | 6 ++--- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index f7f3baa6..f7bcbbbc 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -46,7 +46,7 @@ kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=false +dotnet/embed_build_outputs=true texture_format/bptc=true texture_format/s3tc=true texture_format/etc=false @@ -125,7 +125,7 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=false +dotnet/embed_build_outputs=true texture_format/bptc=true texture_format/s3tc=true texture_format/etc=false @@ -472,4 +472,4 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi Remove-Item -Recurse -Force '{temp_dir}'" dotnet/include_scripts_content=false dotnet/include_debug_symbols=true -dotnet/embed_build_outputs=false +dotnet/embed_build_outputs=true diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index f7a10210..9b86f798 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -57,7 +57,7 @@ public partial class Enemy : CharacterBody3D, // Private stuff private Area3D _damageBox = null!; - private Node3D _target = null!; + internal Node3D _target = null!; private Healthbar _healthbar = null!; public override void _Ready() diff --git a/scenes/player_controller/PlayerUi.cs b/scenes/player_controller/PlayerUi.cs index 746ef740..bb9bf0f0 100644 --- a/scenes/player_controller/PlayerUi.cs +++ b/scenes/player_controller/PlayerUi.cs @@ -5,7 +5,7 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")] public partial class PlayerUi : Control { - private TextureRect[] _dashIcons = new TextureRect[3]; + internal TextureRect[] _dashIcons = new TextureRect[3]; private TextureRect _enemyTarget; private Healthbar _healthbar; diff --git a/scenes/player_controller/components/dash/DashSystem.cs b/scenes/player_controller/components/dash/DashSystem.cs index 1b282f7e..87d4d587 100644 --- a/scenes/player_controller/components/dash/DashSystem.cs +++ b/scenes/player_controller/components/dash/DashSystem.cs @@ -26,17 +26,17 @@ public partial class DashSystem: Node3D public Vector3 PlannedMantleLocation { get; set; } public MantleSystem MantleSystem { get; set; } = null!; - private HeadSystem Head = null!; + internal HeadSystem Head = null!; public ShapeCast3D DashCast3D = null!; - private Camera3D Camera = null!; - private Vector3 DashDirection = Vector3.Zero; + internal Camera3D Camera = null!; + internal Vector3 DashDirection = Vector3.Zero; - private ShapeCast3D DashCastDrop = null!; - private MeshInstance3D DashDropIndicator = null!; - private MeshInstance3D DashDropLocationIndicator = null!; - private MeshInstance3D DashTarget = null!; - private CpuParticles3D DashIndicator = null!; - private AnimationPlayer DashIndicatorAnim = null!; + internal ShapeCast3D DashCastDrop = null!; + internal MeshInstance3D DashDropIndicator = null!; + internal MeshInstance3D DashDropLocationIndicator = null!; + internal MeshInstance3D DashTarget = null!; + internal CpuParticles3D DashIndicator = null!; + internal AnimationPlayer DashIndicatorAnim = null!; [Export] public PackedScene DashIndicatorScene { get; set; } = null!; @@ -75,7 +75,7 @@ public partial class DashSystem: Node3D DashIndicatorAnim = GetNode("DashIndicator/AnimationPlayer"); } - private DashLocation ComputeDashLocation() + internal DashLocation ComputeDashLocation() { var targetLocation = DashCast3D.ToGlobal(DashCast3D.TargetPosition); var hasHit = DashCast3D.IsColliding(); diff --git a/scenes/player_controller/components/head/HeadSystem.cs b/scenes/player_controller/components/head/HeadSystem.cs index 9e883ad9..50653503 100644 --- a/scenes/player_controller/components/head/HeadSystem.cs +++ b/scenes/player_controller/components/head/HeadSystem.cs @@ -39,10 +39,10 @@ public partial class HeadSystem : Node3D float BobbingMultiplier, float FovMultiplier); - private Camera3D _camera; - private Marker3D _cameraAnchor; - private AnimationPlayer _animationPlayer; - private AnimationTree _animationTree; + internal Camera3D _camera; + internal Marker3D _cameraAnchor; + internal AnimationPlayer _animationPlayer; + internal AnimationTree _animationTree; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] public float LookSensitivity { get; set; } = 1f; @@ -63,11 +63,11 @@ public partial class HeadSystem : Node3D [Export(PropertyHint.Range, "0,1,0.01,or_greater")] public float SlidingJitterAmplitude { get; set; } = 0.1f; - private FastNoiseLite _slidingNoise = new FastNoiseLite(); + internal FastNoiseLite _slidingNoise = new FastNoiseLite(); [ExportGroup("Bobbing")] - private float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis + internal float _bobbingAccumulator; // Constantly increases when player moves in X or/and Z axis [Export(PropertyHint.Range, "0,10,0.01,or_greater")] public float BobbingFrequency { set; get; } = 2.4f; [Export(PropertyHint.Range, "0,0.4,0.01,or_greater")] @@ -84,11 +84,11 @@ public partial class HeadSystem : Node3D public float FovMaxedOutSpeed { get; set; } = 20f; [ExportGroup("First Person rig")] - private Node3D _fpRig; - private Node3D _rightHandedWeapon; - private Node3D _leftHandedWeapon; - private Node3D _fpDisplacedRig; - private Vector3 _fpDisplacedRigInitialRotation; + internal Node3D _fpRig; + internal Node3D _rightHandedWeapon; + internal Node3D _leftHandedWeapon; + internal Node3D _fpDisplacedRig; + internal Vector3 _fpDisplacedRigInitialRotation; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] public float WeaponSway { get; set; } = 5f; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] @@ -190,8 +190,8 @@ public partial class HeadSystem : Node3D EmitSignalHitboxDeactivated(); } - private bool _footstepEmitted; - private bool _isPlayingForcingAnim; + internal bool _footstepEmitted; + internal bool _isPlayingForcingAnim; public void ResetHeadBobbing() { diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index 4b1ffa4e..eb353c52 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -277,8 +277,8 @@ public partial class PlayerController : CharacterBody3D, private float _inputRotateFloorplane; // Basic falling - private float TargetSpeed; - private float Gravity; + internal float TargetSpeed; + internal float Gravity; // Jump stuff private int _currentInputBufferFrames; @@ -302,7 +302,7 @@ public partial class PlayerController : CharacterBody3D, private Vector3 _currentWallContactPoint = Vector3.Zero; // Dash stuff - private bool CanDash = true; + internal bool CanDash = true; private bool _canDashAirborne = true; private float _playerHeight; private float _playerRadius; -- 2.49.1 From 8153ec07e72d8c355234e859b31e3baad363edcd Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 09:44:02 +0100 Subject: [PATCH 09/12] Revert "removing tests because they might break the solution" This reverts commit 3a21f00528c5ceec337b67fea9c0e04f159683d3. --- Movement tests.csproj | 1 + tests/components/DamageComponentUnitTest.cs | 101 ++++++++++++ .../components/DamageComponentUnitTest.cs.uid | 1 + tests/components/HealthComponentUnitTest.cs | 55 +++++++ .../components/HealthComponentUnitTest.cs.uid | 1 + .../components/KnockbackComponentUnitTest.cs | 32 ++++ .../KnockbackComponentUnitTest.cs.uid | 1 + tests/components/MovementSystemUnitTest.cs | 32 ++++ .../components/MovementSystemUnitTest.cs.uid | 1 + tests/enemies/EnemyUnitTest.cs | 30 ++++ tests/enemies/EnemyUnitTest.cs.uid | 1 + tests/player/DashSystemUnitTest.cs | 55 +++++++ tests/player/DashSystemUnitTest.cs.uid | 1 + tests/player/HeadSystemUnitTest.cs | 91 +++++++++++ tests/player/HeadSystemUnitTest.cs.uid | 1 + tests/player/PlayerControllerUnitTest.cs | 149 ++++++++++++++++++ tests/player/PlayerControllerUnitTest.cs.uid | 1 + tests/player/WeaponSystemUnitTest.cs | 51 ++++++ tests/player/WeaponSystemUnitTest.cs.uid | 1 + .../interactions/PlayerInteractionsTest.cs | 50 ++++++ .../PlayerInteractionsTest.cs.uid | 1 + .../player_interactions_scene.tscn | 35 ++++ tests/player/movement/PlayerMovementTest.cs | 109 +++++++++++++ .../player/movement/PlayerMovementTest.cs.uid | 1 + .../movement/player_movement_scene.tscn | 35 ++++ 25 files changed, 837 insertions(+) create mode 100644 tests/components/DamageComponentUnitTest.cs create mode 100644 tests/components/DamageComponentUnitTest.cs.uid create mode 100644 tests/components/HealthComponentUnitTest.cs create mode 100644 tests/components/HealthComponentUnitTest.cs.uid create mode 100644 tests/components/KnockbackComponentUnitTest.cs create mode 100644 tests/components/KnockbackComponentUnitTest.cs.uid create mode 100644 tests/components/MovementSystemUnitTest.cs create mode 100644 tests/components/MovementSystemUnitTest.cs.uid create mode 100644 tests/enemies/EnemyUnitTest.cs create mode 100644 tests/enemies/EnemyUnitTest.cs.uid create mode 100644 tests/player/DashSystemUnitTest.cs create mode 100644 tests/player/DashSystemUnitTest.cs.uid create mode 100644 tests/player/HeadSystemUnitTest.cs create mode 100644 tests/player/HeadSystemUnitTest.cs.uid create mode 100644 tests/player/PlayerControllerUnitTest.cs create mode 100644 tests/player/PlayerControllerUnitTest.cs.uid create mode 100644 tests/player/WeaponSystemUnitTest.cs create mode 100644 tests/player/WeaponSystemUnitTest.cs.uid create mode 100644 tests/player/interactions/PlayerInteractionsTest.cs create mode 100644 tests/player/interactions/PlayerInteractionsTest.cs.uid create mode 100644 tests/player/interactions/player_interactions_scene.tscn create mode 100644 tests/player/movement/PlayerMovementTest.cs create mode 100644 tests/player/movement/PlayerMovementTest.cs.uid create mode 100644 tests/player/movement/player_movement_scene.tscn diff --git a/Movement tests.csproj b/Movement tests.csproj index 11a9afa1..6d6d122a 100644 --- a/Movement tests.csproj +++ b/Movement tests.csproj @@ -125,6 +125,7 @@ + diff --git a/tests/components/DamageComponentUnitTest.cs b/tests/components/DamageComponentUnitTest.cs new file mode 100644 index 00000000..984a78c0 --- /dev/null +++ b/tests/components/DamageComponentUnitTest.cs @@ -0,0 +1,101 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class DamageComponentUnitTest +{ + [TestCase] + public void DamageModifierAppliesWhenTypeMatches() + { + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var modifier = new RDamageModifier(EDamageTypes.Normal, 2.0f); + var signalTriggered = false; + modifier.DamageTaken += (_, _) => signalTriggered = true; + + var result = modifier.TakeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(20.0f); + AssertBool(signalTriggered).IsTrue(); + } + + [TestCase] + public void DamageModifierIgnoresWhenTypeDifferent() + { + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var modifier = new RDamageModifier(EDamageTypes.Fire, 3.0f); + var signalTriggered = false; + modifier.DamageTaken += (_, _) => signalTriggered = true; + + var result = modifier.TakeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); + AssertBool(signalTriggered).IsFalse(); // No damage actually taken + } + + [TestCase] + public void DamageableSumsAllModifiers() + { + var mod1 = new RDamageModifier(EDamageTypes.Normal, 1.0f); + var mod2 = new RDamageModifier(EDamageTypes.Normal, 0.5f); + + var damageable = new CDamageable(); + damageable.DamageModifiers = new[] { mod1, mod2 }; + var signalTriggered = false; + damageable.DamageTaken += (_, _) => signalTriggered = true; + + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var result = damageable.TakeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(15.0f); + AssertBool(signalTriggered).IsTrue(); + } + + [TestCase] + public void ComputeDamageModifierAppliesWhenTypeMatches() + { + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var modifier = new RDamageModifier(EDamageTypes.Normal, 2.0f); + var signalTriggered = false; + modifier.DamageTaken += (_, _) => signalTriggered = true; + + var result = modifier.ComputeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(20.0f); + AssertBool(signalTriggered).IsFalse(); + } + [TestCase] + public void ComputeDamageModifierIgnoresWhenTypeDifferent() + { + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var modifier = new RDamageModifier(EDamageTypes.Fire, 3.0f); + var signalTriggered = false; + modifier.DamageTaken += (_, _) => signalTriggered = true; + + var result = modifier.ComputeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); + AssertBool(signalTriggered).IsFalse(); + } + [TestCase] + public void ComputeDamageableSumsAllModifiers() + { + var mod1 = new RDamageModifier(EDamageTypes.Normal, 1.0f); + var mod2 = new RDamageModifier(EDamageTypes.Normal, 0.5f); + + var cDamageable = new CDamageable(); + cDamageable.DamageModifiers = new[] { mod1, mod2 }; + var signalTriggered = false; + cDamageable.DamageTaken += (_, _) => signalTriggered = true; + + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + var result = cDamageable.ComputeDamage(input); + + AssertFloat(result.Damage.DamageDealt).IsEqual(15.0f); + AssertBool(signalTriggered).IsFalse(); + } +} diff --git a/tests/components/DamageComponentUnitTest.cs.uid b/tests/components/DamageComponentUnitTest.cs.uid new file mode 100644 index 00000000..1351834c --- /dev/null +++ b/tests/components/DamageComponentUnitTest.cs.uid @@ -0,0 +1 @@ +uid://db6rva7uccppc diff --git a/tests/components/HealthComponentUnitTest.cs b/tests/components/HealthComponentUnitTest.cs new file mode 100644 index 00000000..63d1cb0e --- /dev/null +++ b/tests/components/HealthComponentUnitTest.cs @@ -0,0 +1,55 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class HealthComponentUnitTest +{ + [TestCase] + public void ReadyInitializesCurrentHealth() + { + var cHealth = new CHealth(); + cHealth.RHealth = new RHealth(150.0f); + cHealth._Ready(); + AssertFloat(cHealth.CurrentHealth).IsEqual(150.0f); + } + + [TestCase] + public void ReduceHealthDecreasesAndDoesNotDeplete() + { + var cHealth = new CHealth(); + cHealth.RHealth = new RHealth(100.0f); + cHealth.CurrentHealth = 100.0f; + + var damage = new DamageRecord(Vector3.Zero, new RDamage(25.0f, EDamageTypes.Normal)); + var record = cHealth.ReduceHealth(source: null!, damageRecord: damage); + + AssertFloat(cHealth.CurrentHealth).IsEqual(75.0f); + AssertFloat(record.CurrentHealth).IsEqual(75.0f); + AssertFloat(record.PreviousHealth).IsEqual(100.0f); + AssertFloat(record.MaxHealth).IsEqual(100.0f); + } + + [TestCase] + public void ReduceHealthTriggersDepletionToZero() + { + var cHealth = new CHealth(); + cHealth.RHealth = new RHealth(50.0f); + cHealth.CurrentHealth = 50.0f; + + bool depleted = false; + cHealth.HealthDepleted += _ => depleted = true; + + var damage = new DamageRecord(Vector3.Zero, new RDamage(100.0f, EDamageTypes.Normal)); + var record = cHealth.ReduceHealth(source: null!, damageRecord: damage); + + AssertBool(depleted).IsTrue(); + AssertFloat(cHealth.CurrentHealth).IsEqual(0.0f); + AssertFloat(record.CurrentHealth).IsEqual(-50.0f); + AssertFloat(record.MaxHealth).IsEqual(50.0f); + } +} diff --git a/tests/components/HealthComponentUnitTest.cs.uid b/tests/components/HealthComponentUnitTest.cs.uid new file mode 100644 index 00000000..00cee7a1 --- /dev/null +++ b/tests/components/HealthComponentUnitTest.cs.uid @@ -0,0 +1 @@ +uid://bd52i51hncgmf diff --git a/tests/components/KnockbackComponentUnitTest.cs b/tests/components/KnockbackComponentUnitTest.cs new file mode 100644 index 00000000..605d7f75 --- /dev/null +++ b/tests/components/KnockbackComponentUnitTest.cs @@ -0,0 +1,32 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class KnockbackComponentUnitTest +{ + [TestCase] + public void RegisterAndComputeKnockback() + { + var cKnock = new CKnockback(); + cKnock.RKnockback = new RKnockback(2.0f); + cKnock.GlobalPosition = Vector3.Zero; + + var damage = new DamageRecord(new Vector3(10, 0, 0), new RDamage(0, EDamageTypes.Normal)); + var record = new KnockbackRecord(damage, 1.5f); + + cKnock.RegisterKnockback(record); + var force = cKnock.ComputeKnockback(); + + // Direction from source(10,0,0) to target(0,0,0) is (-1,0,0), scaled by modifier(2) and multiplier(1.5) => (-3,0,0) + AssertVector(force).IsEqual(new Vector3(-3, 0, 0)); + + // Second call returns zero since internal state resets + var second = cKnock.ComputeKnockback(); + AssertVector(second).IsEqual(Vector3.Zero); + } +} diff --git a/tests/components/KnockbackComponentUnitTest.cs.uid b/tests/components/KnockbackComponentUnitTest.cs.uid new file mode 100644 index 00000000..c5795539 --- /dev/null +++ b/tests/components/KnockbackComponentUnitTest.cs.uid @@ -0,0 +1 @@ +uid://bv0eionbgbig5 diff --git a/tests/components/MovementSystemUnitTest.cs b/tests/components/MovementSystemUnitTest.cs new file mode 100644 index 00000000..4e075eef --- /dev/null +++ b/tests/components/MovementSystemUnitTest.cs @@ -0,0 +1,32 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.scenes.movement; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class MovementSystemUnitTest +{ + [TestCase] + public void GroundedMovementAcceleratesAndAppliesGravity() + { + var move = new CGroundedMovement(); + move.RMovement = new RMovement(speed: 10.0f, acceleration: 1.0f, gravityModifier: 0.5f, targetHeight: 0.0f); + move.WallInFrontRayCast = new RayCast3D(); + //move.GlobalPosition = Vector3.Zero; + + var inputs = new MovementInputs( + Velocity: Vector3.Zero, + TargetLocation: new Vector3(10, 0, 0), + isOnFloor: false, + gravity: Vector3.Down * 9.8f, + delta: 1.0 + ); + + var v = move.ComputeVelocity(inputs); + + AssertVector(v).IsEqualApprox(new Vector3(10, -4.9f, 0), new Vector3(0.001f, 0.001f, 0.001f)); + } +} diff --git a/tests/components/MovementSystemUnitTest.cs.uid b/tests/components/MovementSystemUnitTest.cs.uid new file mode 100644 index 00000000..83493b96 --- /dev/null +++ b/tests/components/MovementSystemUnitTest.cs.uid @@ -0,0 +1 @@ +uid://cofj5s4x74ay diff --git a/tests/enemies/EnemyUnitTest.cs b/tests/enemies/EnemyUnitTest.cs new file mode 100644 index 00000000..cbd73410 --- /dev/null +++ b/tests/enemies/EnemyUnitTest.cs @@ -0,0 +1,30 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class EnemyUnitTest +{ + [TestCase] + public void ComputeDamageNoComponent() + { + var enemy = new Enemy(); + var input = new DamageRecord(Vector3.Zero, new RDamage(10.0f, EDamageTypes.Normal)); + + var result = enemy.ComputeDamage(input); + AssertFloat(result.Damage.DamageDealt).IsEqual(0.0f); + } + + [TestCase] + public void Unstun() + { + var enemy = new Enemy(); + enemy.IsStunned = true; + enemy.Unstun(); + AssertBool(enemy.IsStunned).IsFalse(); + } +} diff --git a/tests/enemies/EnemyUnitTest.cs.uid b/tests/enemies/EnemyUnitTest.cs.uid new file mode 100644 index 00000000..1c82d5ec --- /dev/null +++ b/tests/enemies/EnemyUnitTest.cs.uid @@ -0,0 +1 @@ +uid://cojxgcs6xqqoq diff --git a/tests/player/DashSystemUnitTest.cs b/tests/player/DashSystemUnitTest.cs new file mode 100644 index 00000000..1da71c91 --- /dev/null +++ b/tests/player/DashSystemUnitTest.cs @@ -0,0 +1,55 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.systems; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class DashSystemUnitTest +{ + private DashSystem _dashSystem; + + [BeforeTest] + public void SetupTest() + { + _dashSystem = new DashSystem(); + + _dashSystem.DashCast3D = new ShapeCast3D(); + _dashSystem.AddChild(_dashSystem.DashCast3D); + + _dashSystem.DashCastDrop = new ShapeCast3D(); + _dashSystem.AddChild(_dashSystem.DashCastDrop); + + _dashSystem.DashTarget = new MeshInstance3D(); + _dashSystem.AddChild(_dashSystem.DashTarget); + + _dashSystem.DashDropIndicator = new MeshInstance3D(); + _dashSystem.AddChild(_dashSystem.DashDropIndicator); + + _dashSystem.DashDropLocationIndicator = new MeshInstance3D(); + _dashSystem.AddChild(_dashSystem.DashDropLocationIndicator); + } + + [AfterTest] + public void CleanupTest() + { + _dashSystem?.Free(); + } + + [TestCase] + public void TestStopPreparingDash() + { + _dashSystem.CanDashThroughTarget = true; + _dashSystem.DashTarget.Visible = true; + _dashSystem.DashDropIndicator.Visible = true; + _dashSystem.DashDropLocationIndicator.Visible = true; + + _dashSystem.StopPreparingDash(); + + AssertBool(_dashSystem.CanDashThroughTarget).IsFalse(); + AssertBool(_dashSystem.DashTarget.Visible).IsFalse(); + AssertBool(_dashSystem.DashDropIndicator.Visible).IsFalse(); + AssertBool(_dashSystem.DashDropLocationIndicator.Visible).IsFalse(); + } +} diff --git a/tests/player/DashSystemUnitTest.cs.uid b/tests/player/DashSystemUnitTest.cs.uid new file mode 100644 index 00000000..545620a4 --- /dev/null +++ b/tests/player/DashSystemUnitTest.cs.uid @@ -0,0 +1 @@ +uid://pv570go4cxws diff --git a/tests/player/HeadSystemUnitTest.cs b/tests/player/HeadSystemUnitTest.cs new file mode 100644 index 00000000..07d06790 --- /dev/null +++ b/tests/player/HeadSystemUnitTest.cs @@ -0,0 +1,91 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.systems; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class HeadSystemUnitTest +{ + private HeadSystem _head; + + [BeforeTest] + public void SetupTest() + { + _head = new HeadSystem(); + _head._camera = new Camera3D(); + _head.AddChild(_head._camera); + + _head._cameraAnchor = new Marker3D(); + _head.AddChild(_head._cameraAnchor); + + _head._fpRig = new Node3D(); + _head.AddChild(_head._fpRig); + + _head._fpDisplacedRig = new Node3D(); + _head.AddChild(_head._fpDisplacedRig); + } + + [AfterTest] + public void CleanupTest() + { + _head?.Free(); + } + + [TestCase] + public void TestResetHeadBobbing() + { + _head._bobbingAccumulator = 10.0f; + _head.ResetHeadBobbing(); + AssertFloat(_head._bobbingAccumulator).IsEqual(0.0f); + } + + [TestCase] + public void TestComputeHowMuchInputForward() + { + Vector3 forwardInput = new Vector3(0, 0, -1); + AssertFloat(_head.ComputeHowMuchInputForward(forwardInput)).IsEqual(1.0f); + + Vector3 backwardInput = new Vector3(0, 0, 1); + AssertFloat(_head.ComputeHowMuchInputForward(backwardInput)).IsEqual(-1.0f); + } + + [TestCase] + public void TestComputeHowMuchInputSideways() + { + Vector3 rightInput = new Vector3(1, 0, 0); + AssertFloat(_head.ComputeHowMuchInputSideways(rightInput)).IsEqual(1.0f); + + Vector3 leftInput = new Vector3(-1, 0, 0); + AssertFloat(_head.ComputeHowMuchInputSideways(leftInput)).IsEqual(-1.0f); + } + + [TestCase] + public void TestGetForwardHorizontalVector() + { + Vector3 forward = _head.GetForwardHorizontalVector(); + AssertVector(forward).IsEqualApprox(Vector3.Back, new Vector3(0.001f, 0.001f, 0.001f)); + } + + [TestCase] + public void TestLookAroundRotation() + { + var inputs = new HeadSystem.CameraParameters( + Delta: 0.016, + LookDir: new Vector2(1, 0), + PlayerInput: Vector3.Zero, + PlayerVelocity: Vector3.Zero, + WallContactPoint: Vector3.Zero, + SensitivitMultiplier: 1.0f, + WithCameraJitter: false, + WithCameraBobbing: false, + BobbingMultiplier: 1.0f, + FovMultiplier: 1.0f + ); + + float initialY = _head.Rotation.Y; + _head.LookAround(inputs); + AssertFloat(_head.Rotation.Y).IsEqual(initialY + 1.0f); + } +} diff --git a/tests/player/HeadSystemUnitTest.cs.uid b/tests/player/HeadSystemUnitTest.cs.uid new file mode 100644 index 00000000..110c87c4 --- /dev/null +++ b/tests/player/HeadSystemUnitTest.cs.uid @@ -0,0 +1 @@ +uid://bp0xn8k3dmfkg diff --git a/tests/player/PlayerControllerUnitTest.cs b/tests/player/PlayerControllerUnitTest.cs new file mode 100644 index 00000000..c41fe8fc --- /dev/null +++ b/tests/player/PlayerControllerUnitTest.cs @@ -0,0 +1,149 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.interfaces; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class PlayerControllerUnitTest +{ + private PlayerController _player; + + [BeforeTest] + public void SetupTest() + { + _player = new PlayerController(); + _player.TargetSpeed = 7.0f; + _player.Gravity = 9.8f; + + var rHealth = new RHealth(100.0f); + _player.RHealth = rHealth; + _player.CHealth = new CHealth { RHealth = rHealth, CurrentHealth = 100.0f }; + } + + [AfterTest] + public void CleanupTest() + { + _player?.Free(); + } + + [TestCase] + public void TestCalculateGravityForce() + { + _player.Weight = 3.0f; + // gravity is 9.8f + AssertFloat(_player.CalculateGravityForce()).IsEqualApprox(29.4f, 0.001f); + } + + [TestCase] + public void TestIsPlayerInputtingForward() + { + // Test Keyboard Input + _player.InputDeviceChanged(false); + _player.OnInputMoveKeyboard(Vector3.Forward); + AssertBool(_player.IsPlayerInputtingForward()).IsTrue(); + + _player.OnInputMoveKeyboard(Vector3.Back); + AssertBool(_player.IsPlayerInputtingForward()).IsFalse(); + + // Test Gamepad Input + _player.InputDeviceChanged(true); + _player.OnInputMove(new Vector3(0, 0, -1)); + AssertBool(_player.IsPlayerInputtingForward()).IsTrue(); + } + + [TestCase] + public void TestSetVerticalVelocity() + { + _player.Velocity = new Vector3(1, 0, 2); + _player.SetVerticalVelocity(5.0f); + AssertVector(_player.Velocity).IsEqual(new Vector3(1, 5, 2)); + } + + [TestCase] + public void TestComputeHVelocityGround() + { + _player.Velocity = Vector3.Zero; + _player.AccelerationFloor = 10.0f; + + float delta = 0.1f; + Vector3 newVelocity = _player.ComputeHVelocity(delta, _player.AccelerationFloor, _player.DecelerationFloor, Vector3.Forward); + AssertVector(newVelocity).IsEqual(new Vector3(0, 0, -7.0f)); + } + + [TestCase] + public void TestComputeHVelocityAir() + { + _player.Velocity = new Vector3(5, 0, 0); + _player.AccelerationAir = 2.0f; + _player.DecelerationAir = 2.0f; + + float delta = 0.5f; + Vector3 newVelocity = _player.ComputeHVelocity(delta, _player.AccelerationAir, _player.DecelerationAir, Vector3.Zero); + + AssertVector(newVelocity).IsEqual(Vector3.Zero); + } + + [TestCase] + public void TestReduceHealth() + { + var damageRecord = new DamageRecord(Vector3.Zero, new RDamage(25.0f, EDamageTypes.Normal)); + _player.ReduceHealth(_player, damageRecord); + AssertFloat(_player.CHealth.CurrentHealth).IsEqual(75.0f); + } + + [TestCase] + public void TestEmpoweredActionsLeft() + { + var mockUi = new PlayerUi(); + var dashIcons = new TextureRect[3] { new TextureRect(), new TextureRect(), new TextureRect() }; + mockUi._dashIcons = dashIcons; + + _player.PlayerUi = mockUi; + + _player.EmpoweredActionsLeft = 2; + AssertInt(_player.EmpoweredActionsLeft).IsEqual(2); + AssertBool(dashIcons[0].Visible).IsTrue(); + AssertBool(dashIcons[1].Visible).IsTrue(); + AssertBool(dashIcons[2].Visible).IsFalse(); + } + + [TestCase] + public void TestDashCooldownTimeout() + { + _player.CanDash = false; + _player.DashCooldownTimeout(); + AssertBool(_player.CanDash).IsTrue(); + } + + [TestCase] + public void TestGetInputLocalHDirection() + { + _player.InputDeviceChanged(false); + _player.OnInputMoveKeyboard(new Vector3(1, 0, 1)); + + Vector3 expected = new Vector3(1, 0, 1).Normalized(); + AssertVector(_player.GetInputLocalHDirection()).IsEqualApprox(expected, new Vector3(0.001f, 0.001f, 0.001f)); + } + + [TestCase] + public void TestComputeKnockback() + { + var cKnockback = new CKnockback(); + cKnockback.RKnockback = new RKnockback(10.0f); + _player.CKnockback = cKnockback; + + var damageRecord = new DamageRecord(new Vector3(10, 0, 0), new RDamage(0, EDamageTypes.Normal)); + var knockbackRecord = new KnockbackRecord(damageRecord, 1.0f); + + _player.GlobalPosition = Vector3.Zero; + cKnockback.GlobalPosition = Vector3.Zero; + + _player.RegisterKnockback(knockbackRecord); + + Vector3 knockback = cKnockback.ComputeKnockback(); + AssertVector(knockback).IsEqual(new Vector3(-10, 0, 0)); + } +} diff --git a/tests/player/PlayerControllerUnitTest.cs.uid b/tests/player/PlayerControllerUnitTest.cs.uid new file mode 100644 index 00000000..16a906a1 --- /dev/null +++ b/tests/player/PlayerControllerUnitTest.cs.uid @@ -0,0 +1 @@ +uid://kmphtu0ovixi diff --git a/tests/player/WeaponSystemUnitTest.cs b/tests/player/WeaponSystemUnitTest.cs new file mode 100644 index 00000000..cd575190 --- /dev/null +++ b/tests/player/WeaponSystemUnitTest.cs @@ -0,0 +1,51 @@ +using Godot; +using GdUnit4; +using static GdUnit4.Assertions; +using Movementtests.systems; +using Movementtests.systems.damage; + +namespace Movementtests.tests; + +[TestSuite, RequireGodotRuntime] +public class WeaponSystemUnitTest +{ + private WeaponSystem _weapon; + + [BeforeTest] + public void SetupTest() + { + _weapon = new WeaponSystem(); + _weapon.RDamage = new RDamage(5.0f, EDamageTypes.Normal); + + _weapon.WeaponMesh = new MeshInstance3D(); + _weapon.AddChild(_weapon.WeaponMesh); + _weapon.WeaponLocationIndicator = new MeshInstance3D(); + _weapon.AddChild(_weapon.WeaponLocationIndicator); + } + + [AfterTest] + public void CleanupTest() + { + _weapon?.Free(); + } + + [TestCase] + public void TestWeaponLeftAndBackVisibility() + { + _weapon.Visible = false; + + _weapon.WeaponLeft(); + AssertBool(_weapon.Visible).IsTrue(); + + _weapon.WeaponBack(); + AssertBool(_weapon.Visible).IsFalse(); + } + + [TestCase] + public void TestThrowWeaponOnCurveSetsUnfrozen() + { + _weapon.Freeze = true; + _weapon.ThrowWeaponOnCurve(); + AssertBool(_weapon.Freeze).IsFalse(); + } +} diff --git a/tests/player/WeaponSystemUnitTest.cs.uid b/tests/player/WeaponSystemUnitTest.cs.uid new file mode 100644 index 00000000..487b0dea --- /dev/null +++ b/tests/player/WeaponSystemUnitTest.cs.uid @@ -0,0 +1 @@ +uid://vkv8aderakcb diff --git a/tests/player/interactions/PlayerInteractionsTest.cs b/tests/player/interactions/PlayerInteractionsTest.cs new file mode 100644 index 00000000..fcd83f87 --- /dev/null +++ b/tests/player/interactions/PlayerInteractionsTest.cs @@ -0,0 +1,50 @@ +using System.Threading.Tasks; +using Godot; +using GodotStateCharts; + +namespace Movementtests.tests; + +using GdUnit4; +using static GdUnit4.Assertions; + +[TestSuite, RequireGodotRuntime] +public class PlayerInteractionsTest +{ + private ISceneRunner _runner; + private Node _scene; + private PlayerController _player; + + private readonly float _tolerance = 0.01f; + private readonly Vector3 _vectorTolerance = new Vector3(0.01f, 0.01f, 0.01f); + + [BeforeTest] + public void SetupTest() + { + _runner = ISceneRunner.Load("res://tests/player/interactions/player_interactions_scene.tscn"); + + _scene = _runner.Scene()!; + var player = _scene.FindChild("Player") as PlayerController; + _player = player!; + } + [AfterTest] + public void CleanupTest() {} + + [TestCase("BaseLocation")] + public async Task PlayerMoveForward(string markerName) + { + var marker = _scene.FindChild(markerName) as Marker3D; + AssertObject(marker).IsNotNull(); + _player.GlobalPosition = marker!.GlobalPosition; + await _runner.AwaitIdleFrame(); + + var startPos = _player.GlobalPosition; + + _runner.SimulateKeyPress(Key.W); + await _runner.AwaitMillis(300); + _runner.SimulateKeyRelease(Key.W); + + var endPos = _player.GlobalPosition; + var direction = startPos.DirectionTo(endPos); + AssertVector(direction).IsEqualApprox(Vector3.Forward, _vectorTolerance); + } +} \ No newline at end of file diff --git a/tests/player/interactions/PlayerInteractionsTest.cs.uid b/tests/player/interactions/PlayerInteractionsTest.cs.uid new file mode 100644 index 00000000..75e43ca5 --- /dev/null +++ b/tests/player/interactions/PlayerInteractionsTest.cs.uid @@ -0,0 +1 @@ +uid://denedm5b8rmhh diff --git a/tests/player/interactions/player_interactions_scene.tscn b/tests/player/interactions/player_interactions_scene.tscn new file mode 100644 index 00000000..0a7887de --- /dev/null +++ b/tests/player/interactions/player_interactions_scene.tscn @@ -0,0 +1,35 @@ +[gd_scene format=3 uid="uid://l0lflvsjbyvs"] + +[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="1_dv0re"] +[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://scenes/player_controller/PlayerController.tscn" id="2_52d52"] + +[node name="PlayerMovementScene" type="Node3D" unique_id=231040688] + +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=241909240] +use_collision = true +collision_layer = 256 +collision_mask = 65553 + +[node name="Ground" type="CSGBox3D" parent="CSGCombiner3D" unique_id=432200143] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -0.5, -3.25) +use_collision = true +collision_layer = 256 +collision_mask = 65553 +size = Vector3(1000, 1, 1000) +material = ExtResource("1_dv0re") + +[node name="Ground2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=854660236] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0.5, -1.75) +use_collision = true +collision_layer = 256 +collision_mask = 65553 +size = Vector3(1.5, 1, 1.5) +material = ExtResource("1_dv0re") + +[node name="Player" parent="." unique_id=709076448 instance=ExtResource("2_52d52")] +TutorialDone = true + +[node name="BaseLocation" type="Marker3D" parent="." unique_id=1793710692] + +[node name="MantleLocation1" type="Marker3D" parent="." unique_id=550080845] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0, 0) diff --git a/tests/player/movement/PlayerMovementTest.cs b/tests/player/movement/PlayerMovementTest.cs new file mode 100644 index 00000000..1ffbe76d --- /dev/null +++ b/tests/player/movement/PlayerMovementTest.cs @@ -0,0 +1,109 @@ +using System.Threading.Tasks; +using Godot; +using GodotStateCharts; + +namespace Movementtests.tests; + +using GdUnit4; +using static GdUnit4.Assertions; + +[TestSuite, RequireGodotRuntime] +public class PlayerMovementTest +{ + private ISceneRunner _runner; + private Node _scene; + private PlayerController _player; + + private readonly float _tolerance = 0.01f; + private readonly Vector3 _vectorTolerance = new Vector3(0.01f, 0.01f, 0.01f); + + [Before] + public void Setup() {} + [After] + public void Cleanup() {} + + [BeforeTest] + public void SetupTest() + { + _runner = ISceneRunner.Load("res://tests/player/movement/player_movement_scene.tscn"); + + _scene = _runner.Scene()!; + var player = _scene.FindChild("Player") as PlayerController; + _player = player!; + } + [AfterTest] + public void CleanupTest() {} + + [TestCase("BaseLocation")] + public async Task PlayerMoveForward(string markerName) + { + var marker = _scene.FindChild(markerName) as Marker3D; + AssertObject(marker).IsNotNull(); + _player.GlobalPosition = marker!.GlobalPosition; + await _runner.AwaitIdleFrame(); + + var startPos = _player.GlobalPosition; + + _runner.SimulateKeyPress(Key.W); + await _runner.AwaitMillis(100); + _runner.SimulateKeyRelease(Key.W); + + var endPos = _player.GlobalPosition; + var direction = startPos.DirectionTo(endPos); + AssertVector(direction).IsEqualApprox(Vector3.Forward, _vectorTolerance); + } + + [TestCase("BaseLocation")] + public async Task PlayerJump(string markerName) + { + var marker = _scene.FindChild(markerName) as Marker3D; + AssertObject(marker).IsNotNull(); + _player.GlobalPosition = marker!.GlobalPosition; + await _runner.AwaitIdleFrame(); + + var startPos = _player.GlobalPosition; + + _runner.SimulateKeyPress(Key.Space); + await _runner.AwaitIdleFrame(); + + var jumping = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Jump")); + AssertBool(jumping.Active).IsTrue(); + + _runner.SimulateKeyRelease(Key.Space); + await _runner.AwaitIdleFrame(); + var endPos = _player.GlobalPosition; + var direction = startPos.DirectionTo(endPos); + AssertVector(direction).IsEqualApprox(Vector3.Up, _vectorTolerance); + AssertVector(_player.Velocity.Normalized()).IsEqualApprox(Vector3.Up, _vectorTolerance); + + await _runner.AwaitMillis(600); + endPos = _player.GlobalPosition; + AssertVector(endPos - startPos).IsEqualApprox(Vector3.Zero, _vectorTolerance); + + var grounded = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Grounded")); + AssertBool(grounded.Active).IsTrue(); + } + + [TestCase("MantleLocation1")] + public async Task PlayerMantle(string markerName) + { + var marker = _scene.FindChild(markerName) as Marker3D; + AssertObject(marker).IsNotNull(); + _player.GlobalPosition = marker!.GlobalPosition; + await _runner.AwaitMillis(100); + + var startPos = _player.GlobalPosition; + + _runner.SimulateKeyPress(Key.Space); + await _runner.AwaitMillis(100); + var mantling = StateChartState.Of(_player.GetNode("StateChart/Root/Movement/Mantling")); + AssertBool(mantling.Active).IsTrue(); + + _runner.SimulateKeyRelease(Key.Space); + await _runner.AwaitMillis(500); + + var endPos = _player.GlobalPosition; + AssertFloat((endPos - startPos).Length()).IsGreater(_tolerance); + AssertFloat(endPos.Y).IsEqualApprox(1.0f, _tolerance); + } +} \ No newline at end of file diff --git a/tests/player/movement/PlayerMovementTest.cs.uid b/tests/player/movement/PlayerMovementTest.cs.uid new file mode 100644 index 00000000..a5061437 --- /dev/null +++ b/tests/player/movement/PlayerMovementTest.cs.uid @@ -0,0 +1 @@ +uid://x5pj2ymam2gg diff --git a/tests/player/movement/player_movement_scene.tscn b/tests/player/movement/player_movement_scene.tscn new file mode 100644 index 00000000..e40a34fc --- /dev/null +++ b/tests/player/movement/player_movement_scene.tscn @@ -0,0 +1,35 @@ +[gd_scene format=3 uid="uid://i8kb38q7bdfk"] + +[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/materials/greybox/m_greybox.tres" id="1_bdfhg"] +[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://scenes/player_controller/PlayerController.tscn" id="1_hg1sy"] + +[node name="PlayerMovementScene" type="Node3D" unique_id=231040688] + +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=241909240] +use_collision = true +collision_layer = 256 +collision_mask = 65553 + +[node name="Ground" type="CSGBox3D" parent="CSGCombiner3D" unique_id=432200143] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -0.5, -3.25) +use_collision = true +collision_layer = 256 +collision_mask = 65553 +size = Vector3(1000, 1, 1000) +material = ExtResource("1_bdfhg") + +[node name="Ground2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=854660236] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0.5, -1.75) +use_collision = true +collision_layer = 256 +collision_mask = 65553 +size = Vector3(1.5, 1, 1.5) +material = ExtResource("1_bdfhg") + +[node name="Player" parent="." unique_id=709076448 instance=ExtResource("1_hg1sy")] +TutorialDone = true + +[node name="BaseLocation" type="Marker3D" parent="." unique_id=1793710692] + +[node name="MantleLocation1" type="Marker3D" parent="." unique_id=550080845] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.75, 0, 0) -- 2.49.1 From 7a3e61b86f6850aa453106495d5e42ee7dc0a07e Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 09:46:33 +0100 Subject: [PATCH 10/12] added lights in dark tutorial area --- maps/levels/2 - tuto_sword.tscn | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/maps/levels/2 - tuto_sword.tscn b/maps/levels/2 - tuto_sword.tscn index 42bd22d6..49df4614 100644 --- a/maps/levels/2 - tuto_sword.tscn +++ b/maps/levels/2 - tuto_sword.tscn @@ -770,3 +770,10 @@ transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0) [node name="PlayerFellRespawn" parent="." index="10" unique_id=479136076] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, 0) + +[node name="OmniLight3D" type="OmniLight3D" parent="." index="13" unique_id=702421172] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, 4) + +[node name="OmniLight3D2" type="OmniLight3D" parent="." index="14" unique_id=2016820716] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 25, -9.5) +omni_range = 12.0 -- 2.49.1 From 55eba7fcc8b27272dab04fbb0b78657a7717125e Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 09:49:18 +0100 Subject: [PATCH 11/12] trying to remove xunit --- Movement tests.csproj | 14 -------------- global.json | 5 ----- xunit.runner.json | 3 --- 3 files changed, 22 deletions(-) delete mode 100644 global.json delete mode 100644 xunit.runner.json diff --git a/Movement tests.csproj b/Movement tests.csproj index 6d6d122a..48481545 100644 --- a/Movement tests.csproj +++ b/Movement tests.csproj @@ -132,19 +132,6 @@ - - - - - - - - - - - - - @@ -155,5 +142,4 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - \ No newline at end of file diff --git a/global.json b/global.json deleted file mode 100644 index 802ab217..00000000 --- a/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "test": { - "runner": "Microsoft.Testing.Platform" - } -} \ No newline at end of file diff --git a/xunit.runner.json b/xunit.runner.json deleted file mode 100644 index 86c7ea05..00000000 --- a/xunit.runner.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json" -} -- 2.49.1 From 9bfe37af6238f9f3b91247313fe82b1035eda840 Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 8 Mar 2026 10:08:06 +0100 Subject: [PATCH 12/12] trying cache --- .gitea/workflows/main.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index 7e1d43a9..d73d1e21 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -83,6 +83,8 @@ jobs: Export: runs-on: godot + env: + RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache needs: - BumpTag -- 2.49.1