using UnityEngine; namespace Cielonos.MainGame.Characters.Inventory { public class AmmoSubmodule : SubmoduleBase { public AmmoData ammoData; public bool hasInfiniteAmmo; public int currentTotalAmmo; public int currentMagazineAmmo; public AmmoSubmodule(ItemBase owner, AmmoData ammoData) : base(owner) { if (ammoData != null) { this.ammoData = ammoData; this.hasInfiniteAmmo = ammoData.hasInfiniteAmmo; this.currentTotalAmmo = ammoData.totalAmmoSize; this.currentMagazineAmmo = ammoData.magazineSize; } else { this.hasInfiniteAmmo = true; this.currentTotalAmmo = -1; this.currentMagazineAmmo = -1; } } public bool CanUse(int amount = 1) { return hasInfiniteAmmo || currentMagazineAmmo >= amount; } public void ConsumeAmmo() { currentMagazineAmmo--; //GameManager.gameUIManager.gameCanvas.mainPanel.mainWeaponUIModule.UpdateAmmo(); } public bool ConsumeAmmo(int amount) { if (currentMagazineAmmo >= amount) { currentMagazineAmmo -= amount; //GameManager.gameUIManager.gameCanvas.mainPanel.mainWeaponUIModule.UpdateAmmo(); return true; } return false; } public void SupplyMagazineAmmo(int amount) { currentMagazineAmmo += amount; currentMagazineAmmo = Mathf.Clamp(currentMagazineAmmo, 0, ammoData.magazineSize); //GameManager.gameUIManager.gameCanvas.mainPanel.mainWeaponUIModule.UpdateAmmo(); } public void ReloadAmmo() { if (currentTotalAmmo < ammoData.magazineSize) { int ammoNeeded = ammoData.magazineSize - currentMagazineAmmo; if (currentTotalAmmo >= ammoNeeded) { currentMagazineAmmo = ammoData.magazineSize; currentTotalAmmo -= ammoNeeded; } else { currentMagazineAmmo += currentTotalAmmo; currentTotalAmmo = 0; } } else { int ammoNeeded = ammoData.magazineSize - currentMagazineAmmo; currentMagazineAmmo = ammoData.magazineSize; currentTotalAmmo -= ammoNeeded; } //GameManager.gameUIManager.gameCanvas.mainPanel.mainWeaponUIModule.UpdateAmmo(); } } }