Advertisement
evelynshilosky

SelectionManager - Part 37

Apr 18th, 2024
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.10 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.     public GameObject selectedSoil;
  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.  
  41.             Destroy(gameObject);
  42.  
  43.         }
  44.         else
  45.         {
  46.             Instance = this;
  47.         }
  48.     }
  49.  
  50.  
  51.     void Update()
  52.     {
  53.         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  54.         RaycastHit hit;
  55.         if (Physics.Raycast(ray, out hit))
  56.         {
  57.             var selectionTransform = hit.transform;
  58.  
  59.            
  60.             NPC npc = selectionTransform.GetComponent<NPC>();
  61.  
  62.             if (npc && npc.playerInRange)
  63.             {
  64.                 interaction_text.text = "Press \"E\" to Talk";
  65.                 interaction_Info_UI.SetActive(true);
  66.  
  67.                 if (Input.GetKeyDown(KeyCode.E) && npc.isTalkingWithPlayer == false)
  68.                 {
  69.                     npc.StartConversation();
  70.                 }
  71.  
  72.                 if (DialogueSystem.Instance.dialogueUIActive)
  73.                 {
  74.                     interaction_Info_UI.SetActive(false);
  75.                     centerDotImage.gameObject.SetActive(false);
  76.                 }
  77.             }
  78.  
  79.             ChoppableTree choppableTree = selectionTransform.GetComponent<ChoppableTree>();
  80.  
  81.             if (choppableTree && choppableTree.playerInRange)
  82.             {
  83.                 choppableTree.canBeChopped = true;
  84.                 selectedTree = choppableTree.gameObject;
  85.                 chopHolder.gameObject.SetActive(true);
  86.  
  87.             }
  88.             else
  89.             {
  90.                 if (selectedTree != null)
  91.                 {
  92.                     selectedTree.gameObject.GetComponent<ChoppableTree>().canBeChopped = false;
  93.                     selectedTree = null;
  94.                     chopHolder.gameObject.SetActive(false);
  95.                 }
  96.             }
  97.  
  98.             InteractableObject interactable = selectionTransform.GetComponent<InteractableObject>();
  99.  
  100.             if (interactable && interactable.playerInRange)
  101.             {
  102.  
  103.                 onTarget = true;
  104.                 selectedObject = interactable.gameObject;
  105.                 interaction_text.text = interactable.GetItemName();
  106.                 interaction_Info_UI.SetActive(true);
  107.  
  108.                 centerDotImage.gameObject.SetActive(false);
  109.                 handIcon.gameObject.SetActive(true);
  110.  
  111.                 handIsVisible = true;
  112.  
  113.             }
  114.  
  115.             StorageBox storageBox = selectionTransform.GetComponent<StorageBox>();
  116.  
  117.             if (storageBox && storageBox.playerInRange && PlacementSystem.Instance.inPlacementMode == false)
  118.             {
  119.                 interaction_text.text = "Open";
  120.                 interaction_Info_UI.SetActive(true);
  121.  
  122.                 selectedStorageBox = storageBox.gameObject;
  123.  
  124.                 if (Input.GetMouseButtonDown(0))
  125.                 {
  126.                     StorageManager.Instance.OpenBox(storageBox);
  127.                 }
  128.             }
  129.             else
  130.             {
  131.                 if (selectedStorageBox != null)
  132.                 {
  133.                     selectedStorageBox = null;
  134.                 }
  135.             }
  136.  
  137.  
  138.             Campfire campfire = selectionTransform.GetComponent<Campfire>();
  139.  
  140.             if (campfire && campfire.playerInRange && PlacementSystem.Instance.inPlacementMode == false)
  141.             {
  142.                 interaction_text.text = "Interact";
  143.                 interaction_Info_UI.SetActive(true);
  144.  
  145.                 selectedCampfire = campfire.gameObject;
  146.  
  147.                 if (Input.GetMouseButtonDown(0) && campfire.isCooking == false)
  148.                 {
  149.                     campfire.OpenUI();
  150.                 }
  151.             }
  152.             else
  153.             {
  154.                 if (selectedCampfire != null)
  155.                 {
  156.                     selectedCampfire = null;
  157.                 }
  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.             Soil soil = selectionTransform.GetComponent<Soil>();
  201.  
  202.             if (soil && soil.playerInRange)
  203.             {
  204.                 if (soil.isEmpty && EquipSystem.Instance.IsPlayerHoldingSeed())
  205.                 {
  206.                     string seedName = EquipSystem.Instance.selectedItem.GetComponent<InventoryItem>().thisName;
  207.                     string onlyPlantName = seedName.Split(new string[] {" Seed"}, StringSplitOptions.None)[0];
  208.  
  209.  
  210.                     interaction_text.text = "Plant" + onlyPlantName;
  211.                     interaction_Info_UI.SetActive(true);
  212.  
  213.                     if (Input.GetMouseButtonDown(0))
  214.                     {
  215.                         soil.PlantSeed();
  216.                         Destroy(EquipSystem.Instance.selectedItem);
  217.                         Destroy(EquipSystem.Instance.selectedItemModel);
  218.                     }
  219.  
  220.  
  221.                 }
  222.                 else if (soil.isEmpty)
  223.                 {
  224.                     interaction_text.text = "Soil";
  225.                     interaction_Info_UI.SetActive(true);
  226.                 }
  227.                 else
  228.                 {
  229.                     interaction_text.text = soil.plantName;
  230.                     interaction_Info_UI.SetActive(true);
  231.                 }
  232.  
  233.                 selectedSoil = soil.gameObject;
  234.  
  235.             }
  236.             else
  237.             {
  238.                 if (selectedSoil != null)
  239.                 {
  240.                     selectedSoil = null;
  241.                 }
  242.             }
  243.  
  244.  
  245.             if (!interactable && !animal)
  246.             {
  247.                 onTarget = false;
  248.                 handIsVisible = false;
  249.  
  250.                 centerDotImage.gameObject.SetActive(true);
  251.                 handIcon.gameObject.SetActive(false);
  252.             }
  253.  
  254.             if (!npc && !interactable && !animal && !choppableTree && !storageBox && !campfire && !soil)
  255.             {
  256.                 interaction_text.text = "";
  257.                 interaction_Info_UI.SetActive(false);
  258.             }
  259.  
  260.  
  261.         }
  262.     }
  263.  
  264.     private void Loot(Lootable lootable)
  265.     {
  266.         if (lootable.wasLootCalculated == false)
  267.         {
  268.             List<LootReceived> receivedLoot = new List<LootReceived>();
  269.  
  270.             foreach (LootPossibility loot in lootable.possibleLoot)
  271.             {
  272.                 var lootAmount = UnityEngine.Random.Range(loot.amountMin, loot.amountMax+1);
  273.                 if (lootAmount > 0)
  274.                 {
  275.                     LootReceived lt = new LootReceived();
  276.                     lt.item = loot.item;
  277.                     lt.amount = lootAmount;
  278.  
  279.                     receivedLoot.Add(lt);
  280.                 }
  281.             }
  282.  
  283.             lootable.finalLoot = receivedLoot;
  284.             lootable.wasLootCalculated = true;
  285.  
  286.         }
  287.  
  288.         // Spawning the loot on the ground
  289.         Vector3 lootSpawnPostition = lootable.gameObject.transform.position;
  290.  
  291.         foreach (LootReceived lootReceived in lootable.finalLoot)
  292.         {
  293.             for (int i = 0; i < lootReceived.amount; i++)
  294.             {
  295.                 GameObject lootSpawn = Instantiate(Resources.Load<GameObject>(lootReceived.item.name + "_Model"),
  296.                     new Vector3(lootSpawnPostition.x, lootSpawnPostition.y+0.2f, lootSpawnPostition.z),
  297.                     Quaternion.Euler(0,0,0));
  298.             }
  299.         }
  300.  
  301.         // if we want the blood puddle to stay on the ground
  302.  
  303.         if (lootable.GetComponent<Animal>())
  304.         {
  305.             lootable.GetComponent<Animal>().bloodPuddle.transform.SetParent(lootable.transform.parent);
  306.         }
  307.  
  308.         // Destroy Looted body
  309.         Destroy(lootable.gameObject);
  310.        
  311.         //if (chest){don't destroy }
  312.  
  313.     }
  314.  
  315.  
  316.  
  317.  
  318.  
  319.     IEnumerator DealDamageTo(Animal animal, float delay, int damage)
  320.     {
  321.         yield return new WaitForSeconds(delay);
  322.  
  323.         animal.TakeDamage(damage);
  324.     }
  325.  
  326.     public void DisableSelection()
  327.     {
  328.         handIcon.enabled = false;
  329.         centerDotImage.enabled = false;
  330.         interaction_Info_UI.SetActive(false);
  331.         selectedObject = null;
  332.     }
  333.  
  334.     public void EnableSelection()
  335.     {
  336.         handIcon.enabled = true;
  337.         centerDotImage.enabled = true;
  338.         interaction_Info_UI.SetActive(true);
  339.  
  340.     }
  341.  
  342.  
  343. }
  344.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement