diff --git a/Characters/Character.cs b/Characters/Character.cs
index 2ceab79..a21c4b8 100644
--- a/Characters/Character.cs
+++ b/Characters/Character.cs
@@ -159,6 +159,14 @@ namespace SupaLidlGame.Characters
}
}
+ public void LookTowardsDirection()
+ {
+ if (!Direction.IsZeroApprox())
+ {
+ Target = Direction;
+ }
+ }
+
public virtual void _on_hurtbox_received_damage(
float damage,
Character inflictor,
diff --git a/Characters/NPC.cs b/Characters/NPC.cs
index 0ce0ef1..a834f9d 100644
--- a/Characters/NPC.cs
+++ b/Characters/NPC.cs
@@ -216,7 +216,7 @@ namespace SupaLidlGame.Characters
float dist = GlobalPosition.DistanceSquaredTo(pos);
UpdateWeights(pos);
- if (Target.LengthSquared() < 1024)
+ if (dist < 1024)
{
if (Inventory.SelectedItem is Weapon weapon)
{
diff --git a/Characters/Player.tscn b/Characters/Player.tscn
index 6dbfec4..e475a08 100644
--- a/Characters/Player.tscn
+++ b/Characters/Player.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=29 format=3 uid="uid://b2254pup8k161"]
+[gd_scene load_steps=30 format=3 uid="uid://b2254pup8k161"]
[ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"]
[ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"]
@@ -11,6 +11,7 @@
[ext_resource type="Script" path="res://Items/Inventory.cs" id="7_xyenu"]
[ext_resource type="Script" path="res://State/Character/PlayerRollState.cs" id="8_fy0v5"]
[ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="9_avyu4"]
+[ext_resource type="PackedScene" uid="uid://g7wfcubs6bdd" path="res://Items/Weapons/Railgun.tscn" id="10_7kb8b"]
[ext_resource type="AudioStream" uid="uid://njun3e6v4854" path="res://Assets/Sounds/hurt.wav" id="12_h0x0g"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h78y7"]
@@ -209,6 +210,8 @@ InventoryMap = {
"equip_2": 1
}
+[node name="Railgun" parent="Inventory" instance=ExtResource("10_7kb8b")]
+
[node name="Node2D" parent="Inventory" instance=ExtResource("7_4rxuv")]
[node name="Hurtbox" parent="." instance=ExtResource("9_avyu4")]
diff --git a/Items/Weapon.cs b/Items/Weapon.cs
index bb6db64..d8485b9 100644
--- a/Items/Weapon.cs
+++ b/Items/Weapon.cs
@@ -35,20 +35,31 @@ namespace SupaLidlGame.Items
[Export]
public float InitialVelocity { get; set; } = 0;
+ ///
+ /// Hides the weapon if it is idle (i.e. not being used).
+ ///
[Export]
public bool ShouldHideIdle { get; set; } = false;
+ ///
+ /// Freezes the player's target angle if this weapon is being used.
+ ///
+ [Export]
+ public bool ShouldFreezeAngleOnUse { get; set; } = true;
+
+ [Export]
+ public float MinDistanceHint { get; set; }
+
+ [Export]
+ public float MaxDistanceHint { get; set; }
+
public virtual bool IsParryable { get; protected set; } = false;
public bool IsParried { get; set; }
public Character Character { get; set; }
- [Export]
- public float MinDistanceHint { get; set; }
-
- [Export]
- public float MaxDistanceHint { get; set; }
+ public Vector2 UseDirection { get; set; }
public override bool StacksWith(Item item) => false;
diff --git a/Items/Weapons/Railgun.tscn b/Items/Weapons/Railgun.tscn
index e03bf7e..ef792f8 100644
--- a/Items/Weapons/Railgun.tscn
+++ b/Items/Weapons/Railgun.tscn
@@ -27,9 +27,10 @@ UseTime = 1.0
script = ExtResource("1_xynim")
InitialState = NodePath("Idle")
-[node name="Idle" type="Node" parent="State" node_paths=PackedStringArray("FireState")]
+[node name="Idle" type="Node" parent="State" node_paths=PackedStringArray("FireState", "Weapon")]
script = ExtResource("2_a4hhy")
FireState = NodePath("../Fire")
+Weapon = NodePath("../..")
[node name="Fire" type="Node" parent="State" node_paths=PackedStringArray("Weapon", "IdleState")]
script = ExtResource("3_dcbnq")
diff --git a/State/Character/CharacterState.cs b/State/Character/CharacterState.cs
index 2b0cc3a..8b22a14 100644
--- a/State/Character/CharacterState.cs
+++ b/State/Character/CharacterState.cs
@@ -20,6 +20,27 @@ namespace SupaLidlGame.State.Character
{
Character.StunTime -= delta;
}
+
+ var item = Character.Inventory.SelectedItem;
+ var offhand = Character.Inventory.OffhandItem;
+
+ // angle towards item use angle or offhand use angle if not used
+
+ bool targetTowards(Items.Item item)
+ {
+ if (item is Items.Weapon weapon)
+ {
+ if (weapon.IsUsing)
+ {
+ Character.Target = weapon.UseDirection;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ var _ = targetTowards(item) || targetTowards(offhand);
+
return null;
}
diff --git a/State/Character/PlayerState.cs b/State/Character/PlayerState.cs
index cd7c7ab..f2ce8c7 100644
--- a/State/Character/PlayerState.cs
+++ b/State/Character/PlayerState.cs
@@ -30,47 +30,41 @@ namespace SupaLidlGame.State.Character
{
Character.Direction = Godot.Input.GetVector("ui_left", "ui_right",
"ui_up", "ui_down");
+ Character.LookTowardsDirection();
+
Vector2 mousePos = Character.GetGlobalMousePosition();
Vector2 dirToMouse = Character.GlobalPosition.DirectionTo(mousePos);
- bool faceToDir = !Character.Direction.IsZeroApprox();
-
- if (Character.Inventory.SelectedItem is Items.Weapon weapon)
+ bool targetTowards(Items.Item item)
{
- if (!weapon.IsUsing)
+ if (Character.Inventory.SelectedItem is Items.Weapon weapon)
{
- if (weapon.ShouldHideIdle)
+ if (!weapon.IsUsing)
{
- faceToDir = true;
- }
- else
- {
- Character.Target = dirToMouse;
+ var isPressed = Godot.Input.IsActionPressed("attack1");
+ var ret = false;
+
+ if (!weapon.ShouldHideIdle || isPressed)
+ {
+ Character.Target = dirToMouse;
+ ret = true;
+ }
+
+ if (isPressed)
+ {
+ Character.UseCurrentItem();
+ }
+
+ return ret;
}
}
- else
- {
- faceToDir = false;
- }
+ return false;
}
- if (faceToDir)
- {
- Character.Target = Character.Direction;
- }
+ var item = Character.Inventory.SelectedItem;
+ var offhand = Character.Inventory.OffhandItem;
- if (Godot.Input.IsActionPressed("attack1"))
- {
- var item = Character.Inventory.SelectedItem;
- if (item is not null)
- {
- if (!item.IsUsing)
- {
- Character.Target = dirToMouse;
- }
- Character.UseCurrentItem();
- }
- }
+ var _ = targetTowards(item) || targetTowards(offhand);
return base.Process(delta);
}
diff --git a/State/Weapon/RangedFireState.cs b/State/Weapon/RangedFireState.cs
index bacfc85..3758672 100644
--- a/State/Weapon/RangedFireState.cs
+++ b/State/Weapon/RangedFireState.cs
@@ -17,6 +17,7 @@ namespace SupaLidlGame.State.Weapon
//_timeLeft
_timeLeft = Weapon.UseTime;
Weapon.Attack();
+ Weapon.UseDirection = Weapon.Character.Target;
return null;
}
diff --git a/State/Weapon/SwordAttackState.cs b/State/Weapon/SwordAttackState.cs
index 247a740..90d133e 100644
--- a/State/Weapon/SwordAttackState.cs
+++ b/State/Weapon/SwordAttackState.cs
@@ -40,7 +40,7 @@ namespace SupaLidlGame.State.Weapon
_attackAnimDuration = Sword.AttackAnimationDuration;
Sword.Visible = true;
-
+ Sword.UseDirection = Sword.Character.Target;
return null;
}