CharacterReloadFirearmAction.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using KairoEngine.Core;
  5. using KairoEngine.Inventory;
  6. using KairoEngine.SFX;
  7. namespace KairoEngine.CharacterSystem
  8. {
  9. // Todo: Enable floating message when cant reload
  10. public class CharacterReloadFirearmAction : IAction
  11. {
  12. CharacterController character; // Reference to the character that will move
  13. ItemFirearmRef firearmRef;
  14. ItemContainer itemContainer;
  15. bool isDone = false;
  16. float counter = 0f;
  17. ItemBaseFirearm itemFirearm;
  18. // Constructor
  19. public CharacterReloadFirearmAction(CharacterController character, ItemFirearmRef firearmRef)
  20. {
  21. this.character = character;
  22. this.firearmRef = firearmRef;
  23. itemContainer = character.gameObject.GetComponent<ItemContainer>();
  24. if(itemContainer == null)
  25. {
  26. Debug.LogError("Character does not have an ItemContainer (" + character.name + ").");
  27. }
  28. }
  29. public void Start()
  30. {
  31. ItemRef ammoRef = itemContainer.GetItem(firearmRef.ammoType);
  32. itemFirearm = (ItemBaseFirearm)firearmRef.item;
  33. if(ammoRef == null)
  34. {
  35. FloatingMessageEvents.Send("Out of ammo!", character.gameObject.transform.position, 1f, 1f, 16f);
  36. End();
  37. return;
  38. }
  39. int reloadAmmo = 0;
  40. if(ammoRef.quantity >= itemFirearm.ammoCapacity - firearmRef.ammo)
  41. {
  42. reloadAmmo = itemFirearm.ammoCapacity - firearmRef.ammo;
  43. ammoRef.quantity -= reloadAmmo;
  44. }
  45. else
  46. {
  47. reloadAmmo = ammoRef.quantity;
  48. ammoRef.quantity = 0;
  49. }
  50. if(ammoRef.quantity <= 0) itemContainer.RemoveItem(ammoRef);
  51. else itemContainer.UpdateItem(ammoRef);
  52. firearmRef.ammo += reloadAmmo;
  53. SoundController.EmmitSound(itemFirearm.reloadSound, character.transform.position);
  54. character.animator.SetTrigger("Reload");
  55. GenericEvents.Trigger(character.unique_name + "-Reloading");
  56. }
  57. public void Update()
  58. {
  59. counter += Time.deltaTime;
  60. if(counter > itemFirearm.reloadSpeed) End();
  61. }
  62. public void End()
  63. {
  64. GenericEvents.Trigger(character.unique_name + "-ReloadDone");
  65. isDone = true;
  66. }
  67. public bool IsDone()
  68. {
  69. return isDone;
  70. }
  71. }
  72. }