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; }