Compare commits

...

3 Commits

Author SHA1 Message Date
aaa9b102c1 started working on sword dash tutorial and bullet time is now unlimited while aiming in air
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Test (push) Successful in 6m44s
Create tag and build when new code gets to main / Export (push) Successful in 8m17s
2026-02-10 16:44:45 +01:00
cb348667f5 recover weapon if walking on it 2026-02-10 15:27:30 +01:00
8d23a95c68 ci back
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Test (push) Successful in 6m13s
Create tag and build when new code gets to main / Export (push) Successful in 8m45s
2026-02-10 09:41:44 +01:00
4 changed files with 174 additions and 41 deletions

View File

@@ -42,8 +42,6 @@ jobs:
runs-on: godot runs-on: godot
# env: # env:
# RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache # RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache
needs:
- BumpTag
steps: steps:
- name: Checkout with LFS - name: Checkout with LFS
uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
@@ -67,16 +65,32 @@ jobs:
name: Test Report name: Test Report
path: ${{ github.workspace }}/reports/test-result.html path: ${{ github.workspace }}/reports/test-result.html
Export:
runs-on: godot
needs:
- BumpTag
steps:
- name: Checkout with LFS
uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
- name: Setup Godot
id: setup-godot
uses: https://git.game-dev.space/minimata/setup-godot.git@main
with:
godot-version: '4.6'
dotnet-version: 'net9.0'
- name: Remove GDUnit addon - name: Remove GDUnit addon
run: | run: |
rm -rf ${{ gitea.workspace }}/addons/gdUnit4 rm -rf ${{ gitea.workspace }}/addons/gdUnit4
- name: Build Windows - name: Build Windows
run: | run: |
mkdir -v -p build/windows mkdir -v -p build/windows
${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe ${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe
zip -r Windows.zip build/windows zip -r Windows.zip build/windows
- name: Setup Butler - name: Setup Butler
shell: bash shell: bash
env: env:
@@ -100,19 +114,3 @@ jobs:
"Windows.zip" \ "Windows.zip" \
${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument} ${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument}
# Export:
# runs-on: godot
# needs:
# - BumpTag
#
# steps:
# - name: Checkout with LFS
# uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
#
# - name: Setup Godot
# id: setup-godot
# uses: https://git.game-dev.space/minimata/setup-godot.git@main
# with:
# godot-version: '4.6'
# dotnet-version: 'net9.0'

View File

@@ -22,7 +22,7 @@ metadata/_custom_type_script = "uid://baiapod3csndf"
[node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")] [node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")]
[node name="Player" parent="." index="6" unique_id=1309399929] [node name="Player" parent="." index="6" unique_id=1309399929]
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 59.5, 0, 0) transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
[node name="Playground" type="Node3D" parent="." index="7" unique_id=2099606598] [node name="Playground" type="Node3D" parent="." index="7" unique_id=2099606598]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.5, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 57.5, 0, 0)
@@ -245,31 +245,37 @@ Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy10" parent="Playground/GroundedEnemies" index="19" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy27" parent="Playground/GroundedEnemies" index="19" unique_id=854456486 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 20, 0, -44.836807)
Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u")
[node name="Enemy10" parent="Playground/GroundedEnemies" index="20" unique_id=836898496 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 11, -33.336807) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 30.5, 11, -33.336807)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy8" parent="Playground/GroundedEnemies" index="20" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy8" parent="Playground/GroundedEnemies" index="21" unique_id=1015624071 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 34.5, 1.5, -27.33681) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 34.5, 1.5, -27.33681)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy9" parent="Playground/GroundedEnemies" index="21" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy9" parent="Playground/GroundedEnemies" index="22" unique_id=827865590 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46.5, 0, -27.33681) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 46.5, 0, -27.33681)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy5" parent="Playground/GroundedEnemies" index="22" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy5" parent="Playground/GroundedEnemies" index="23" unique_id=1267116862 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 0, -18.33681) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4, 0, -18.33681)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
RMovement = SubResource("Resource_nwk5u") RMovement = SubResource("Resource_nwk5u")
[node name="Enemy6" parent="Playground/GroundedEnemies" index="23" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")] [node name="Enemy6" parent="Playground/GroundedEnemies" index="24" unique_id=1147823180 node_paths=PackedStringArray("Target") instance=ExtResource("5_ofbe2")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 16.5, 7, -17.33681) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 16.5, 7, -17.33681)
Target = NodePath("../../../Player") Target = NodePath("../../../Player")
RHealth = SubResource("Resource_xy0m1") RHealth = SubResource("Resource_xy0m1")
@@ -280,20 +286,119 @@ use_collision = true
collision_layer = 256 collision_layer = 256
collision_mask = 65553 collision_mask = 65553
[node name="CSGBox3D109" type="CSGBox3D" parent="Tutorial" index="0" unique_id=531736596] [node name="DashWithMantle" type="CSGCombiner3D" parent="Tutorial" index="0" unique_id=128667834]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4.75, -2.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9, 0, -36.5)
[node name="CSGBox3D109" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="0" unique_id=531736596]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -4.75, 4)
use_collision = true use_collision = true
size = Vector3(19.5, 8.5, 14) size = Vector3(9, 8.5, 6)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D110" type="CSGBox3D" parent="Tutorial" index="1" unique_id=731833071] [node name="CSGBox3D112" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="1" unique_id=565292599]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.5, -29.25) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -6.25, 0)
use_collision = true use_collision = true
size = Vector3(19.5, 27, 14) size = Vector3(9, 5.5, 2)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")
[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial" index="2" unique_id=923535141] [node name="CSGBox3D113" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="2" unique_id=28433553]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -21.75, -18.75) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -2)
use_collision = true use_collision = true
size = Vector3(19.5, 25.5, 35) size = Vector3(9, 2.5, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D110" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="3" unique_id=731833071]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 6, -12.125)
use_collision = true
size = Vector3(5, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="4" unique_id=173458015]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 5.625, -14)
use_collision = true
size = Vector3(9, 29.25, 1)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D116" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="5" unique_id=1750512788]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 7, -12.125)
use_collision = true
size = Vector3(1, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D117" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="6" unique_id=391729778]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 7, -12.125)
use_collision = true
size = Vector3(1, 1, 4.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="7" unique_id=1284139577]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.5, 0.625, 10)
use_collision = true
size = Vector3(3, 2.25, 6)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="8" unique_id=1204742131]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 16.5, 4.75)
use_collision = true
size = Vector3(12, 1, 2.5)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D111" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="9" unique_id=923535141]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -11.125, -3.75)
use_collision = true
size = Vector3(9, 4.25, 21.5)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D114" type="CSGBox3D" parent="Tutorial" index="1" unique_id=1217279859]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -4.75, 0)
use_collision = true
size = Vector3(9, 8.5, 14)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D116" type="CSGBox3D" parent="Tutorial" index="2" unique_id=720911926]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 12.75, -11.75)
use_collision = true
size = Vector3(18, 22, 37.5)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D115" type="CSGBox3D" parent="Tutorial" index="3" unique_id=995233474]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -1, -26.5)
use_collision = true
size = Vector3(18, 1, 6)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D119" type="CSGBox3D" parent="Tutorial" index="4" unique_id=1412582714]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.875, -3.75, -30)
use_collision = true
size = Vector3(11.75, 11, 1)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial" index="5" unique_id=697302898]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.125, -30)
use_collision = true
size = Vector3(3, 3.25, 1)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D117" type="CSGBox3D" parent="Tutorial" index="6" unique_id=603171965]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -6.25, -8)
use_collision = true
size = Vector3(9, 5.5, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="7" unique_id=1950738925]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -10)
use_collision = true
size = Vector3(9, 2.5, 2)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="8" unique_id=1024529143]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.625)
use_collision = true
size = Vector3(9, 25.5, 37.75)
material = ExtResource("3_wsc2c")
[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="9" unique_id=1261455320]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -27.5)
use_collision = true
size = Vector3(3, 1, 6)
material = ExtResource("3_wsc2c") material = ExtResource("3_wsc2c")

