Advertisement
evelynshilosky

SelectionManager - Part 35

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