mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 07:45:33 +00:00
FSM Player health and animations
This commit is contained in:
parent
af0261ce8e
commit
f91df43caa
13 changed files with 317 additions and 32 deletions
|
|
@ -10,7 +10,8 @@ BulletSpeed = 20.0
|
|||
Direction = Vector2(1, 0)
|
||||
BulletDamage = 8.0
|
||||
LifeTime = 4.0
|
||||
DestroyOnCollision = false
|
||||
DestroyOnCollision = true
|
||||
Owner = 0
|
||||
DamageType = 2
|
||||
Controllable = false
|
||||
TimeModifiers = Array[Object]([])
|
||||
|
|
|
|||
11
Resources/Materials/Player_Blink_Teleport_Material.tres
Normal file
11
Resources/Materials/Player_Blink_Teleport_Material.tres
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dnvwgyt2tbqmr"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://0ruey5bjl7mh" path="res://Shaders/Blink.gdshader" id="1_oiiyf"]
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("1_oiiyf")
|
||||
shader_parameter/blink_color = Color(1, 0.0705882, 0.0392157, 1)
|
||||
shader_parameter/blink_intensity = 0.0
|
||||
shader_parameter/teleport_progress = 0.0
|
||||
shader_parameter/scanline_density = 0.0
|
||||
|
|
@ -1,21 +1,35 @@
|
|||
[gd_scene load_steps=21 format=3 uid="uid://c4pr2707hbeph"]
|
||||
[gd_scene load_steps=28 format=3 uid="uid://c4pr2707hbeph"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"]
|
||||
[ext_resource type="Script" uid="uid://chwqogny2v8t1" path="res://Scripts/Components/FSM/Player/Init.cs" id="2_i6wc8"]
|
||||
[ext_resource type="Script" uid="uid://bl0o35xt8wxtg" path="res://Scripts/Components/FSM/Player/Active.cs" id="3_3tuio"]
|
||||
[ext_resource type="Script" uid="uid://bo6xcjnw3yn6s" path="res://Scripts/Components/FSM/Player/Dead.cs" id="4_0pqs8"]
|
||||
[ext_resource type="Material" uid="uid://dnvwgyt2tbqmr" path="res://Resources/Materials/Player_Blink_Teleport_Material.tres" id="4_5qlss"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://bc7mghjx75qip" path="res://Resources/Sprites/player.tres" id="4_s0ir4"]
|
||||
[ext_resource type="Script" uid="uid://b4nixnxhj5qhw" path="res://Scripts/Components/Actors/PlayerWeaponProvider.cs" id="5_gp3hw"]
|
||||
[ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="6_8dcio"]
|
||||
[ext_resource type="Script" uid="uid://bo5sgbv1t8ril" path="res://Scripts/Components/Actors/PlayerAnimationProvider.cs" id="7_pmkfo"]
|
||||
[ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="8_i6wc8"]
|
||||
[ext_resource type="PackedScene" uid="uid://biugfbp0yae2s" path="res://Scenes/Particles/DeathParticles.tscn" id="9_0pyos"]
|
||||
[ext_resource type="Script" uid="uid://d208gvthkstvc" path="res://Scripts/Components/Actors/PlayerCrosshairProvider.cs" id="9_s0ir4"]
|
||||
[ext_resource type="Texture2D" uid="uid://cfrvb1moh857m" path="res://Sprites/Crosshair.png" id="10_8dcio"]
|
||||
[ext_resource type="Script" uid="uid://3jxrxcqp3ndr" path="res://Scripts/Components/Actors/PlayerHitboxSpriteProvider.cs" id="10_gp3hw"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwjrdlnysft15" path="res://Sprites/Actors/Focus_Circle.png" id="12_8dcio"]
|
||||
[ext_resource type="Texture2D" uid="uid://bf37ce6jskdel" path="res://Sprites/SmallHitbox.png" id="13_pmkfo"]
|
||||
[ext_resource type="Script" uid="uid://dkmsw828qwikk" path="res://Scripts/Components/Actors/PlayerDamageReceiver.cs" id="14_igu66"]
|
||||
[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="15_5qlss"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"]
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_0pqs8"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 2
|
||||
emission_sphere_radius = 16.0
|
||||
orbit_velocity_min = -1.0
|
||||
orbit_velocity_max = 1.098
|
||||
gravity = Vector3(0, 0, 0)
|
||||
color = Color(0.0392157, 0.380392, 1, 1)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_pmkfo"]
|
||||
atlas = ExtResource("10_8dcio")
|
||||
region = Rect2(0, 0, 8, 8)
|
||||
|
|
@ -61,6 +75,9 @@ animations = [{
|
|||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_igu66"]
|
||||
radius = 2.23607
|
||||
|
||||
[node name="FSMPlayer" type="CharacterBody2D"]
|
||||
collision_layer = 2
|
||||
collision_mask = 97
|
||||
|
|
@ -71,19 +88,26 @@ InitialState = 1
|
|||
[node name="Init" type="Node2D" parent="."]
|
||||
script = ExtResource("2_i6wc8")
|
||||
|
||||
[node name="Active" type="Node2D" parent="." node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider")]
|
||||
[node name="Active" type="Node2D" parent="." node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider", "_damageReceiver")]
|
||||
script = ExtResource("3_3tuio")
|
||||
_weaponProvider = NodePath("../WeaponProvider")
|
||||
_animationProvider = NodePath("../AnimationProvider")
|
||||
_crosshairProvider = NodePath("../CrosshairProvider")
|
||||
_hitboxSpriteProvider = NodePath("../StrafeSpriteProvider")
|
||||
_inputProvider = NodePath("../InputProvider")
|
||||
_damageReceiver = NodePath("../DamageReceiver")
|
||||
State = 1
|
||||
|
||||
[node name="Dead" type="Node2D" parent="." node_paths=PackedStringArray("_animationProvider")]
|
||||
script = ExtResource("4_0pqs8")
|
||||
_animationProvider = NodePath("../AnimationProvider")
|
||||
State = 4
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_b3hxm")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
material = ExtResource("4_5qlss")
|
||||
sprite_frames = ExtResource("4_s0ir4")
|
||||
animation = &"idle"
|
||||
|
||||
|
|
@ -91,9 +115,19 @@ animation = &"idle"
|
|||
script = ExtResource("5_gp3hw")
|
||||
WeaponTemplate = ExtResource("6_8dcio")
|
||||
|
||||
[node name="AnimationProvider" type="Node2D" parent="." node_paths=PackedStringArray("_animatedSprite")]
|
||||
[node name="AnimationProvider" type="Node2D" parent="." node_paths=PackedStringArray("_animatedSprite", "_shieldParticles")]
|
||||
script = ExtResource("7_pmkfo")
|
||||
_animatedSprite = NodePath("../AnimatedSprite2D")
|
||||
_deathParticles = ExtResource("9_0pyos")
|
||||
_shieldParticles = NodePath("ShieldParticles")
|
||||
BlinkMaterial = ExtResource("4_5qlss")
|
||||
|
||||
[node name="ShieldParticles" type="GPUParticles2D" parent="AnimationProvider"]
|
||||
emitting = false
|
||||
amount = 32
|
||||
lifetime = 0.4
|
||||
one_shot = true
|
||||
process_material = SubResource("ParticleProcessMaterial_0pqs8")
|
||||
|
||||
[node name="InputProvider" type="Node2D" parent="."]
|
||||
script = ExtResource("8_i6wc8")
|
||||
|
|
@ -119,3 +153,25 @@ sprite_frames = SubResource("SpriteFrames_igu66")
|
|||
[node name="Hitbox" type="AnimatedSprite2D" parent="StrafeSpriteProvider"]
|
||||
z_index = 2
|
||||
sprite_frames = SubResource("SpriteFrames_5qlss")
|
||||
|
||||
[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("_healthProvider", "_shieldProvider")]
|
||||
collision_layer = 2
|
||||
collision_mask = 136
|
||||
script = ExtResource("14_igu66")
|
||||
_healthProvider = NodePath("HealthProvider")
|
||||
_shieldProvider = NodePath("ShieldProvider")
|
||||
|
||||
[node name="HealthProvider" type="Node2D" parent="DamageReceiver"]
|
||||
script = ExtResource("15_5qlss")
|
||||
ResourceName = "Health"
|
||||
MaxResource = 32.0
|
||||
|
||||
[node name="ShieldProvider" type="Node2D" parent="DamageReceiver"]
|
||||
script = ExtResource("15_5qlss")
|
||||
ResourceName = "Shield"
|
||||
MaxResource = 32.0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"]
|
||||
shape = SubResource("CircleShape2D_igu66")
|
||||
|
||||
[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=16 format=4 uid="uid://dqyfnby0t7gu1"]
|
||||
[gd_scene load_steps=19 format=4 uid="uid://dqyfnby0t7gu1"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_c3v4x"]
|
||||
[ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_w1v1g"]
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
[ext_resource type="Script" uid="uid://mja0rk7n2kln" path="res://Scripts/Resources/MapStartDataResource.cs" id="4_u1i8n"]
|
||||
[ext_resource type="Resource" uid="uid://dhbltvgsa3g88" path="res://Resources/Items/Spider_Bomb_Pickup.tres" id="4_yyg8m"]
|
||||
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_6314l"]
|
||||
[ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="5_u1i8n"]
|
||||
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_yyg8m"]
|
||||
[ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="8_c3v4x"]
|
||||
[ext_resource type="Script" uid="uid://cfya7sndh7vy2" path="res://Scenes/CameraController.gd" id="9_dj0ui"]
|
||||
|
|
@ -14,11 +15,13 @@
|
|||
[ext_resource type="Script" uid="uid://bdshph801ac2i" path="res://Scenes/CameraTarget.gd" id="12_8to53"]
|
||||
[ext_resource type="Script" uid="uid://cnkipcolyj61w" path="res://Scripts/AlarmManager.cs" id="13_8fnge"]
|
||||
[ext_resource type="PackedScene" uid="uid://b3tyacxxw88lx" path="res://Scenes/Utils/StreamPlayerWithName.tscn" id="14_q7rh4"]
|
||||
[ext_resource type="PackedScene" uid="uid://cd36ch65jijg0" path="res://Scenes/Activable/BulletEmitter.tscn" id="15_b3hxm"]
|
||||
[ext_resource type="Resource" uid="uid://bj331rcsq65es" path="res://Resources/Bullets/EmitterTestBullet.tres" id="16_u1i8n"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6wo78"]
|
||||
script = ExtResource("4_u1i8n")
|
||||
EggIndex = 0
|
||||
StartingEquipment = []
|
||||
StartingEquipment = Array[ExtResource("5_u1i8n")]([])
|
||||
|
||||
[node name="GameScene" type="Node2D"]
|
||||
process_mode = 3
|
||||
|
|
@ -86,3 +89,8 @@ script = ExtResource("13_8fnge")
|
|||
[node name="AudioStreamPlayer2D" parent="." instance=ExtResource("14_q7rh4")]
|
||||
process_mode = 3
|
||||
autoplay = true
|
||||
|
||||
[node name="BulletEmitter" parent="." instance=ExtResource("15_b3hxm")]
|
||||
position = Vector2(59.7855, 263.59)
|
||||
BulletResource = ExtResource("16_u1i8n")
|
||||
EmitOnStart = true
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
[ext_resource type="PackedScene" uid="uid://cfb3nsay84xdb" path="res://Scenes/Weapons/crosshair.tscn" id="6_l43rf"]
|
||||
[ext_resource type="Shader" uid="uid://0ruey5bjl7mh" path="res://Shaders/Blink.gdshader" id="6_xugve"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://bc7mghjx75qip" path="res://Resources/Sprites/player.tres" id="7_fd4e3"]
|
||||
[ext_resource type="Material" uid="uid://dnvwgyt2tbqmr" path="res://Resources/Materials/Player_Blink_Teleport_Material.tres" id="7_igrcy"]
|
||||
[ext_resource type="Texture2D" uid="uid://bf37ce6jskdel" path="res://Sprites/SmallHitbox.png" id="7_msn8i"]
|
||||
[ext_resource type="Script" uid="uid://cem7a1agaqtrt" path="res://Scenes/InteractionController.cs" id="7_uvgjg"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwjrdlnysft15" path="res://Sprites/Actors/Focus_Circle.png" id="8_1og8b"]
|
||||
|
|
@ -25,14 +26,6 @@ size = Vector2(6, 6)
|
|||
atlas = ExtResource("2_bwf6x")
|
||||
region = Rect2(0, 0, 8, 16)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_s7co1"]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("6_xugve")
|
||||
shader_parameter/blink_color = Color(1, 0.0705882, 0.0392157, 1)
|
||||
shader_parameter/blink_intensity = 0.0
|
||||
shader_parameter/teleport_progress = 0.0
|
||||
shader_parameter/scanline_density = 0.0
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lsyrf"]
|
||||
atlas = ExtResource("8_1og8b")
|
||||
region = Rect2(0, 0, 32, 32)
|
||||
|
|
@ -103,7 +96,7 @@ frame = 1
|
|||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Smoothing2D" groups=["player_sprite"]]
|
||||
y_sort_enabled = true
|
||||
material = SubResource("ShaderMaterial_s7co1")
|
||||
material = ExtResource("7_igrcy")
|
||||
sprite_frames = ExtResource("7_fd4e3")
|
||||
animation = &"walk_left"
|
||||
frame = 1
|
||||
|
|
|
|||
|
|
@ -1,10 +1,19 @@
|
|||
using System.Threading.Tasks;
|
||||
using Cirno.Scripts;
|
||||
using Cirno.Scripts.Components;
|
||||
using Godot;
|
||||
using GTweens.Builders;
|
||||
using GTweens.Tweens;
|
||||
using GTweensGodot.Extensions;
|
||||
|
||||
public partial class PlayerAnimationProvider : Node2D
|
||||
{
|
||||
[Export]
|
||||
public AnimatedSprite2D _animatedSprite {get; private set;}
|
||||
|
||||
[Export] private PackedScene _deathParticles;
|
||||
[Export] private GpuParticles2D _shieldParticles;
|
||||
|
||||
[ExportCategory("Animation Names")]
|
||||
[Export]
|
||||
public string WalkRightAnimationName {get; private set;} = "walk_right";
|
||||
|
|
@ -16,6 +25,13 @@ public partial class PlayerAnimationProvider : Node2D
|
|||
[Export]
|
||||
public string WalkUpAnimationName {get; private set;} = "walk_up";
|
||||
|
||||
[ExportCategory("Shaders")]
|
||||
[Export] public ShaderMaterial BlinkMaterial {get; private set;}
|
||||
|
||||
[Export] public StringName BlinkShaderPropertyName { get; private set; } = new StringName("blink_intensity");
|
||||
|
||||
private GTween _blinkTween;
|
||||
|
||||
public void SetAnimation(Vector2 velocity)
|
||||
{
|
||||
if (velocity.X == 0 && velocity.Y == 0)
|
||||
|
|
@ -45,4 +61,46 @@ public partial class PlayerAnimationProvider : Node2D
|
|||
}
|
||||
}
|
||||
|
||||
public void Blink()
|
||||
{
|
||||
if (BlinkMaterial == null) return;
|
||||
_animatedSprite.Material = BlinkMaterial;
|
||||
|
||||
var material = ((ShaderMaterial)_animatedSprite.Material);
|
||||
|
||||
_blinkTween?.Kill();
|
||||
|
||||
_blinkTween = GTweenSequenceBuilder.New()
|
||||
.Append(material.TweenPropertyFloat(BlinkShaderPropertyName, 1f, 0f))
|
||||
.Append(material.TweenPropertyFloat(BlinkShaderPropertyName, 0f, 0.5f))
|
||||
.Build();
|
||||
|
||||
_blinkTween.Play();
|
||||
}
|
||||
|
||||
private void SetShaderTeleportProgress(float value)
|
||||
{
|
||||
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("teleport_progress", value);
|
||||
}
|
||||
|
||||
private void SetShaderScanlineDensity(float value)
|
||||
{
|
||||
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("scanline_density", value);
|
||||
}
|
||||
|
||||
private void SetShaderBlinkIntensity(float newValue)
|
||||
{
|
||||
((ShaderMaterial)_animatedSprite.Material).SetShaderParameter("blink_intensity", newValue);
|
||||
}
|
||||
|
||||
public void PlayDeathAnimation()
|
||||
{
|
||||
this.CreateSibling<AutodeleteParticle>(_deathParticles, this.GlobalPosition);
|
||||
_animatedSprite.Visible = false;
|
||||
}
|
||||
|
||||
public void PlayShieldAnimation()
|
||||
{
|
||||
_shieldParticles.Emitting = true;
|
||||
}
|
||||
}
|
||||
104
Scripts/Components/Actors/PlayerDamageReceiver.cs
Normal file
104
Scripts/Components/Actors/PlayerDamageReceiver.cs
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
using System;
|
||||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.Actors;
|
||||
|
||||
public partial class PlayerDamageReceiver : Area2D
|
||||
{
|
||||
[Export]
|
||||
public bool Enabled { get; set; } = false;
|
||||
[Export]
|
||||
public bool Invulnerable { get; private set; } = false;
|
||||
[Export] public BulletOwner BulletGroup { get; set; } = BulletOwner.Player;
|
||||
|
||||
[Export]
|
||||
private ActorResourceProvider _healthProvider;
|
||||
[Export]
|
||||
private ActorResourceProvider _shieldProvider;
|
||||
|
||||
[Signal]
|
||||
public delegate void HealthChangedEventHandler(float newValue, float maxValue);
|
||||
|
||||
[Signal]
|
||||
public delegate void ShieldChangedEventHandler(float newValue, float maxValue);
|
||||
|
||||
[Signal]
|
||||
public delegate void DeathEventHandler();
|
||||
|
||||
public float CurrentHealth
|
||||
{
|
||||
get => _healthProvider.CurrentResource;
|
||||
set => _healthProvider.CurrentResource = value;
|
||||
}
|
||||
|
||||
public float CurrentShield
|
||||
{
|
||||
get => _shieldProvider.CurrentResource;
|
||||
set => _shieldProvider.CurrentResource = value;
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
_healthProvider.FillResource();
|
||||
_shieldProvider.FillResource();
|
||||
|
||||
_healthProvider.ResourceChanged += ((value, maxValue) =>
|
||||
{
|
||||
if (!Enabled) return;
|
||||
EmitSignal(SignalName.HealthChanged, value, maxValue);
|
||||
});
|
||||
|
||||
_shieldProvider.ResourceChanged += ((value, maxValue) =>
|
||||
{
|
||||
if (!Enabled) return;
|
||||
EmitSignal(SignalName.ShieldChanged, value, maxValue);
|
||||
});
|
||||
|
||||
_healthProvider.ResourceDepleted += () =>
|
||||
{
|
||||
if (!Enabled) return;
|
||||
EmitSignal(SignalName.Death);
|
||||
};
|
||||
}
|
||||
|
||||
private void _on_damage_hitbox_area_entered(Area2D area)
|
||||
{
|
||||
if (!Enabled) return;
|
||||
if (Invulnerable) return;
|
||||
if (area is not Bullet bullet || bullet.BulletOwner == BulletGroup) return;
|
||||
this.Hit(bullet.Damage, bullet.DamageType);
|
||||
bullet.RequestCollisionDestruction();
|
||||
}
|
||||
|
||||
public void Hit(float damage, DamageType type = DamageType.Neutral)
|
||||
{
|
||||
if (!Enabled) return;
|
||||
|
||||
if (CurrentShield > 0 && type is not DamageType.Explosive or DamageType.Acid)
|
||||
{
|
||||
// Reduce shield
|
||||
//PlayShieldAnimation(); // Let this be handled by event
|
||||
CurrentShield -= damage;
|
||||
if (CurrentShield < 0)
|
||||
{
|
||||
CurrentHealth -= Math.Abs(CurrentShield);
|
||||
CurrentShield = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (type is DamageType.Fire)
|
||||
{
|
||||
CurrentHealth -= damage * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentHealth -= damage;
|
||||
}
|
||||
|
||||
//Blink(); // Let this be handled by event
|
||||
}
|
||||
|
||||
if (!(CurrentHealth <= 0)) return;
|
||||
}
|
||||
}
|
||||
1
Scripts/Components/Actors/PlayerDamageReceiver.cs.uid
Normal file
1
Scripts/Components/Actors/PlayerDamageReceiver.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dkmsw828qwikk
|
||||
|
|
@ -21,15 +21,15 @@ public partial class PlayerHitboxSpriteProvider : Node2D
|
|||
}
|
||||
}
|
||||
|
||||
public void Show()
|
||||
{
|
||||
Hitbox.Show();
|
||||
Circle.Show();
|
||||
}
|
||||
|
||||
public void Hide()
|
||||
{
|
||||
Hitbox.Hide();
|
||||
Circle.Hide();
|
||||
}
|
||||
// public void Show()
|
||||
// {
|
||||
// Hitbox.Show();
|
||||
// Circle.Show();
|
||||
// }
|
||||
//
|
||||
// public void Hide()
|
||||
// {
|
||||
// Hitbox.Hide();
|
||||
// Circle.Hide();
|
||||
// }
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@ namespace Cirno.Scripts.Components.FSM.Player;
|
|||
public partial class Active : PlayerFSMState
|
||||
{
|
||||
private Vector2 _movementDirection { get; set; }
|
||||
public Vector2 FacingDirection { get; private set; }
|
||||
public Vector2 FacingDirection { get; private set; } = Vector2.Down;
|
||||
|
||||
[Export]
|
||||
public int Speed { get; set; } = 45;
|
||||
|
|
@ -27,16 +27,37 @@ public partial class Active : PlayerFSMState
|
|||
[Export]
|
||||
private InputProvider _inputProvider;
|
||||
|
||||
[Export] private PlayerDamageReceiver _damageReceiver;
|
||||
|
||||
private bool _isStrafing;
|
||||
|
||||
|
||||
|
||||
public int MovementSpeed => _isStrafing ? StrafeSpeed : Speed;
|
||||
|
||||
private PlayerStateMachine _player;
|
||||
|
||||
public override void Init(ActorStateMachine stateMachine)
|
||||
{
|
||||
base.Init(stateMachine);
|
||||
|
||||
_player = (PlayerStateMachine)stateMachine;
|
||||
|
||||
_damageReceiver.Death += () =>
|
||||
{
|
||||
ChangeState(PlayerState.Dead);
|
||||
};
|
||||
|
||||
_damageReceiver.HealthChanged += (value, maxValue) =>
|
||||
{
|
||||
_animationProvider.Blink();
|
||||
};
|
||||
|
||||
_damageReceiver.ShieldChanged += (value, maxValue) =>
|
||||
{
|
||||
_animationProvider.PlayShieldAnimation();
|
||||
};
|
||||
|
||||
_damageReceiver.Init();
|
||||
|
||||
//_weaponProvider = stateMachine.GetNode<PlayerWeaponProvider>("WeaponProvider");
|
||||
//_animationProvider = stateMachine.GetNode<PlayerAnimationProvider>("AnimationProvider");
|
||||
|
||||
|
|
@ -48,6 +69,8 @@ public partial class Active : PlayerFSMState
|
|||
// enable sprite
|
||||
// enable crosshair
|
||||
_crosshairProvider.Show();
|
||||
|
||||
_damageReceiver.Enabled = true;
|
||||
}
|
||||
|
||||
public override void ExitState()
|
||||
|
|
@ -55,6 +78,8 @@ public partial class Active : PlayerFSMState
|
|||
_animationProvider.SetAnimation(Vector2.Zero);
|
||||
_crosshairProvider.Hide();
|
||||
_hitboxSpriteProvider.Hide();
|
||||
|
||||
_damageReceiver.Enabled = false;
|
||||
}
|
||||
|
||||
public override void PhysicsProcessState(double delta)
|
||||
|
|
|
|||
29
Scripts/Components/FSM/Player/Dead.cs
Normal file
29
Scripts/Components/FSM/Player/Dead.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.FSM.Player;
|
||||
|
||||
public partial class Dead : PlayerFSMState
|
||||
{
|
||||
[Export]
|
||||
private PlayerAnimationProvider _animationProvider;
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
_animationProvider.PlayDeathAnimation();
|
||||
}
|
||||
|
||||
public override void ExitState()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void ProcessState(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void PhysicsProcessState(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
1
Scripts/Components/FSM/Player/Dead.cs.uid
Normal file
1
Scripts/Components/FSM/Player/Dead.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://bo6xcjnw3yn6s
|
||||
|
|
@ -178,7 +178,6 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible
|
|||
case GameState.Menu:
|
||||
case GameState.Paused:
|
||||
_canMove = false;
|
||||
_state = PlayerState.Paused;
|
||||
break;
|
||||
case GameState.Playing:
|
||||
_canMove = true;
|
||||
|
|
@ -186,7 +185,6 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible
|
|||
break;
|
||||
case GameState.Dialogue:
|
||||
_canMove = false;
|
||||
_state = PlayerState.Paused;
|
||||
break;
|
||||
case GameState.Controlling:
|
||||
_canMove = false;
|
||||
|
|
@ -585,7 +583,7 @@ public enum PlayerState
|
|||
{
|
||||
Init,
|
||||
Active,
|
||||
Paused,
|
||||
Cutscene,
|
||||
Controlling,
|
||||
Dead,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue