first commit

This commit is contained in:
2026-05-25 23:10:02 +03:00
commit c9b9947a9c
127 changed files with 31887 additions and 0 deletions
+153
View File
@@ -0,0 +1,153 @@
using System.Collections.Generic;
using UnityEngine;
public class WeaponSwitcher : MonoBehaviour
{
public float switchCooldown = 0.2f;
public Gun CurrentGun { get; private set; }
private readonly List<Gun> _weapons = new List<Gun>();
private HUDController _hud;
private int _currentIndex = -1;
private void Start()
{
if (_hud == null)
{
_hud = FindObjectOfType<HUDController>();
}
if (_weapons.Count == 0)
{
DiscoverWeapons();
}
}
public void Initialize(IEnumerable<Gun> weapons, HUDController hud)
{
_weapons.Clear();
_weapons.AddRange(weapons);
_hud = hud;
for (int i = 0; i < _weapons.Count; i++)
{
if (_weapons[i] != null)
{
_weapons[i].BindOwnership(_hud, this);
_weapons[i].gameObject.SetActive(false);
}
}
SelectWeapon(0, true);
}
private void Update()
{
if (_weapons.Count == 0)
{
DiscoverWeapons();
}
if (_weapons.Count == 0)
{
return;
}
if (Input.GetKeyDown(KeyCode.Alpha1))
{
SelectWeapon(0);
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
SelectWeapon(1);
}
if (Input.GetKeyDown(KeyCode.Alpha3))
{
SelectWeapon(2);
}
float mouseWheel = Input.GetAxis("Mouse ScrollWheel");
if (mouseWheel > 0.05f)
{
SelectWeapon((_currentIndex + 1) % _weapons.Count);
}
else if (mouseWheel < -0.05f)
{
SelectWeapon((_currentIndex - 1 + _weapons.Count) % _weapons.Count);
}
}
public bool AddAmmoToCurrentWeapon(int amount)
{
return CurrentGun != null && CurrentGun.AddReserveAmmo(amount);
}
public void RefreshHud()
{
if (CurrentGun == null || _hud == null)
{
return;
}
_hud.SetWeapon(CurrentGun.weaponName);
_hud.SetAmmo(CurrentGun.AmmoInMagazine, CurrentGun.ReserveAmmo);
}
private void SelectWeapon(int index, bool force = false)
{
if (_weapons.Count == 0 || index < 0 || index >= _weapons.Count)
{
return;
}
if (!force && index == _currentIndex)
{
return;
}
for (int i = 0; i < _weapons.Count; i++)
{
if (_weapons[i] == null)
{
continue;
}
if (i != index)
{
_weapons[i].CancelReload();
_weapons[i].gameObject.SetActive(false);
}
}
_currentIndex = index;
CurrentGun = _weapons[_currentIndex];
if (CurrentGun != null)
{
CurrentGun.gameObject.SetActive(true);
CurrentGun.SetEquipCooldown(force ? 0f : switchCooldown);
}
RefreshHud();
}
private void DiscoverWeapons()
{
_weapons.Clear();
Gun[] foundWeapons = GetComponentsInChildren<Gun>(true);
for (int i = 0; i < foundWeapons.Length; i++)
{
_weapons.Add(foundWeapons[i]);
foundWeapons[i].BindOwnership(_hud, this);
foundWeapons[i].gameObject.SetActive(false);
}
if (_weapons.Count > 0)
{
SelectWeapon(0, true);
}
}
}