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