View File

@@ -77,6 +77,9 @@ radius = 0.45
[sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"] [sub_resource type="SphereShape3D" id="SphereShape3D_q14ux"]
radius = 1.0 radius = 1.0
[sub_resource type="SphereShape3D" id="SphereShape3D_u8rdp"]
radius = 1.5
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nodcl"]
transparency = 1 transparency = 1
albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608) albedo_color = Color(0, 0.627451, 0.6313726, 0.49019608)
@@ -328,6 +331,14 @@ gravity_scale = 3.0
ThrowForce = 300.0 ThrowForce = 300.0
StraightThrowDuration = 0.05 StraightThrowDuration = 0.05
[node name="SwordPickup" type="Area3D" parent="." unique_id=1990087390]
collision_layer = 0
collision_mask = 65536
[node name="CollisionShape3D" type="CollisionShape3D" parent="SwordPickup" unique_id=547241277]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
shape = SubResource("SphereShape3D_u8rdp")
[node name="DashIndicator" type="Node3D" parent="." unique_id=1279477982] [node name="DashIndicator" type="Node3D" parent="." unique_id=1279477982]
visible = false visible = false
@@ -384,6 +395,10 @@ shape = SubResource("SphereShape3D_ue7xq")
[node name="InvincibilityTime" type="Timer" parent="." unique_id=1244463585] [node name="InvincibilityTime" type="Timer" parent="." unique_id=1244463585]
one_shot = true one_shot = true
[node name="WeaponThrowUncatchable" type="Timer" parent="." unique_id=2141801011]
wait_time = 0.2
one_shot = true
[node name="AttackCooldown" type="Timer" parent="." unique_id=1620959518] [node name="AttackCooldown" type="Timer" parent="." unique_id=1620959518]
wait_time = 0.3 wait_time = 0.3
one_shot = true one_shot = true
@@ -400,7 +415,7 @@ wait_time = 2.0
one_shot = true one_shot = true
[node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662] [node name="TimeScaleAimInAir" type="Timer" parent="." unique_id=1346687662]
wait_time = 2.0 wait_time = 5.0
one_shot = true one_shot = true
ignore_time_scale = true ignore_time_scale = true
@@ -1159,3 +1174,4 @@ delay_in_seconds = "0.0"
[connection signal="input_slide_ended" from="InputController" to="." method="OnInputSlideEnded"] [connection signal="input_slide_ended" from="InputController" to="." method="OnInputSlideEnded"]
[connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"] [connection signal="input_slide_started" from="InputController" to="." method="OnInputSlideStarted"]
[connection signal="WallDetected" from="WallHugSystem" to="." method="OnWallDetected"] [connection signal="WallDetected" from="WallHugSystem" to="." method="OnWallDetected"]
[connection signal="body_entered" from="SwordPickup" to="." method="WalkOnWeapon"]

View File

@@ -317,6 +317,7 @@ public partial class PlayerController : CharacterBody3D,
// Timers // Timers
private Timer _timeScaleAimInAirTimer; private Timer _timeScaleAimInAirTimer;
private Timer _weaponThrowUncatchableTimer;
private Timer _simpleDashCooldownTimer; private Timer _simpleDashCooldownTimer;
private Timer _airborneDashCooldownTimer; private Timer _airborneDashCooldownTimer;
private Timer _powerCooldownTimer; private Timer _powerCooldownTimer;
@@ -516,6 +517,7 @@ public partial class PlayerController : CharacterBody3D,
// State timers // State timers
_powerCooldownTimer = GetNode<Timer>("PowerCooldown"); _powerCooldownTimer = GetNode<Timer>("PowerCooldown");
_weaponThrowUncatchableTimer = GetNode<Timer>("WeaponThrowUncatchable");
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir"); _timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown"); _simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
_airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown"); _airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown");
@@ -711,11 +713,11 @@ public partial class PlayerController : CharacterBody3D,
{ {
_isWallJumpAvailable = true; _isWallJumpAvailable = true;
_canDashAirborne = true; _canDashAirborne = true;
ResetTimeScale();
if (_simpleDashCooldownTimer.IsStopped()) if (_simpleDashCooldownTimer.IsStopped())
_simpleDashCooldownTimer.Start(); _simpleDashCooldownTimer.Start();
if (_bufferedAction == BufferedActions.MantleJump) if (_bufferedAction == BufferedActions.MantleJump)
{ {
_playerState.SendEvent("jump"); _playerState.SendEvent("jump");
@@ -1825,7 +1827,7 @@ public partial class PlayerController : CharacterBody3D,
public void ReduceTimeScaleWhileAiming() public void ReduceTimeScaleWhileAiming()
{ {
Engine.SetTimeScale(TimeScaleAimInAir); Engine.SetTimeScale(TimeScaleAimInAir);
_timeScaleAimInAirTimer.Start(); // _timeScaleAimInAirTimer.Start();
} }
public void ResetTimeScale() public void ResetTimeScale()
{ {
@@ -1892,7 +1894,7 @@ public partial class PlayerController : CharacterBody3D,
var plannedDashLocation = targetable.GetTargetGlobalPosition() + Vector3.Down*_playerHeight/2; var plannedDashLocation = targetable.GetTargetGlobalPosition() + Vector3.Down*_playerHeight/2;
travel = plannedDashLocation - GlobalPosition; travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized(); _dashDirection = travel.Normalized();
var postDashLocation = plannedDashLocation + 2*_dashDirection; var postDashLocation = plannedDashLocation + _dashDirection;
var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask); var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery); var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
shouldRebound = wallBehindResult.Count > 0; shouldRebound = wallBehindResult.Count > 0;
@@ -1960,6 +1962,7 @@ public partial class PlayerController : CharacterBody3D,
public void ThrowWeapon() public void ThrowWeapon()
{ {
_audioStream.SwitchToClipByName("attacks"); _audioStream.SwitchToClipByName("attacks");
_weaponThrowUncatchableTimer.Start();
_playerState.SendEvent("cancel_aim"); _playerState.SendEvent("cancel_aim");
RemoveChildNode(WeaponSystem); RemoveChildNode(WeaponSystem);
@@ -1980,6 +1983,7 @@ public partial class PlayerController : CharacterBody3D,
HeadSystem.ShowWeapon(); HeadSystem.ShowWeapon();
WeaponSystem.ResetWeapon(); WeaponSystem.ResetWeapon();
RecoverChildNode(WeaponSystem); RecoverChildNode(WeaponSystem);
_audioStream.SwitchToClipByName("parry");
} }
public void DashToFlyingWeapon() public void DashToFlyingWeapon()
@@ -2061,6 +2065,16 @@ public partial class PlayerController : CharacterBody3D,
_playerState.SendEvent(resultingEvent); _playerState.SendEvent(resultingEvent);
} }
public void WalkOnWeapon(Node3D other)
{
if (_weaponDash.Active) return; // Don't recover weapon if already dashing to it
if (WeaponSystem.InHandState.Active) return; // Don't recover weapon if in hand
if (!_weaponThrowUncatchableTimer.IsStopped()) return; // Don't get weapon back if timer is still running
if (WeaponSystem.PlantObject is ITargetable) return; // Don't recover weapon planted in target
RecoverWeapon();
WeaponSystem.PlantObject = null;
}
public void ManageAttackedEnemyPostDash(Node enemy) public void ManageAttackedEnemyPostDash(Node enemy)
{ {
@@ -2229,7 +2243,7 @@ public partial class PlayerController : CharacterBody3D,
var travel = plannedDashLocation - GlobalPosition; var travel = plannedDashLocation - GlobalPosition;
_dashDirection = travel.Normalized(); _dashDirection = travel.Normalized();
var postDashLocation = plannedDashLocation + 2*_dashDirection; var postDashLocation = plannedDashLocation + _dashDirection;
var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask); var wallBehindQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition + Vector3.Up*HeadSystem.Position.Y, postDashLocation, GroundDetector.CollisionMask);
var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery); var wallBehindResult = _spaceState.IntersectRay(wallBehindQuery);
var shouldRebound = wallBehindResult.Count > 0; var shouldRebound = wallBehindResult.Count > 0;
@@ -2293,7 +2307,7 @@ public partial class PlayerController : CharacterBody3D,
if (_onWallHanging.Active) return; if (_onWallHanging.Active) return;
if (_aiming.Active && WeaponSystem.InHandState.Active) if (_aiming.Active && WeaponSystem.InHandState.Active && CanPerformEmpoweredAction())
{ {
ThrowWeapon(); ThrowWeapon();
return; return;