| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  | 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<int> mDelPickUp; | 
					
						
							|  |  |  |  |     private Action<int> mDelMove; | 
					
						
							|  |  |  |  |     private Action<int> mDelDrowDown; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     [SerializeField] MeshRenderer mRdrFloor; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private BoxCollider mCol; | 
					
						
							|  |  |  |  |     private BlockUnit mUnit; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private int mIndex; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     private void Awake() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mUnit = GetComponentInChildren<BlockUnit>(); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public void Init(int pIndex, Action<int> pDelPickUp = null, Action<int> pDelMove = null, Action<int> pDelDropDown = null) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         if (mCol == null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mCol = GetComponent<BoxCollider>(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         mIndex = pIndex; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         SetDelegate(pDelPickUp, pDelMove, pDelDropDown); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         SetState(BlockState.Normal); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public void SetDelegate(Action<int> pDelPickUp = null, Action<int> pDelMove = null, Action<int> pDelDropDown = null) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mDelPickUp = pDelPickUp; | 
					
						
							|  |  |  |  |         mDelMove = pDelMove; | 
					
						
							|  |  |  |  |         mDelDrowDown = pDelDropDown; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         mCol.enabled = mDelPickUp != null; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public void ShowFloor(bool pShow) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mRdrFloor.enabled = pShow; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |     public void SetUnit(BlockUnit pUnit, bool pIsDrop = false) | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |     { | 
					
						
							|  |  |  |  |         mUnit = pUnit; | 
					
						
							|  |  |  |  |         if (mUnit != null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mUnit.SetGroupID(mIndex); | 
					
						
							|  |  |  |  |             mUnit.transform.SetParent(transform); | 
					
						
							|  |  |  |  |             Utils.NormalizeGameObject(mUnit.gameObject); | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (pIsDrop) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 GameObject tFx = ResourceManager.Instance.LoadRes<GameObject>(Const.Path.GetDropFxByLevel(mUnit.Level)); | 
					
						
							|  |  |  |  |                 Instantiate(tFx, transform.position, Quaternion.identity); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public void SetState(BlockState pState) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mRdrFloor.gameObject.SetActive(pState != BlockState.Normal); | 
					
						
							|  |  |  |  |         Material tMat = ResourceManager.Instance.LoadRes<Material>(Const.Path.GetBlockMat(pState)); | 
					
						
							|  |  |  |  |         mRdrFloor.material = tMat; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void OnMouseDown() | 
					
						
							|  |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  |         if (!GameConfig.Instance.IsSimpleAni) | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  |             if (mUnit != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 mUnit.SetTrigger(SoldierACTrigger.TriggerPickUp); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  |              | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         mDelPickUp?.Invoke(mIndex); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void OnMouseDrag() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mDelMove?.Invoke(mIndex); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void OnMouseUp() | 
					
						
							|  |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  |         if (!GameConfig.Instance.IsSimpleAni) | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  |             if (mUnit != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 mUnit.SetTrigger(SoldierACTrigger.TriggerPutDown); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-09 15:01:44 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         mDelDrowDown?.Invoke(mIndex); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | public enum BlockState | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     Normal, | 
					
						
							|  |  |  |  |     Picked, | 
					
						
							|  |  |  |  |     Movable, | 
					
						
							|  |  |  |  |     Mergable, | 
					
						
							|  |  |  |  |     Forbidden | 
					
						
							|  |  |  |  | } |