move swordstate into weaponstate

pull/3/head
John Montagu, the 4th Earl of Sandvich 2023-05-26 17:42:50 -07:00
parent 41af6baa13
commit 23e93eb674
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
12 changed files with 85 additions and 55 deletions

View File

@ -2,7 +2,7 @@ using Godot;
using SupaLidlGame.BoundingBoxes;
using SupaLidlGame.Characters;
using SupaLidlGame.Extensions;
using SupaLidlGame.State.Sword;
using SupaLidlGame.State.Weapon;
namespace SupaLidlGame.Items.Weapons
{
@ -42,7 +42,7 @@ namespace SupaLidlGame.Items.Weapons
public double NPCAnticipateTime { get; set; }
[Export]
public SwordStateMachine StateMachine { get; set; }
public WeaponStateMachine StateMachine { get; set; }
public override bool IsParryable { get; protected set; }

View File

@ -1,13 +1,13 @@
[gd_scene load_steps=35 format=3 uid="uid://d72ehtv1ks0e"]
[gd_scene load_steps=35 format=3 uid="uid://dvqap2uhcah63"]
[ext_resource type="Script" path="res://Items/Weapons/Sword.cs" id="1_mlo73"]
[ext_resource type="Script" path="res://State/Sword/SwordStateMachine.cs" id="2_rje2m"]
[ext_resource type="Script" path="res://State/Sword/SwordIdleState.cs" id="3_qh2cs"]
[ext_resource type="Script" path="res://State/Weapon/WeaponStateMachine.cs" id="2_vwirq"]
[ext_resource type="Script" path="res://State/Weapon/SwordIdleState.cs" id="3_nw6r0"]
[ext_resource type="Texture2D" uid="uid://dp7osg05ip5oo" path="res://Assets/Sprites/sword.png" id="3_r75ni"]
[ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="3_up3ob"]
[ext_resource type="Script" path="res://State/Weapon/SwordAnticipateState.cs" id="4_j3cud"]
[ext_resource type="PackedScene" uid="uid://cojxmcin13ihm" path="res://Utils/Trail.tscn" id="4_pt6lq"]
[ext_resource type="Script" path="res://State/Sword/SwordAnticipateState.cs" id="4_ycuhw"]
[ext_resource type="Script" path="res://State/Sword/SwordAttackState.cs" id="5_30003"]
[ext_resource type="Script" path="res://State/Weapon/SwordAttackState.cs" id="5_hmisb"]
[ext_resource type="Texture2D" uid="uid://do1bui3bblkk7" path="res://Assets/Sprites/sword-swing.png" id="5_pywek"]
[ext_resource type="AudioStream" uid="uid://c4n7ioxpukdwi" path="res://Assets/Sounds/parry.wav" id="6_8nxjm"]
@ -350,21 +350,21 @@ Knockback = 64.0
Anchor = NodePath("Anchor")
[node name="State" type="Node" parent="." node_paths=PackedStringArray("InitialState")]
script = ExtResource("2_rje2m")
script = ExtResource("2_vwirq")
InitialState = NodePath("Idle")
[node name="Idle" type="Node" parent="State" node_paths=PackedStringArray("AnticipateState", "Sword")]
script = ExtResource("3_qh2cs")
script = ExtResource("3_nw6r0")
AnticipateState = NodePath("../Anticipate")
Sword = NodePath("../..")
[node name="Anticipate" type="Node" parent="State" node_paths=PackedStringArray("Sword", "AttackState")]
script = ExtResource("4_ycuhw")
script = ExtResource("4_j3cud")
Sword = NodePath("../..")
AttackState = NodePath("../Attack")
[node name="Attack" type="Node" parent="State" node_paths=PackedStringArray("Sword", "AnticipateState", "IdleState")]
script = ExtResource("5_30003")
script = ExtResource("5_hmisb")
Sword = NodePath("../..")
AnticipateState = NodePath("../Anticipate")
IdleState = NodePath("../Idle")

View File

@ -1,5 +1,4 @@
using Godot;
using SupaLidlGame.Items;
namespace SupaLidlGame.State.Character
{
@ -29,7 +28,7 @@ namespace SupaLidlGame.State.Character
{
if (@event.IsActionPressed("roll"))
{
if (Character.Inventory.SelectedItem is Weapon weapon)
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
{
if (!weapon.IsUsing)
{

View File

@ -1,5 +1,4 @@
using Godot;
using SupaLidlGame.Items;
using SupaLidlGame.Characters;
namespace SupaLidlGame.State.Character
@ -33,7 +32,7 @@ namespace SupaLidlGame.State.Character
"ui_up", "ui_down");
Vector2 mousePos = Character.GetGlobalMousePosition();
Vector2 dirToMouse = Character.GlobalPosition.DirectionTo(mousePos);
if (Character.Inventory.SelectedItem is Weapon weapon)
if (Character.Inventory.SelectedItem is Items.Weapon weapon)
{
if (!weapon.IsUsing)
{

View File

@ -1,18 +0,0 @@
using Godot;
namespace SupaLidlGame.State.Sword
{
public abstract partial class SwordState : Node, IState<SwordState>
{
public virtual SwordState Use() => null;
public abstract IState<SwordState> Enter(IState<SwordState> previousState);
public virtual void Exit(IState<SwordState> nextState)
{
}
public virtual IState<SwordState> Process(double delta) => null;
}
}

View File

@ -1,8 +1,8 @@
using Godot;
namespace SupaLidlGame.State.Sword
namespace SupaLidlGame.State.Weapon
{
public partial class SwordAnticipateState : SwordState
public partial class SwordAnticipateState : WeaponState
{
[Export]
public SupaLidlGame.Items.Weapons.Sword Sword { get; set; }
@ -12,7 +12,7 @@ namespace SupaLidlGame.State.Sword
private double _anticipateTime;
public override SwordState Enter(IState<SwordState> prevState)
public override WeaponState Enter(IState<WeaponState> prevState)
{
Sword.EnableParry();
@ -33,7 +33,7 @@ namespace SupaLidlGame.State.Sword
return null;
}
public override SwordState Process(double delta)
public override WeaponState Process(double delta)
{
// go into attack state if anticipation time is delta
if ((_anticipateTime -= delta) <= 0)

View File

@ -1,8 +1,8 @@
using Godot;
namespace SupaLidlGame.State.Sword
namespace SupaLidlGame.State.Weapon
{
public partial class SwordAttackState : SwordState
public partial class SwordAttackState : WeaponState
{
[Export]
public SupaLidlGame.Items.Weapons.Sword Sword { get; set; }
@ -21,7 +21,7 @@ namespace SupaLidlGame.State.Sword
private bool _isAlternate = false;
public override SwordState Enter(IState<SwordState> prevState)
public override WeaponState Enter(IState<WeaponState> prevState)
{
//Sword.AnimationPlayer.Stop();
Sword.Attack();
@ -46,12 +46,12 @@ namespace SupaLidlGame.State.Sword
return null;
}
public override void Exit(IState<SwordState> nextState)
public override void Exit(IState<WeaponState> nextState)
{
Sword.Deattack();
}
public override SwordState Use()
public override WeaponState Use()
{
if (_useDuration <= 0)
{
@ -66,7 +66,7 @@ namespace SupaLidlGame.State.Sword
return null;
}
public override SwordState Process(double delta)
public override WeaponState Process(double delta)
{
if (_attackDuration > 0)
{

View File

@ -1,8 +1,8 @@
using Godot;
namespace SupaLidlGame.State.Sword
namespace SupaLidlGame.State.Weapon
{
public partial class SwordIdleState : SwordState
public partial class SwordIdleState : WeaponState
{
[Export]
public SwordAnticipateState AnticipateState { get; set; }
@ -12,7 +12,7 @@ namespace SupaLidlGame.State.Sword
private double _attackCooldown;
public override SwordState Enter(IState<SwordState> prevState)
public override WeaponState Enter(IState<WeaponState> prevState)
{
if (prevState is SwordAttackState)
{
@ -21,7 +21,7 @@ namespace SupaLidlGame.State.Sword
return null;
}
public override SwordState Use()
public override WeaponState Use()
{
if (_attackCooldown <= 0)
{
@ -31,7 +31,7 @@ namespace SupaLidlGame.State.Sword
return AnticipateState;
}
public override SwordState Process(double delta)
public override WeaponState Process(double delta)
{
if (_attackCooldown > 0)
{

View File

@ -0,0 +1,5 @@
using Godot;
namespace SupaLidlGame.State.Weapon
{
}

View File

@ -1,12 +1,11 @@
using Godot;
namespace SupaLidlGame.State.Sword
namespace SupaLidlGame.State.Weapon
{
public partial class SwordStateMachine : StateMachine<SwordState>
{
[Export]
public override SwordState InitialState { get; set; }
}
/*
public void Use()
{
var state = CurrentState.Use();
@ -24,5 +23,5 @@ namespace SupaLidlGame.State.Sword
ChangeState(s);
}
}
}
}
*/

View File

@ -0,0 +1,18 @@
using Godot;
namespace SupaLidlGame.State.Weapon
{
public abstract partial class WeaponState : Node, IState<WeaponState>
{
public virtual WeaponState Use() => null;
public abstract IState<WeaponState> Enter(IState<WeaponState> previousState);
public virtual void Exit(IState<WeaponState> nextState)
{
}
public virtual IState<WeaponState> Process(double delta) => null;
}
}

View File

@ -0,0 +1,28 @@
using Godot;
namespace SupaLidlGame.State.Weapon
{
public partial class WeaponStateMachine : StateMachine<WeaponState>
{
[Export]
public override WeaponState InitialState { get; set; }
public void Use()
{
var state = CurrentState.Use();
if (state is not null)
{
ChangeState(state);
}
}
public void Process(double delta)
{
var state = CurrentState.Process(delta);
if (state is WeaponState s)
{
ChangeState(s);
}
}
}
}