106 lines
2.4 KiB
C#
106 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 OnEnable()
|
|
{
|
|
_currentBeltAmmoAmount = _maxBeltAmmoAmount;
|
|
_currentMagAmmoAmount = _maxMagAmmoAmount;
|
|
}
|
|
|
|
#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;
|
|
}
|
|
} |