Advertisement
evelynshilosky

SelectionManager - Part 32

Feb 12th, 2024
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.09 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6.  
  7. public class SelectionManager : MonoBehaviour
  8. {
  9.  
  10.     public static SelectionManager Instance { get; set; }
  11.  
  12.  
  13.     public bool onTarget;
  14.  
  15.     public GameObject selectedObject;
  16.  
  17.     public GameObject interaction_Info_UI;
  18.     Text interaction_text;
  19.  
  20.     public Image centerDotImage;
  21.     public Image handIcon;
  22.  
  23.     public bool handIsVisible;
  24.  
  25.     public GameObject selectedTree;
  26.     public GameObject chopHolder;
  27.  
  28.  
  29.     private void Start()
  30.     {
  31.         onTarget = false;
  32.         interaction_text = interaction_Info_UI.GetComponent<Text>();
  33.     }
  34.  
  35.  
  36.     private void Awake()
  37.     {
  38.         if (Instance != null && Instance != this)
  39.         {
  40.             Destroy(gameObject);
  41.         }
  42.         else
  43.         {
  44.             Instance = this;
  45.         }
  46.     }
  47.  
  48.  
  49.  
  50.     void Update()
  51.     {
  52.         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  53.         RaycastHit hit;
  54.         if (Physics.Raycast(ray, out hit))
  55.         {
  56.             var selectionTransform = hit.transform;
  57.  
  58.            
  59.             NPC npc = selectionTransform.GetComponent<NPC>();
  60.  
  61.             if (npc && npc.playerInRange)
  62.             {
  63.                 interaction_text.text = "Press \"E\" to Talk";
  64.                 interaction_Info_UI.SetActive(true);
  65.  
  66.                 if (Input.GetKeyDown(KeyCode.E) && npc.isTalkingWithPlayer == false)
  67.                 {
  68.                     npc.StartConversation();
  69.                 }
  70.  
  71.                 if (DialogueSystem.Instance.dialogueUIActive)
  72.                 {
  73.                     interaction_Info_UI.SetActive(false);
  74.                     centerDotImage.gameObject.SetActive(false);
  75.                 }
  76.             }
  77.  
  78.             ChoppableTree choppableTree = selectionTransform.GetComponent<ChoppableTree>();
  79.  
  80.             if (choppableTree && choppableTree.playerInRange)
  81.             {
  82.                 choppableTree.canBeChopped = true;
  83.                 selectedTree = choppableTree.gameObject;
  84.                 chopHolder.gameObject.SetActive(true);
  85.  
  86.             }
  87.             else
  88.             {
  89.                 if (selectedTree != null)
  90.                 {
  91.                     selectedTree.gameObject.GetComponent<ChoppableTree>().canBeChopped = false;
  92.                     selectedTree = null;
  93.                     chopHolder.gameObject.SetActive(false);
  94.                 }
  95.             }
  96.  
  97.             InteractableObject interactable = selectionTransform.GetComponent<InteractableObject>();
  98.  
  99.             if (interactable && interactable.playerInRange)
  100.             {
  101.  
  102.                 onTarget = true;
  103.                 selectedObject = interactable.gameObject;
  104.                 interaction_text.text = interactable.GetItemName();
  105.                 interaction_Info_UI.SetActive(true);
  106.  
  107.                 centerDotImage.gameObject.SetActive(false);
  108.                 handIcon.gameObject.SetActive(true);
  109.  
  110.                 handIsVisible = true;
  111.  
  112.             }
  113.            
  114.  
  115.             Animal animal = selectionTransform.GetComponent<Animal>();
  116.  
  117.             if (animal && animal.playerInRange)
  118.             {
  119.                 if (animal.isDead)
  120.                 {
  121.                     interaction_text.text = "Loot";
  122.                     interaction_Info_UI.SetActive(true);
  123.  
  124.                     centerDotImage.gameObject.SetActive(false);
  125.                     handIcon.gameObject.SetActive(true);
  126.  
  127.                     handIsVisible = true;
  128.  
  129.                     if (Input.GetMouseButtonDown(0))
  130.                     {
  131.                         Lootable lootable = animal.GetComponent<Lootable>();
  132.                         Loot(lootable);
  133.                     }
  134.                 }
  135.                 else
  136.                 {
  137.                     interaction_text.text = animal.animalName;
  138.                     interaction_Info_UI.SetActive(true);
  139.  
  140.                     centerDotImage.gameObject.SetActive(true);
  141.                     handIcon.gameObject.SetActive(false);
  142.  
  143.                     handIsVisible = false;
  144.  
  145.                     if (Input.GetMouseButtonDown(0) && EquipSystem.Instance.IsHoldingWeapon() && EquipSystem.Instance.IsThereASwingLock() == false)
  146.                     {
  147.                         StartCoroutine(DealDamageTo(animal, 0.3f, EquipSystem.Instance.GetWeaponDamage()));
  148.                     }
  149.                 }
  150.             }
  151.            
  152.  
  153.             if (!interactable && !animal)
  154.             {
  155.                 onTarget = false;
  156.                 handIsVisible = false;
  157.  
  158.                 centerDotImage.gameObject.SetActive(true);
  159.                 handIcon.gameObject.SetActive(false);
  160.             }
  161.  
  162.             if (!npc && !interactable && !animal && !choppableTree)
  163.             {
  164.                 interaction_text.text = "";
  165.                 interaction_Info_UI.SetActive(false);
  166.             }
  167.  
  168.  
  169.         }
  170.        
  171.  
  172.  
  173.     }
  174.  
  175.     private void Loot(Lootable lootable)
  176.     {
  177.         if (lootable.wasLootCalculated == false)
  178.         {
  179.             List<LootReceived> receivedLoot = new List<LootReceived>();
  180.  
  181.             foreach (LootPossibility loot in lootable.possibleLoot)
  182.             {
  183.                 var lootAmount = UnityEngine.Random.Range(loot.amountMin, loot.amountMax+1);
  184.                 if (lootAmount > 0)
  185.                 {
  186.                     LootReceived lt = new LootReceived();
  187.                     lt.item = loot.item;
  188.                     lt.amount = lootAmount;
  189.  
  190.                     receivedLoot.Add(lt);
  191.                 }
  192.             }
  193.  
  194.             lootable.finalLoot = receivedLoot;
  195.             lootable.wasLootCalculated = true;
  196.  
  197.         }
  198.  
  199.         // Spawning the loot on the ground
  200.         Vector3 lootSpawnPostition = lootable.gameObject.transform.position;
  201.  
  202.         foreach (LootReceived lootReceived in lootable.finalLoot)
  203.         {
  204.             for (int i = 0; i < lootReceived.amount; i++)
  205.             {
  206.                 GameObject lootSpawn = Instantiate(Resources.Load<GameObject>(lootReceived.item.name + "_Model"),
  207.                     new Vector3(lootSpawnPostition.x, lootSpawnPostition.y+0.2f, lootSpawnPostition.z),
  208.                     Quaternion.Euler(0,0,0));
  209.             }
  210.         }
  211.  
  212.         // if we want the blood puddle to stay on the ground
  213.  
  214.         if (lootable.GetComponent<Animal>())
  215.         {
  216.             lootable.GetComponent<Animal>().bloodPuddle.transform.SetParent(lootable.transform.parent);
  217.         }
  218.  
  219.         // Destroy Looted body
  220.         Destroy(lootable.gameObject);
  221.        
  222.         //if (chest){don't destroy }
  223.  
  224.     }
  225.  
  226.  
  227.  
  228.  
  229.  
  230.     IEnumerator DealDamageTo(Animal animal, float delay, int damage)
  231.     {
  232.         yield return new WaitForSeconds(delay);
  233.  
  234.         animal.TakeDamage(damage);
  235.     }
  236.  
  237.     public void DisableSelection()
  238.     {
  239.         handIcon.enabled = false;
  240.         centerDotImage.enabled = false;
  241.         interaction_Info_UI.SetActive(false);
  242.         selectedObject = null;
  243.     }
  244.  
  245.     public void EnableSelection()
  246.     {
  247.         handIcon.enabled = true;
  248.         centerDotImage.enabled = true;
  249.         interaction_Info_UI.SetActive(true);
  250.  
  251.     }
  252.  
  253.  
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement