Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- public class EquipmentManager : MonoBehaviour
- {
- [SerializeField] Transform equipmentSlotsParent;
- public EquipmentSlot[] equipmentSlots;
- [SerializeField] SkinnedMeshRenderer[] currentMeshes;
- public EquipmentHelper equipmentHelper;
- public event Action<BaseItemSlot> OnPointerEnterEvent;
- public event Action<BaseItemSlot> OnPointerExitEvent;
- public event Action<BaseItemSlot> OnRightClickEvent;
- public event Action<BaseItemSlot> OnBeginDragEvent;
- public event Action<BaseItemSlot> OnEndDragEvent;
- public event Action<BaseItemSlot> OnDragEvent;
- public event Action<BaseItemSlot> OnDropEvent;
- public SkinnedMeshRenderer targetMesh;
- public int removedEquipmentIndex;
- private void Start()
- {
- for (int i = 0; i < equipmentSlots.Length; i++)
- {
- equipmentSlots[i].OnPointerEnterEvent += slot => OnPointerEnterEvent(slot);
- equipmentSlots[i].OnPointerExitEvent += slot => OnPointerExitEvent(slot);
- equipmentSlots[i].OnRightClickEvent += slot => OnRightClickEvent(slot);
- equipmentSlots[i].OnBeginDragEvent += slot => OnBeginDragEvent(slot);
- equipmentSlots[i].OnEndDragEvent += slot => OnEndDragEvent(slot);
- equipmentSlots[i].OnDragEvent += slot => OnDragEvent(slot);
- equipmentSlots[i].OnDropEvent += slot => OnDropEvent(slot);
- }
- }
- private void OnValidate()
- {
- equipmentSlots = equipmentSlotsParent.GetComponentsInChildren<EquipmentSlot>();
- var numSlots = Enum.GetNames(typeof(EquipmentType)).Length;
- currentMeshes = new SkinnedMeshRenderer[numSlots];
- }
- public bool AddItem(EquippableItem item, out EquippableItem previousItem)
- {
- for (int i = 0; i < equipmentSlots.Length; i++)
- {
- if (equipmentSlots[i].EquipmentType == item.EquipmentType)
- {
- previousItem = (EquippableItem)equipmentSlots[i].Item;
- equipmentSlots[i].Item = item;
- equipmentSlots[i].Amount = 1;
- UpdateMesh(item, i);
- return true;
- }
- }
- previousItem = null;
- return false;
- }
- public bool RemoveItem(EquippableItem item)
- {
- Debug.Log("Remove Called");
- for (int i = 0; i < equipmentSlots.Length; i++)
- {
- var itemToDiscard = equipmentHelper.equipmentSlotMeshObject[i];
- if (equipmentSlots[i].Item == item)
- {
- equipmentSlots[i].Item = null;
- equipmentSlots[i].Amount = 0;
- DisposeOldMesh(itemToDiscard);
- SetEquipmentBlendShapes(item, 0);
- removedEquipmentIndex = i;
- return true;
- }
- }
- return false;
- }
- public void UpdateMesh(EquippableItem item, int slotIndex)
- {
- if (item.mesh != null)
- {
- SkinnedMeshRenderer newMesh = Instantiate<SkinnedMeshRenderer>(item.mesh);
- newMesh.transform.parent = targetMesh.transform;
- SetEquipmentBlendShapes(item, 100);
- newMesh.bones = targetMesh.bones;
- newMesh.rootBone = targetMesh.rootBone;
- currentMeshes[slotIndex] = newMesh;
- equipmentHelper.equipmentSlotMeshObject[slotIndex] = newMesh.gameObject;
- }
- }
- public void DisposeOldMesh(GameObject oldItem)
- {
- if (oldItem != null)
- {
- Destroy(oldItem);
- }
- }
- void SetEquipmentBlendShapes(EquippableItem item, int weight)
- {
- foreach (EquipmentMeshRegion blendShape in item.coveredMeshRegions)
- {
- targetMesh.SetBlendShapeWeight((int)blendShape, weight);
- }
- }
- public int EquipmentSlotIndex(EquipmentSlot equipSlot)
- {
- for (int i = 0; i < equipmentSlots.Length; i++)
- {
- if (equipmentSlots[i] == equipSlot)
- {
- return i;
- }
- }
- return -1;
- }
- public int EquipmentSlotIndex(EquipmentType equipSlot)
- {
- for (int i = 0; i < equipmentSlots.Length; i++)
- {
- if (equipmentSlots[i].EquipmentType == equipSlot)
- {
- return i;
- }
- }
- return -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement