Interactable/Light.cs
using Clover.Persistence;
using Clover.Player;
namespace Clover.Interactable;
[Category( "Clover/Interactable" )]
[Icon( "lightbulb" )]
public class Light : Component, IInteract, IPersistent
{
[Property, Sync] public bool IsOn { get; set; } = true;
[Property] public List<GameObject> Targets { get; set; } = new();
[Property] public SoundEvent LightSwitchSound { get; set; }
public void StartInteract( PlayerCharacter player )
{
Toggle();
Sound.Play( LightSwitchSound, WorldPosition );
}
public void FinishInteract( PlayerCharacter player )
{
}
public string GetInteractName()
{
return IsOn ? "Turn Off" : "Turn On";
}
public void Toggle()
{
IsOn = !IsOn;
UpdateState();
}
public void TurnOn()
{
IsOn = true;
UpdateState();
}
public void TurnOff()
{
IsOn = false;
UpdateState();
}
private void UpdateState()
{
foreach ( var target in Targets )
{
/*if ( target.Components.TryGet<Sandbox.Light>( out var light ) )
{
light.
}*/
target.Enabled = IsOn;
}
}
public void OnSave( PersistentItem item )
{
item.SetSaveData( "IsOn", IsOn );
}
public void OnLoad( PersistentItem item )
{
IsOn = item.GetSaveData<bool>( "IsOn" );
UpdateState();
}
}