using AX.MessageSystem; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; [RequireComponent(typeof(CloneGameObjInfo))] public class ArrowScaleControl : MonoBehaviour { private DateTime t1; private DateTime t2; public long gameObjID; public CloneObjType gameObjType; private void Awake() { gameObjID = GetComponent().gameObjID; gameObjType = GetComponent().gameObjType; MessageDispatcher.AddListener("ArrowSizeChange", ChangeSize); //MessageDispatcher.AddListener("ReplayEvent", ExecuteEvent); } private void OnDestroy() { MessageDispatcher.RemoveListener("ArrowSizeChange", ChangeSize); //MessageDispatcher.RemoveListener("ReplayEvent", ExecuteEvent); } protected virtual void OnMouseDown() { if (!EventSystem.current.IsPointerOverGameObject()) { t2 = DateTime.Now; if (t2 - t1 < new TimeSpan(0, 0, 0, 0, 500)) { StartCoroutine(OpenAttributePanel()); } t1 = t2; } } IEnumerator OpenAttributePanel() { yield return new WaitForSeconds(0.1f); ArrowScalePanel.Instance.OpenPanel(this.gameObjID, getCurrentSacle()); } private float getCurrentSacle() { float value = 0; float ori = 0; var cloneType = GetComponent().gameObjType; switch (cloneType) { case CloneObjType.AttackLine: ori = 35; break; case CloneObjType.EvacuateLine: ori = 35; break; case CloneObjType.BrokenLine: ori = 1; break; case CloneObjType.BlockLine: ori = 1; break; default: break; } float c = transform.localScale.x; value = c / ori - 1; return value; } void ChangeSize(IMessage obj) { var data = (ArrowSizeData)obj.Data; if (data.id == this.gameObjID) { var cloneType = GetComponent().gameObjType; float ori = 0; switch (cloneType) { case CloneObjType.AttackLine: ori = 35; break; case CloneObjType.EvacuateLine: ori = 35; break; case CloneObjType.BrokenLine: ori = 1; break; case CloneObjType.BlockLine: ori = 1; break; default: break; } transform.localScale = Vector3.one * ori * (1 + data.value); } } } [Serializable] public class RecordArrowSize { public long gameObjID; public float sizeValue; }