using Sandbox; using Sasalka; namespace Sandbox.Weapons; /// /// Фабрика для создания используемых предметов с правильной настройкой компонентов /// public static class WeaponFactory { /// /// Создать используемый предмет с правильной настройкой /// public static GameObject CreateUseableItem(BaseItemDefinition itemDef, InventoryItem inventoryItem = null) { if (itemDef?.Prefab == null) return null; var itemGo = itemDef.Prefab.Clone(); // Проверяем, есть ли уже компонент оружия if (!itemGo.Components.TryGet(out var weapon)) { // Определяем тип предмета по имени или другим параметрам if (itemDef.Name.ToLower().Contains("pistol") || itemDef.Name.ToLower().Contains("rifle") || itemDef.Name.ToLower().Contains("gun")) { // Создаем оружие как InventoryItem weapon = itemGo.Components.Create(); weapon.Definition = itemDef; } else if (itemDef.Name.ToLower().Contains("flashlight") || itemDef.Name.ToLower().Contains("light")) { // Создаем фонарик var flashlight = itemGo.Components.Create(); } else { // По умолчанию создаем базовое оружие weapon = itemGo.Components.Create(); weapon.Definition = itemDef; } } // Настраиваем компоненты SetupItemComponents(itemGo, itemDef); return itemGo; } /// /// Создать оружие с правильной настройкой (для обратной совместимости) /// public static GameObject CreateWeapon(WeaponItemDefinition weaponDef, InventoryItem inventoryItem = null) { return CreateUseableItem(weaponDef, inventoryItem); } /// /// Настройка компонентов предмета /// private static void SetupItemComponents(GameObject itemGo, BaseItemDefinition itemDef) { // Настраиваем рендерер if (itemGo.Components.TryGet(out var renderer)) { // Можно добавить специфичную настройку рендерера } // Настраиваем звук if (itemGo.Components.TryGet(out var sound)) { // Можно добавить специфичную настройку звука } // Настраиваем физику if (itemGo.Components.TryGet(out var rigidbody)) { // Можно добавить специфичную настройку физики } } /// /// Создать предмет для инвентаря /// public static InventoryItem CreateItem(BaseItemDefinition itemDef) { // Для оружия создаем BaseWeapon, для остального - обычный InventoryItem if (itemDef is WeaponItemDefinition) { return new BaseWeapon { Definition = itemDef, Count = 1 }; } return new InventoryItem { Definition = itemDef, Count = 1 }; } /// /// Создать предмет оружия для инвентаря (для обратной совместимости) /// public static InventoryItem CreateWeaponItem(WeaponItemDefinition weaponDef) { return new BaseWeapon { Definition = weaponDef, Count = 1 }; } }