FPSGame/Assets/Weapons/Ammo.cs

111 lines
2.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ammo : MonoBehaviour
{
[Header("Config")]
[SerializeField] private int _ammoType;
[SerializeField] private int _maxBeltAmmoAmount;
[SerializeField] private int _maxMagAmmoAmount;
[Header("State")]
[SerializeField] private int _currentBeltAmmoAmount;
[SerializeField] private int _currentMagAmmoAmount;
[Header("Connections")]
[SerializeField] private FloatVariable _S_currentBeltAmmoAmount;
[SerializeField] private FloatVariable _S_currentMagAmmoAmount;
private void Awake()
{
_currentBeltAmmoAmount = _maxBeltAmmoAmount;
_currentMagAmmoAmount = _maxMagAmmoAmount;
}
private void OnEnable()
{
AmmoUpdate();
}
#region Public Properties
public int AmmoType
{
get => _ammoType;
set => _ammoType = value;
}
public int MaxMagAmmoAmount
{
get => _maxMagAmmoAmount;
set => _maxMagAmmoAmount = value;
}
public int CurrentMagAmmoAmount
{
get => _currentMagAmmoAmount;
set => _currentMagAmmoAmount = value;
}
#endregion
#region Setters
public void Reload()
{
int diff = _maxMagAmmoAmount - _currentMagAmmoAmount;
print(diff);
if (diff < _currentBeltAmmoAmount)
{
_currentBeltAmmoAmount -= diff;
_currentMagAmmoAmount += diff;
}
else
{
_currentMagAmmoAmount += _currentBeltAmmoAmount;
_currentBeltAmmoAmount = 0;
}
AmmoUpdate();
}
public void ModifyMagAmmo(int modifyValue)
{
_currentMagAmmoAmount += modifyValue;
if (_currentMagAmmoAmount > _maxMagAmmoAmount)
{
_currentMagAmmoAmount = _maxMagAmmoAmount;
}
if (_currentMagAmmoAmount <= 0)
{
_currentMagAmmoAmount = 0;
}
AmmoUpdate();
}
#endregion
#region Getters
public float GetMagazineAmmoFactor()
{
return _currentMagAmmoAmount / (float)_maxMagAmmoAmount;
}
public float GetBeltAmmoFactor()
{
return _currentBeltAmmoAmount / (float)_maxBeltAmmoAmount;
}
#endregion
private void AmmoUpdate()
{
_S_currentBeltAmmoAmount.Value = _currentBeltAmmoAmount;
_S_currentMagAmmoAmount.Value = _currentMagAmmoAmount;
}
}