Advertisement
evelynshilosky

SelectionManager - Part 39

Apr 18th, 2024
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.21 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.                 else if (soil.isEmpty)
  222.                 {
  223.                     interaction_text.text = "Soil";
  224.                     interaction_Info_UI.SetActive(true);
  225.                 }
  226.                 else
  227.                 {
  228.                     if (EquipSystem.Instance.IsPlayerHoldingWateringCan())
  229.                     {
  230.                         if (soil.currentPlant.isWatered)
  231.                         {
  232.                             interaction_text.text = soil.plantName;
  233.                             interaction_Info_UI.SetActive(true);
  234.                         }
  235.                         else
  236.                         {
  237.                             interaction_text.text = "Use Watering Can";
  238.                             interaction_Info_UI.SetActive(true);
  239.  
  240.                             if (Input.GetMouseButtonDown(0))
  241.                             {
  242.  
  243.                                 SoundManager.Instance.wateringChannel.PlayOneShot(SoundManager.Instance.wateringCan);
  244.  
  245.  
  246.                                 soil.currentPlant.isWatered = true;
  247.                                 soil.MakeSoilWatered();
  248.                                 //SoundManager.Instance.wateringChannel.Stop();
  249.                             }
  250.                         }
  251.  
  252.  
  253.  
  254.                     }
  255.                     else
  256.                     {
  257.                         interaction_text.text = soil.plantName;
  258.                         interaction_Info_UI.SetActive(true);
  259.                     }
  260.  
  261.                 }
  262.  
  263.                 selectedSoil = soil.gameObject;
  264.  
  265.             }
  266.             else
  267.             {
  268.                 if (selectedSoil != null)
  269.                 {
  270.                     selectedSoil = null;
  271.                 }
  272.             }
  273.  
  274.  
  275.             if (!interactable && !animal)
  276.             {
  277.                 onTarget = false;
  278.                 handIsVisible = false;
  279.  
  280.                 centerDotImage.gameObject.SetActive(true);
  281.                 handIcon.gameObject.SetActive(false);
  282.             }
  283.  
  284.             if (!npc && !interactable && !animal && !choppableTree && !storageBox && !campfire && !soil)
  285.             {
  286.                 interaction_text.text = "";
  287.                 interaction_Info_UI.SetActive(false);
  288.             }
  289.  
  290.  
  291.         }
  292.     }
  293.  
  294.     private void Loot(Lootable lootable)
  295.     {
  296.         if (lootable.wasLootCalculated == false)
  297.         {
  298.             List<LootReceived> receivedLoot = new List<LootReceived>();
  299.  
  300.             foreach (LootPossibility loot in lootable.possibleLoot)
  301.             {
  302.                 var lootAmount = UnityEngine.Random.Range(loot.amountMin, loot.amountMax+1);
  303.                 if (lootAmount > 0)
  304.                 {
  305.                     LootReceived lt = new LootReceived();
  306.                     lt.item = loot.item;
  307.                     lt.amount = lootAmount;
  308.  
  309.                     receivedLoot.Add(lt);
  310.                 }
  311.             }
  312.  
  313.             lootable.finalLoot = receivedLoot;
  314.             lootable.wasLootCalculated = true;
  315.  
  316.         }
  317.  
  318.         // Spawning the loot on the ground
  319.         Vector3 lootSpawnPostition = lootable.gameObject.transform.position;
  320.  
  321.         foreach (LootReceived lootReceived in lootable.finalLoot)
  322.         {
  323.             for (int i = 0; i < lootReceived.amount; i++)
  324.             {
  325.                 GameObject lootSpawn = Instantiate(Resources.Load<GameObject>(lootReceived.item.name + "_Model"),
  326.                     new Vector3(lootSpawnPostition.x, lootSpawnPostition.y+0.2f, lootSpawnPostition.z),
  327.                     Quaternion.Euler(0,0,0));
  328.             }
  329.         }
  330.  
  331.         // if we want the blood puddle to stay on the ground
  332.  
  333.         if (lootable.GetComponent<Animal>())
  334.         {
  335.             lootable.GetComponent<Animal>().bloodPuddle.transform.SetParent(lootable.transform.parent);
  336.         }
  337.  
  338.         // Destroy Looted body
  339.         Destroy(lootable.gameObject);
  340.        
  341.         //if (chest){don't destroy }
  342.  
  343.     }
  344.  
  345.  
  346.  
  347.  
  348.  
  349.     IEnumerator DealDamageTo(Animal animal, float delay, int damage)
  350.     {
  351.         yield return new WaitForSeconds(delay);
  352.  
  353.         animal.TakeDamage(damage);
  354.     }
  355.  
  356.     public void DisableSelection()
  357.     {
  358.         handIcon.enabled = false;
  359.         centerDotImage.enabled = false;
  360.         interaction_Info_UI.SetActive(false);
  361.         selectedObject = null;
  362.     }
  363.  
  364.     public void EnableSelection()
  365.     {
  366.         handIcon.enabled = true;
  367.         centerDotImage.enabled = true;
  368.         interaction_Info_UI.SetActive(true);
  369.  
  370.     }
  371.  
  372.  
  373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement