Fixed healing stations

This commit is contained in:
Marco 2025-03-05 09:44:03 +01:00
commit f1ddee18c4
9 changed files with 84 additions and 30 deletions

View file

@ -74,8 +74,8 @@ animation = &"Default"
z_index = 2 z_index = 2
emitting = false emitting = false
amount = 50 amount = 50
process_material = SubResource("ParticleProcessMaterial_we5sc")
lifetime = 0.8 lifetime = 0.8
process_material = SubResource("ParticleProcessMaterial_we5sc")
[connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="area_entered" from="." to="." method="_on_area_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"] [connection signal="area_exited" from="." to="." method="_on_area_Exited"]

View file

@ -252,11 +252,13 @@ shape = SubResource("CircleShape2D_7n10g")
[node name="Error" type="AudioStreamPlayer2D" parent="InteractionProvider"] [node name="Error" type="AudioStreamPlayer2D" parent="InteractionProvider"]
stream = ExtResource("24_5tmtw") stream = ExtResource("24_5tmtw")
[node name="InteractionController" type="Area2D" parent="."] [node name="InteractionController" type="Area2D" parent="." node_paths=PackedStringArray("Health", "Shield")]
visible = false visible = false
collision_layer = 2 collision_layer = 2
collision_mask = 0 collision_mask = 0
script = ExtResource("27_vwjki") script = ExtResource("27_vwjki")
Health = NodePath("../DamageReceiver/HealthProvider")
Shield = NodePath("../DamageReceiver/ShieldProvider")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"] [node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"]
shape = SubResource("CircleShape2D_g3wua") shape = SubResource("CircleShape2D_g3wua")

View file

@ -1,8 +1,12 @@
using Godot; using Godot;
using System; using System;
using Cirno.Scripts.Components.Actors;
public partial class InteractionController : Area2D public partial class InteractionController : Area2D
{ {
[Export] public ActorResourceProvider Health { get; private set; }
[Export] public ActorResourceProvider Shield { get; private set; }
private bool _enabled = false; private bool _enabled = false;
public bool Enabled public bool Enabled

View file

@ -39,7 +39,7 @@
[sub_resource type="Resource" id="Resource_6wo78"] [sub_resource type="Resource" id="Resource_6wo78"]
script = ExtResource("4_u1i8n") script = ExtResource("4_u1i8n")
EggIndex = 0 EggIndex = 0
StartingEquipment = Array[ExtResource("5_u1i8n")]([]) StartingEquipment = []
[sub_resource type="RectangleShape2D" id="RectangleShape2D_rff8l"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_rff8l"]
size = Vector2(30, 52.5) size = Vector2(30, 52.5)

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Threading.Tasks; using System.Threading.Tasks;
using Cirno.Scripts.Components.FSM;
using Godot; using Godot;
namespace Cirno.Scripts.Activables; namespace Cirno.Scripts.Activables;
@ -22,7 +23,7 @@ public partial class HealthStation : Activable
private bool _isHealing = false; private bool _isHealing = false;
private PlayerMovement _cachedPlayer; private InteractionController _cachedPlayer;
private double _healingTimer = 0; private double _healingTimer = 0;
@ -49,18 +50,20 @@ public partial class HealthStation : Activable
{ {
base._Process(delta); base._Process(delta);
if (_isHealing && _cachedPlayer != null) if (!_isHealing || _cachedPlayer == null) return;
_healingTimer += delta;
if (!(_healingTimer >= 1)) return;
if (_cachedPlayer.Health is not null)
{ {
_healingTimer += delta; _cachedPlayer.Health.CurrentResource += HealthPerSecond;
if (_healingTimer >= 1)
{
_cachedPlayer.CurrentHealth += HealthPerSecond;
_cachedPlayer.CurrentShield += ShieldPerSecond;
_healingTimer = 0;
}
} }
if (_cachedPlayer.Shield is not null)
{
_cachedPlayer.Shield.CurrentResource += ShieldPerSecond;
}
_healingTimer = 0;
} }
public override void Activate(ActivationType activationType = ActivationType.Toggle) public override void Activate(ActivationType activationType = ActivationType.Toggle)
@ -89,23 +92,22 @@ public partial class HealthStation : Activable
} }
} }
private void _on_body_entered(CharacterBody2D area) private void _on_area_entered(Area2D area)
{ {
// Heal player if active
if (!IsEnabled) return; if (!IsEnabled) return;
if (area is not PlayerMovement player) return; if (area is not InteractionController interactionController) return;
_cachedPlayer = player;
_cachedPlayer = interactionController;
_isHealing = true; _isHealing = true;
_particles.Emitting = true; _particles.Emitting = true;
} }
private void _on_body_exited(CharacterBody2D area) private void _on_area_Exited(Area2D area)
{ {
if (!_isHealing) return; if (!_isHealing) return;
if (!IsEnabled) return; if (!IsEnabled) return;
if (area is not PlayerMovement player) return; if (area is not InteractionController player) return;
// Stop healing player if active // Stop healing player if active
@ -113,5 +115,29 @@ public partial class HealthStation : Activable
_particles.Emitting = false; _particles.Emitting = false;
} }
// private void _on_body_entered(CharacterBody2D area)
// {
// // Heal player if active
// if (!IsEnabled) return;
// if (area is not PlayerStateMachine player) return;
//
// _cachedPlayer = player;
//
// _isHealing = true;
// _particles.Emitting = true;
// }
//
// private void _on_body_exited(CharacterBody2D area)
// {
// if (!_isHealing) return;
// if (!IsEnabled) return;
// if (area is not PlayerStateMachine player) return;
//
// // Stop healing player if active
//
// _isHealing = false;
// _particles.Emitting = false;
// }
} }

BIN
Tilesets/factory.aseprite (Stored with Git LFS)

Binary file not shown.

BIN
Tilesets/factory.png (Stored with Git LFS)

Binary file not shown.

View file

@ -940,15 +940,25 @@ texture = ExtResource("1_70kxh")
12:9/0 = 0 12:9/0 = 0
11:9/0 = 0 11:9/0 = 0
11:0/0 = 0 11:0/0 = 0
11:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
12:0/0 = 0 12:0/0 = 0
12:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
13:0/0 = 0 13:0/0 = 0
13:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
14:0/0 = 0 14:0/0 = 0
14:0/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
14:1/0 = 0 14:1/0 = 0
14:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
13:1/0 = 0 13:1/0 = 0
13:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
12:1/0 = 0 12:1/0 = 0
12:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
11:1/0 = 0 11:1/0 = 0
11:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
11:2/0 = 0 11:2/0 = 0
11:2/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
11:3/0 = 0 11:3/0 = 0
11:3/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
12:2/0 = 0 12:2/0 = 0
12:2/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) 12:2/0/physics_layer_1/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
12:3/0 = 0 12:3/0 = 0