using Sandbox;
using Sasalka;
namespace Sandbox.Weapons;
///
/// Пример фонарика - используемого предмета с собственной логикой
/// Показывает универсальность системы IUseable
///
public sealed class Flashlight : Component, IUseable
{
[Property] public GameObject LightSource { get; set; }
[Property] public SoundPointComponent ToggleSound { get; set; }
[Property] public float Cooldown { get; set; } = 0.5f;
private bool _isOn = false;
private TimeSince _lastUseTime;
protected override void OnStart()
{
base.OnStart();
// Изначально фонарик выключен
if (LightSource != null)
{
LightSource.Enabled = false;
}
}
///
/// Проверка возможности использования
///
public bool CanUse()
{
return IsValid && _lastUseTime >= Cooldown;
}
///
/// Использование фонарика (включение/выключение)
///
public void Use()
{
if (!CanUse()) return;
_lastUseTime = 0;
ToggleLight();
}
///
/// Переключение света
///
private void ToggleLight()
{
_isOn = !_isOn;
if (LightSource != null)
{
LightSource.Enabled = _isOn;
}
// Воспроизводим звук
ToggleSound?.StartSound();
// Можно добавить дополнительные эффекты
Log.Info($"Фонарик {( _isOn ? "включен" : "выключен" )}");
}
///
/// Получить состояние фонарика
///
public bool IsOn => _isOn;
}