using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class BlockSlot : MonoBehaviour { public BlockUnit MyUnit => mUnit; public bool HasUnit => mUnit != null; public int Index => mIndex; private Action mDelPickUp; private Action mDelMove; private Action mDelDrowDown; [SerializeField] MeshRenderer mRdrFloor; private BoxCollider mCol; private BlockUnit mUnit; private int mIndex; private void Awake() { mUnit = GetComponentInChildren(); } public void Init(int pIndex, Action pDelPickUp = null, Action pDelMove = null, Action pDelDropDown = null) { if (mCol == null) { mCol = GetComponent(); } mIndex = pIndex; SetDelegate(pDelPickUp, pDelMove, pDelDropDown); SetState(BlockState.Normal); } public void SetDelegate(Action pDelPickUp = null, Action pDelMove = null, Action pDelDropDown = null) { mDelPickUp = pDelPickUp; mDelMove = pDelMove; mDelDrowDown = pDelDropDown; mCol.enabled = mDelPickUp != null; } public void ShowFloor(bool pShow) { mRdrFloor.enabled = pShow; } public void SetUnit(BlockUnit pUnit) { mUnit = pUnit; if (mUnit != null) { mUnit.SetGroupID(mIndex); mUnit.transform.SetParent(transform); Utils.NormalizeGameObject(mUnit.gameObject); } } public void SetState(BlockState pState) { mRdrFloor.gameObject.SetActive(pState != BlockState.Normal); Material tMat = ResourceManager.Instance.LoadRes(Const.Path.GetBlockMat(pState)); mRdrFloor.material = tMat; } private void OnMouseDown() { mDelPickUp?.Invoke(mIndex); } private void OnMouseDrag() { mDelMove?.Invoke(mIndex); } private void OnMouseUp() { mDelDrowDown?.Invoke(mIndex); } } public enum BlockState { Normal, Picked, Movable, Mergable, Forbidden }