/** 使用--开始创建技能效果(操作完成) */ public void OnUse() { operatoring = false; operateState = SkillOperateState.Empty; War.skillCreater.OnUse(this); War.signal.SkillUse(this); }
public void SetUse() { operatoring = false; operateState = SkillOperateState.Empty; War.skillCreater.SetUse(this); if (sSetUse != null) { sSetUse(this); } }
/** 鼠标--按下 */ public void OnPointerDown(PointerEventData eventData) { initPosition = rectTransform.position; // Debug.Log("OnPointerDown"); if (!interactable) { return; } _downState = data.operateState; data.operatoring = true; War.skillOperateSelect.SetSelect(this); }
// /** 使用--开始进入操作步骤 */ // public void Use() // { // War.skillUse.UseSkill(this); // } /** 取消技能操作 */ public void CancelOperator() { operatoring = false; if (operateState != SkillOperateState.Empty) { operateState = SkillOperateState.Normal; } foreach (OperateAction action in operatorList.ToArray()) { action.Cancel(); } }
void Update() { if (this.data != null) { if (state != this.data.operateState) { state = data.operateState; switch (this.data.operateState) { case SkillOperateState.Empty: EmptyState(); break; case SkillOperateState.Normal: CancelDrag(false); NormalState(); break; case SkillOperateState.Selected: SelectedState(); break; case SkillOperateState.Drag_Button: DragButtonState(); break; case SkillOperateState.Drag_Object: DragObjectState(); break; } } if (_operatoring != data.operatoring) { _operatoring = data.operatoring; if (_operatoring) { BeginShowOperateHelp(); } else { EndShowOperateHelp(); } } interactable = Guide.warConfig.GetEnableSkillSkillId(data.skillId); } else { if (state != SkillOperateState.Empty) { state = SkillOperateState.Empty; EmptyState(); } } if (_state != state) { _state = state; if (_state == SkillOperateState.Empty) { if (data != null) { data.sSetUse -= SetUse; } data = null; } } }
/** 鼠标--拖动 */ public void OnDragHandler() { // Debug.Log("SkillOperateController OnDragHandler _isDrag=" + _isDrag); if (!interactable) { return; } ClearSelectCacheList(); rectTransform.anchoredPosition = Input.mousePosition * rate; SkillOperateState operateState = SkillOperateState.Drag_Object; Ray ray = uiCamera.ScreenPointToRay(Input.mousePosition); RaycastHit2D hit2D = Physics2D.Raycast(ray.origin, ray.direction); if (hit2D.collider != null) { //如果射线检测到的gameobject为grid,就把当前Panel放在grid节点下 if (hit2D.collider.gameObject == buttonStateRect) { operateState = SkillOperateState.Drag_Button; } } if (data.skillConfig.operate == SkillOperateType.SelectUnit || data.skillConfig.operate == SkillOperateType.SelectCircle) { scaleNode.localScale = Vector3.one * Mathf.Lerp(1, 0f, operateState == SkillOperateState.Drag_Button ? Mathf.Abs(rectTransform.position.y - initPosition.y) / 2.5f : 1f); } else { scaleNode.localScale = Vector3.one * Mathf.Lerp(1, 0.5f, operateState == SkillOperateState.Drag_Button ? Mathf.Abs(rectTransform.position.y - initPosition.y) / 2.5f : 1f); } skillInfoNode.Visiable = operateState == SkillOperateState.Drag_Object; if (bezierArrow.useing) { if (data.operateState != operateState) { bezierArrow.Visiable = operateState == SkillOperateState.Drag_Object; } } data.operateState = operateState; bool hasTarget = true; if (data.skillConfig.operate == SkillOperateType.SelectUnit) { hasTarget = data.candidateReceiveCount > 0; } skillInfoNode.HasTarget = hasTarget; bool isSnap = data.skillConfig.operate == SkillOperateType.SelectUnit; RaycastHit hit3d; ray = Camera.main.ScreenPointToRay(Input.mousePosition); data.candidateEntity = null; if (isSnap && War.config.skillSnap && data.operateState == SkillOperateState.Drag_Object) { if (Physics.Raycast(ray, out hit3d, maxDistance, groundLayer.value)) { Vector3 hitPoint = hit3d.point.SetY(0F); float minDistance = float.MaxValue; UnitCtl minEntity = null; for (int i = 0; i < data.candidateReceiveList.Count; i++) { UnitCtl entity = data.candidateReceiveList [i]; float distance = Vector3.Distance(hitPoint, entity.transform.position); if (distance < minDistance) { minDistance = distance; minEntity = entity; } } data.candidateEntity = minEntity; } } else { if (isSnap) { if (Physics.Raycast(ray, out hit3d, maxDistance, unitLayer.value)) { UnitCtl entity = hit3d.collider.gameObject.GetComponent <UnitCtl> (); if (entity != null && data.EnableUse(entity)) { data.candidateEntity = entity; } } } else if (data.skillConfig.operate == SkillOperateType.SelectCircle) { if (Physics.Raycast(ray, out hit3d, maxDistance, groundLayer.value)) { obj.transform.position = hit3d.point.SetY(0F); List <UnitCtl> entityList = War.scene.SearchUnit(obj.transform.position, data.skillConfig.radius, data.skillConfig.unitType, data.legionId, data.skillConfig.relation); for (int i = 0; i < entityList.Count; i++) { AddSelectCache(entityList[i]); } helpPoint.anchoredPosition = Camera.main.WorldToScreenPoint(obj.transform.position) * rate; } } } if (isSnap) { if (data.candidateEntity != null) { rectTransform.anchoredPosition = Camera.main.WorldToScreenPoint(data.candidateEntity.transform.position) * rate; if (obj != null) { obj.transform.position = data.candidateEntity.transform.position; } AddSelectCache(data.candidateEntity); } else if (obj != null) { if (Physics.Raycast(ray, out hit3d, maxDistance, groundLayer.value)) { obj.transform.position = hit3d.point.SetY(0F); } } helpPoint.anchoredPosition = rectTransform.anchoredPosition; } else { helpPoint.anchoredPosition = rectTransform.anchoredPosition; } // if(obj != null) // { // // if(isSnap && Physics.Raycast(ray, out hit3d, maxDistance, unitLayer.value)) // { // UnitCtl entity = hit3d.collider.gameObject.GetComponent<UnitCtl>(); // if(entity != null && data.EnableUse(entity)) // { // obj.transform.position = hit3d.collider.transform.position; // // // AddSelectCache (entity); // } // // } // else if(Physics.Raycast(ray, out hit3d, maxDistance, groundLayer.value)) // { // obj.transform.position = hit3d.point.SetY(0F); // // // List<UnitCtl> entityList = War.scene.SearchUnit (obj.transform.position, data.skillConfig.radius, data.skillConfig.unitType, data.legionId, data.skillConfig.relation); //// List<UnitCtl> entityList = War.scene.SearchUnit (obj.transform.position, data.skillConfig.radius, 0.USolider(true), data.legionId, 0.REnemy(true)); // // // for(int i = 0; i < entityList.Count; i++) // { // AddSelectCache (entityList[i]); // } // } // // // helpPoint.anchoredPosition = Camera.main.WorldToScreenPoint(obj.transform.position) * rate; // // } // else // { // if(isSnap && Physics.Raycast(ray, out hit3d, maxDistance, unitLayer.value)) // { // UnitCtl entity = hit3d.collider.gameObject.GetComponent<UnitCtl>(); // if(entity != null && data.EnableUse(entity)) // { // rectTransform.anchoredPosition = Camera.main.WorldToScreenPoint(hit3d.collider.transform.position) * rate; // AddSelectCache (entity); // } // } // // helpPoint.anchoredPosition = rectTransform.anchoredPosition; // } if (bezierArrow.useing) { bezierArrow.endAnchor.position = helpPoint.position + new Vector3(0, 0, 5); } SetSelectCacheListEffect(); }