using System.Collections; using System.Collections.Generic; using UnityEngine; using KairoEngine.Core; using KairoEngine.Inventory; using KairoEngine.SFX; namespace KairoEngine.CharacterSystem { // Todo: Enable floating message when cant reload public class CharacterReloadFirearmAction : IAction { CharacterController character; // Reference to the character that will move ItemFirearmRef firearmRef; ItemContainer itemContainer; bool isDone = false; float counter = 0f; ItemBaseFirearm itemFirearm; // Constructor public CharacterReloadFirearmAction(CharacterController character, ItemFirearmRef firearmRef) { this.character = character; this.firearmRef = firearmRef; itemContainer = character.gameObject.GetComponent(); if(itemContainer == null) { Debug.LogError("Character does not have an ItemContainer (" + character.name + ")."); } } public void Start() { ItemRef ammoRef = itemContainer.GetItem(firearmRef.ammoType); itemFirearm = (ItemBaseFirearm)firearmRef.item; if(ammoRef == null) { FloatingMessageEvents.Send("Out of ammo!", character.gameObject.transform.position, 1f, 1f, 16f); End(); return; } int reloadAmmo = 0; if(ammoRef.quantity >= itemFirearm.ammoCapacity - firearmRef.ammo) { reloadAmmo = itemFirearm.ammoCapacity - firearmRef.ammo; ammoRef.quantity -= reloadAmmo; } else { reloadAmmo = ammoRef.quantity; ammoRef.quantity = 0; } if(ammoRef.quantity <= 0) itemContainer.RemoveItem(ammoRef); else itemContainer.UpdateItem(ammoRef); firearmRef.ammo += reloadAmmo; SoundController.EmmitSound(itemFirearm.reloadSound, character.transform.position); character.animator.SetTrigger("Reload"); GenericEvents.Trigger(character.unique_name + "-Reloading"); } public void Update() { counter += Time.deltaTime; if(counter > itemFirearm.reloadSpeed) End(); } public void End() { GenericEvents.Trigger(character.unique_name + "-ReloadDone"); isDone = true; } public bool IsDone() { return isDone; } } }