2025-02-24 09:10:20 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using Godot;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Cirno.Scripts.Activables;
|
|
|
|
|
|
|
|
|
|
|
|
public partial class BlackCover : Sprite2D, IActivable
|
|
|
|
|
|
{
|
|
|
|
|
|
[Export]
|
|
|
|
|
|
public bool StartActive { get; private set; } = true;
|
2025-04-28 09:50:55 +02:00
|
|
|
|
|
|
|
|
|
|
[Signal]
|
|
|
|
|
|
public delegate void DisabledEventHandler();
|
2025-02-24 09:10:20 +01:00
|
|
|
|
|
|
|
|
|
|
private bool _activated;
|
|
|
|
|
|
|
|
|
|
|
|
public override void _Ready()
|
|
|
|
|
|
{
|
|
|
|
|
|
_activated = StartActive;
|
2025-02-24 10:24:12 +01:00
|
|
|
|
UpdateSprite();
|
2025-02-24 09:10:20 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-09 21:58:25 +01:00
|
|
|
|
public bool Activate(ActivationType activationType = ActivationType.Toggle)
|
2025-02-24 09:10:20 +01:00
|
|
|
|
{
|
|
|
|
|
|
switch (activationType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case ActivationType.Use:
|
|
|
|
|
|
case ActivationType.Toggle:
|
|
|
|
|
|
_activated = !_activated;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ActivationType.Close:
|
|
|
|
|
|
case ActivationType.Enable:
|
|
|
|
|
|
_activated = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ActivationType.Open:
|
|
|
|
|
|
case ActivationType.Disable:
|
|
|
|
|
|
_activated = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ActivationType.Destroy:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
UpdateSprite();
|
2025-03-09 21:58:25 +01:00
|
|
|
|
return true;
|
2025-02-24 09:10:20 +01:00
|
|
|
|
}
|
2025-06-18 11:33:27 +02:00
|
|
|
|
|
|
|
|
|
|
public void Toggle()
|
|
|
|
|
|
{
|
|
|
|
|
|
this.Activate();
|
|
|
|
|
|
}
|
2025-02-24 09:10:20 +01:00
|
|
|
|
|
|
|
|
|
|
private void UpdateSprite()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_activated)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.Show();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-04-28 09:50:55 +02:00
|
|
|
|
EmitSignalDisabled();
|
2025-02-24 09:10:20 +01:00
|
|
|
|
this.Hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-28 09:50:55 +02:00
|
|
|
|
|
|
|
|
|
|
private void OnAreaEntered(Area2D area)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (area is not InteractionController interactionController)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
_activated = false;
|
|
|
|
|
|
UpdateSprite();
|
|
|
|
|
|
}
|
2025-02-24 09:10:20 +01:00
|
|
|
|
}
|