Example #1
0
        /** 使用--开始创建技能效果(操作完成) */
        public void OnUse()
        {
            operatoring  = false;
            operateState = SkillOperateState.Empty;

            War.skillCreater.OnUse(this);
            War.signal.SkillUse(this);
        }
Example #2
0
        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);
        }
Example #4
0
//		/** 使用--开始进入操作步骤 */
//		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();
        }