123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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<ItemContainer>();
- 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;
- }
- }
- }
|