mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
145 lines
No EOL
3.6 KiB
C#
145 lines
No EOL
3.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Threading.Tasks;
|
|
using Cirno.Scripts.Components.FSM;
|
|
using Godot;
|
|
|
|
namespace Cirno.Scripts.Activables;
|
|
|
|
public partial class HealthStation : Activable
|
|
{
|
|
[Export]
|
|
public bool IsEnabled { get; set; }
|
|
|
|
[Export]
|
|
public float HealthPerSecond { get; private set; } = 10f;
|
|
|
|
[Export]
|
|
public float ShieldPerSecond { get; private set; } = 10f;
|
|
|
|
private AnimatedSprite2D _animatedSprite;
|
|
|
|
private GpuParticles2D _particles;
|
|
|
|
private bool _isHealing = false;
|
|
|
|
private InteractionController _cachedPlayer;
|
|
|
|
private double _healingTimer = 0;
|
|
|
|
public override void _Ready()
|
|
{
|
|
_particles = GetNode<GpuParticles2D>("./Particles");
|
|
_animatedSprite = GetNode<AnimatedSprite2D>("AnimatedSprite2D");
|
|
|
|
_particles.Emitting = false;
|
|
|
|
if (IsEnabled)
|
|
{
|
|
_animatedSprite.Play("Active");
|
|
}
|
|
else
|
|
{
|
|
_animatedSprite.Play("Default");
|
|
}
|
|
|
|
_healingTimer = 0;
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
base._Process(delta);
|
|
|
|
if (!_isHealing || _cachedPlayer == null) return;
|
|
_healingTimer += delta;
|
|
|
|
if (!(_healingTimer >= 1)) return;
|
|
if (_cachedPlayer.Health is not null)
|
|
{
|
|
_cachedPlayer.Health.CurrentResource += HealthPerSecond;
|
|
}
|
|
if (_cachedPlayer.Shield is not null)
|
|
{
|
|
_cachedPlayer.Shield.CurrentResource += ShieldPerSecond;
|
|
}
|
|
|
|
_healingTimer = 0;
|
|
}
|
|
|
|
public override bool Activate(ActivationType activationType = ActivationType.Toggle)
|
|
{
|
|
switch (activationType)
|
|
{
|
|
case ActivationType.Toggle:
|
|
// Enables/Disables teleporter
|
|
break;
|
|
case ActivationType.Enable:
|
|
// Enables Teleporter
|
|
IsEnabled = true;
|
|
_animatedSprite.Play("Active");
|
|
break;
|
|
case ActivationType.Disable:
|
|
IsEnabled = false;
|
|
_animatedSprite.Play("Default");
|
|
// Disables Teleporter
|
|
break;
|
|
case ActivationType.Use:
|
|
// Teleports
|
|
break;
|
|
case ActivationType.Destroy:
|
|
// Destroys
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private void _on_area_entered(Area2D area)
|
|
{
|
|
if (!IsEnabled) return;
|
|
if (area is not InteractionController interactionController) return;
|
|
|
|
_cachedPlayer = interactionController;
|
|
|
|
_isHealing = true;
|
|
_particles.Emitting = true;
|
|
}
|
|
|
|
private void _on_area_Exited(Area2D area)
|
|
{
|
|
if (!_isHealing) return;
|
|
if (!IsEnabled) return;
|
|
if (area is not InteractionController player) return;
|
|
|
|
// Stop healing player if active
|
|
|
|
_isHealing = 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;
|
|
// }
|
|
|
|
|
|
} |