Advertisement
evelynshilosky

SelectionManager - Part 33

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