alt attacks cost levels

godot-4.2
John Montagu, the 4th Earl of Sandvich 2023-09-10 12:30:26 -07:00
parent 59d2def8a9
commit db62cd2495
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
6 changed files with 50 additions and 159 deletions

View File

@ -255,7 +255,7 @@ public partial class Character : CharacterBody2D, IFaction
}
}
public void UseCurrentItemAlt()
public virtual void UseCurrentItemAlt()
{
if (StunTime > 0 || !IsAlive)
{

View File

@ -79,7 +79,6 @@ public sealed partial class Player : Character
deltaTheta, 1);
_targetTracer.Intensity = Mathf.Max(_targetTracer.Intensity -
Mathf.Pi / 4 * (float)delta, 0);
GD.Print(_targetTracer.Intensity);
}
public override void _Input(InputEvent @event)
@ -152,6 +151,22 @@ public sealed partial class Player : Character
.Play();
}
public override void UseCurrentItemAlt()
{
// must have at least 1 level to use
if (Stats.Level.Value >= 1)
{
if (Inventory.SelectedItem is Items.Weapon weapon)
{
if (!weapon.IsUsingAlt)
{
Stats.Level.Value--;
}
}
base.UseCurrentItemAlt();
}
}
public Vector2 GetDesiredInputFromInput()
{
Vector2 mousePos = GetGlobalMousePosition();

View File

@ -14,6 +14,9 @@ public abstract partial class Weapon : Item
public virtual bool IsUsingAlt => false;
[Signal]
public delegate void UsedItemAltEventHandler(Weapon weapon);
/// <summary>
/// How much damage in HP that this weapon deals.
/// </summary>

View File

@ -49,66 +49,52 @@ tracks/1/keys = {
"update": 1,
"values": [0]
}
tracks/2/type = "method"
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".")
tracks/2/path = NodePath("SwingSprite:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"values": [{
"args": ["is_alternate", false],
"method": &"SetAnimationCondition"
}]
"update": 0,
"values": [Color(2, 2, 2, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("SwingSprite:modulate")
tracks/3/path = NodePath("Anchor/Node2D/Sprite2D:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(2, 2, 2, 1)]
"update": 1,
"values": [false]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Anchor/Node2D/Sprite2D:visible")
tracks/4/path = NodePath("Shield:scale")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Shield:scale")
tracks/5/path = NodePath("Shield:material:shader_parameter/intensity")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Shield:material:shader_parameter/intensity")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
@ -202,21 +188,10 @@ tracks/1/keys = {
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".")
tracks/2/path = NodePath("SwingSound")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(),
"transitions": PackedFloat32Array(),
"values": []
}
tracks/3/type = "method"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("SwingSound")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1),
"values": [{
@ -224,13 +199,13 @@ tracks/3/keys = {
"method": &"play"
}]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Anchor/Node2D/Sprite2D:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/Node2D/Sprite2D:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.35),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
@ -288,20 +263,6 @@ tracks/3/keys = {
"update": 1,
"values": [3.14159, 0.785398]
}
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": ["is_alternate", false],
"method": &"SetAnimationCondition"
}]
}
[sub_resource type="Animation" id="Animation_x1aou"]
resource_name = "block"

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=37 format=3 uid="uid://dvqap2uhcah63"]
[gd_scene load_steps=25 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/Weapon/WeaponStateMachine.cs" id="2_vwirq"]
@ -78,29 +78,15 @@ tracks/3/keys = {
"update": 1,
"values": [0.0, 0.0, 0.0]
}
tracks/4/type = "method"
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".")
tracks/4/path = NodePath("SwingSprite:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"values": [{
"args": ["is_alternate", false],
"method": &"SetAnimationCondition"
}]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("SwingSprite:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(2, 2, 2, 1)]
}
@ -206,21 +192,10 @@ tracks/3/keys = {
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".")
tracks/4/path = NodePath("SwingSound")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(),
"transitions": PackedFloat32Array(),
"values": []
}
tracks/5/type = "method"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("SwingSound")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1),
"values": [{
@ -280,20 +255,6 @@ tracks/3/keys = {
"update": 1,
"values": [3.14159, 0.785398]
}
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": ["is_alternate", false],
"method": &"SetAnimationCondition"
}]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tao4k"]
_data = {
@ -305,55 +266,6 @@ _data = {
"attack_alternate": SubResource("Animation_pclfs")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_7lqgd"]
animation = &"RESET"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_0in44"]
animation = &"anticipate"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_2wqg6"]
animation = &"anticipate_bot"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_2ei3g"]
animation = &"use"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_esyoj"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kg3rd"]
switch_mode = 2
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_twtoe"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_73wvy"]
switch_mode = 2
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4wst0"]
switch_mode = 2
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2lfol"]
switch_mode = 2
advance_mode = 2
advance_condition = &"is_player"
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_q4hbp"]
states/End/position = Vector2(717, 75)
states/RESET/node = SubResource("AnimationNodeAnimation_7lqgd")
states/RESET/position = Vector2(275, 190)
states/Start/position = Vector2(109, 75)
states/anticipate/node = SubResource("AnimationNodeAnimation_0in44")
states/anticipate/position = Vector2(275, 75)
states/anticipate_bot/node = SubResource("AnimationNodeAnimation_2wqg6")
states/anticipate_bot/position = Vector2(456, 18)
states/use/node = SubResource("AnimationNodeAnimation_2ei3g")
states/use/position = Vector2(609, 75)
transitions = ["Start", "anticipate", SubResource("AnimationNodeStateMachineTransition_esyoj"), "use", "RESET", SubResource("AnimationNodeStateMachineTransition_kg3rd"), "RESET", "anticipate", SubResource("AnimationNodeStateMachineTransition_twtoe"), "anticipate", "anticipate_bot", SubResource("AnimationNodeStateMachineTransition_73wvy"), "anticipate_bot", "use", SubResource("AnimationNodeStateMachineTransition_4wst0"), "anticipate", "use", SubResource("AnimationNodeStateMachineTransition_2lfol")]
graph_offset = Vector2(0, -104.073)
[sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_37556"]
[node name="Sword" type="Node2D" node_paths=PackedStringArray("Hitbox", "AnimationPlayer", "ParryParticles", "StateMachine", "Anchor", "HandAnchor")]
y_sort_enabled = true
texture_filter = 3
@ -438,13 +350,6 @@ libraries = {
"": SubResource("AnimationLibrary_tao4k")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
tree_root = SubResource("AnimationNodeStateMachine_q4hbp")
anim_player = NodePath("../AnimationPlayer")
active = true
parameters/playback = SubResource("AnimationNodeStateMachinePlayback_37556")
parameters/conditions/is_player = false
[node name="Hitbox" parent="." instance=ExtResource("3_up3ob")]
IsDisabled = true

View File

@ -7,9 +7,16 @@ public partial class WeaponStateMachine : StateMachine<WeaponState>
[Export]
public override WeaponState InitialState { get; set; }
/// <summary>
/// List of initial states when an item is being used. This should also
/// include alt use states.
/// </summary>
[Export]
public Godot.Collections.Array<NodePath> UsedItemStates { get; protected set; }
[Export]
public Godot.Collections.Array<NodePath> UsedItemAltStates { get; protected set; }
[Export]
public Godot.Collections.Array<NodePath> DeusedItemStates { get; protected set; }