Advertisement
Rakshalpha

EquipmentManager

Oct 14th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.37 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3.  
  4. public class EquipmentManager : MonoBehaviour
  5. {
  6.     [SerializeField] Transform equipmentSlotsParent;
  7.     public EquipmentSlot[] equipmentSlots;
  8.     [SerializeField] SkinnedMeshRenderer[] currentMeshes;
  9.     public EquipmentHelper equipmentHelper;
  10.  
  11.     public event Action<BaseItemSlot> OnPointerEnterEvent;
  12.     public event Action<BaseItemSlot> OnPointerExitEvent;
  13.     public event Action<BaseItemSlot> OnRightClickEvent;
  14.     public event Action<BaseItemSlot> OnBeginDragEvent;
  15.     public event Action<BaseItemSlot> OnEndDragEvent;
  16.     public event Action<BaseItemSlot> OnDragEvent;
  17.     public event Action<BaseItemSlot> OnDropEvent;
  18.  
  19.     public SkinnedMeshRenderer targetMesh;
  20.     public int removedEquipmentIndex;
  21.  
  22.     private void Start()
  23.     {
  24.         for (int i = 0; i < equipmentSlots.Length; i++)
  25.         {
  26.             equipmentSlots[i].OnPointerEnterEvent += slot => OnPointerEnterEvent(slot);
  27.             equipmentSlots[i].OnPointerExitEvent += slot => OnPointerExitEvent(slot);
  28.             equipmentSlots[i].OnRightClickEvent += slot => OnRightClickEvent(slot);
  29.             equipmentSlots[i].OnBeginDragEvent += slot => OnBeginDragEvent(slot);
  30.             equipmentSlots[i].OnEndDragEvent += slot => OnEndDragEvent(slot);
  31.             equipmentSlots[i].OnDragEvent += slot => OnDragEvent(slot);
  32.             equipmentSlots[i].OnDropEvent += slot => OnDropEvent(slot);
  33.  
  34.         }
  35.     }
  36.  
  37.     private void OnValidate()
  38.     {
  39.         equipmentSlots = equipmentSlotsParent.GetComponentsInChildren<EquipmentSlot>();
  40.  
  41.         var numSlots = Enum.GetNames(typeof(EquipmentType)).Length;
  42.  
  43.         currentMeshes = new SkinnedMeshRenderer[numSlots];
  44.     }
  45.  
  46.     public bool AddItem(EquippableItem item, out EquippableItem previousItem)
  47.     {
  48.         for (int i = 0; i < equipmentSlots.Length; i++)
  49.         {
  50.             if (equipmentSlots[i].EquipmentType == item.EquipmentType)
  51.             {
  52.                 previousItem = (EquippableItem)equipmentSlots[i].Item;
  53.  
  54.                 equipmentSlots[i].Item = item;
  55.                 equipmentSlots[i].Amount = 1;
  56.                 UpdateMesh(item, i);
  57.                 return true;
  58.             }
  59.         }
  60.         previousItem = null;
  61.         return false;
  62.     }
  63.  
  64.     public bool RemoveItem(EquippableItem item)
  65.     {
  66.         Debug.Log("Remove Called");
  67.         for (int i = 0; i < equipmentSlots.Length; i++)
  68.         {
  69.             var itemToDiscard = equipmentHelper.equipmentSlotMeshObject[i];
  70.             if (equipmentSlots[i].Item == item)
  71.             {
  72.                 equipmentSlots[i].Item = null;
  73.                 equipmentSlots[i].Amount = 0;
  74.                 DisposeOldMesh(itemToDiscard);
  75.                 SetEquipmentBlendShapes(item, 0);
  76.                 removedEquipmentIndex = i;
  77.                 return true;
  78.             }
  79.         }
  80.         return false;
  81.     }
  82.  
  83.     public void UpdateMesh(EquippableItem item, int slotIndex)
  84.     {
  85.         if (item.mesh != null)
  86.         {
  87.             SkinnedMeshRenderer newMesh = Instantiate<SkinnedMeshRenderer>(item.mesh);
  88.             newMesh.transform.parent = targetMesh.transform;
  89.             SetEquipmentBlendShapes(item, 100);
  90.             newMesh.bones = targetMesh.bones;
  91.             newMesh.rootBone = targetMesh.rootBone;
  92.             currentMeshes[slotIndex] = newMesh;
  93.             equipmentHelper.equipmentSlotMeshObject[slotIndex] = newMesh.gameObject;
  94.         }
  95.     }
  96.  
  97.     public void DisposeOldMesh(GameObject oldItem)
  98.     {
  99.         if (oldItem != null)
  100.         {
  101.             Destroy(oldItem);
  102.         }
  103.     }
  104.  
  105.     void SetEquipmentBlendShapes(EquippableItem item, int weight)
  106.     {
  107.         foreach (EquipmentMeshRegion blendShape in item.coveredMeshRegions)
  108.         {
  109.             targetMesh.SetBlendShapeWeight((int)blendShape, weight);
  110.         }
  111.     }
  112.  
  113.     public int EquipmentSlotIndex(EquipmentSlot equipSlot)
  114.     {
  115.         for (int i = 0; i < equipmentSlots.Length; i++)
  116.         {
  117.             if (equipmentSlots[i] == equipSlot)
  118.             {
  119.                 return i;
  120.             }
  121.         }
  122.         return -1;
  123.     }
  124.  
  125.     public int EquipmentSlotIndex(EquipmentType equipSlot)
  126.     {
  127.         for (int i = 0; i < equipmentSlots.Length; i++)
  128.         {
  129.             if (equipmentSlots[i].EquipmentType == equipSlot)
  130.             {
  131.                 return i;
  132.             }
  133.         }
  134.         return -1;
  135.     }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement