using System; using Cirno.Scripts.Enums; using Godot; namespace Cirno.Scripts.Interactables; public partial class StateSwitch : Switch { [Export] public SwitchState StartingState { get; private set; } = SwitchState.Off; public SwitchState CurrentState { get; private set; } public override void _Ready() { base._Ready(); CurrentState = StartingState; switch (CurrentState) { case SwitchState.On: TriggerEnable(); break; case SwitchState.Off: TriggerDisable(); break; case SwitchState.Destroyed: break; case SwitchState.Disabled: break; } } public override bool Activate(ActivationType activationType = ActivationType.Toggle) { switch (activationType) { case ActivationType.Use: case ActivationType.Toggle: switch (CurrentState) { case SwitchState.On: return TriggerDisable(); case SwitchState.Off: return TriggerEnable(); } break; case ActivationType.Close: case ActivationType.Enable: return TriggerEnable(); case ActivationType.Open: case ActivationType.Disable: return TriggerDisable(); case ActivationType.Destroy: this.CurrentState = SwitchState.Destroyed; break; } return false; } protected bool TriggerDisable() { CurrentState = SwitchState.Off; //EmitSignal(Switch.SignalName.OnActivated, (int)ActivationType.Disable); return base.Activate(ActivationType.Disable); } protected bool TriggerEnable() { CurrentState = SwitchState.On; //EmitSignal(Switch.SignalName.OnActivated, (int)ActivationType.Enable); return base.Activate(ActivationType.Enable); } }