QuestAction.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Events;
  6. public class QuestAction : MonoBehaviour
  7. {
  8. public QuestScriptable questData;
  9. bool isRegistered = false;
  10. public UnityEvent OnComplete;
  11. public bool isFinalAction = true;
  12. public List<QuestCompleteResourceCheckEntry> resourceCheckEntries;
  13. private void OnTriggerEnter2D(Collider2D other)
  14. {
  15. if (other.CompareTag("Player") && other.transform == playerNetwork.localPlayerTransform)
  16. {
  17. foreach(QuestCompleteResourceCheckEntry entry in resourceCheckEntries) //Check if has all resources
  18. {
  19. int stockCount = playerNetwork.localPlayerTransform.GetComponent<Inventory>().inventoryManager.GetStock(entry.resource.type);
  20. if(stockCount < entry.amount)
  21. {
  22. Debug.Log($"Not enough {entry.resource.type}, need {entry.amount}, found {stockCount}");
  23. return;
  24. }
  25. }
  26. foreach(QuestCompleteResourceCheckEntry entry in resourceCheckEntries){ //Remove resources
  27. if(playerNetwork.localPlayerTransform.GetComponent<Inventory>().inventoryManager.GetStock(entry.resource.type) < entry.amount){
  28. }else{
  29. playerNetwork.localPlayerTransform.GetComponent<Inventory>().inventoryManager.RemoveItem(entry.resource.type, entry.amount);
  30. }
  31. }
  32. OnComplete.Invoke();
  33. Debug.Log("QuestAction: QuestAction completed");
  34. if (isFinalAction)
  35. {
  36. playerNetwork.localPlayerTransform.GetComponent<playerNetwork>().CompleteQuest(questData);
  37. }
  38. gameObject.SetActive(false);
  39. }
  40. }
  41. public void activate()
  42. {
  43. gameObject.SetActive(true);
  44. }
  45. void Update()
  46. {
  47. if (playerNetwork.localPlayerTransform != null && !isRegistered)
  48. {
  49. Register();
  50. }
  51. }
  52. void Register()
  53. {
  54. playerNetwork.registerQuestAction(this);
  55. isRegistered = true;
  56. gameObject.SetActive(false);
  57. }
  58. }
  59. [Serializable ]
  60. public class QuestCompleteResourceCheckEntry
  61. {
  62. public item resource;
  63. public int amount;
  64. }