Esempio n. 1
0
 //鼠标在节点内移动
 public void OnMouseMoved(NodeItem _node)
 {
     BattleNodeMgr.instance.OnMouseMoved(_node.GetComponent <NodeItem_Battle>());
 }
Esempio n. 2
0
 public override void OnNodeUnhovered(NodeItem _node)
 {
     BattleNodeMgr.instance.OnNodeUnhovered(_node.GetComponent <NodeItem_Battle>());
 }
Esempio n. 3
0
    //鼠标移动
    public void OnMouseMoved(NodeItem_Battle _node)
    {
        //右键点击
        if (Input.GetMouseButtonDown(1))
        {
            if (_node.nodeObject != null &&
                _node.nodeObject.nodeObjectType == NodeObjectType.unit)
            {
                //显示并更新单位信息面板
                BattleManager.instance.panel_unitInfo.Set(_node.unit);
                //移动单位面板到鼠标位置
                Vector3 pos = BattleManager.instance.cam.ScreenToWorldPoint(Input.mousePosition);
                pos.z = 0;
                BattleManager.instance.panel_unitInfo.transform.position = pos;
            }

            return;
        }
        //右键起
        if (Input.GetMouseButtonUp(1))
        {
            //隐藏单位信息面板
            BattleManager.instance.panel_unitInfo.Quit();

            return;
        }

        //判断玩家是当前行动者,可能有问题
        //if (BattleManager.players[BattleManager.currentActionUnit.side] != GameManager.player)
        //return;

        //不响应鼠标小范围移动
        if (Vector3.Distance(Input.mousePosition, lastMousePos) < mouseMoveSensitivity)
        {
            return;
        }
        else
        {
            lastMousePos = Input.mousePosition;
        }

        //if可攻击
        if (_node.battleNodeType == BattleNodeType.attackable)
        {
            //如果是远程攻击,直接跳过
            if (BattleManager.currentActionUnit.IsRangeAttack)
            {
                return;
            }

            Vector2 mousePoint = BattleManager.instance.cam.ScreenToWorldPoint(Input.mousePosition);
            Vector3 dir        = mousePoint - (Vector2)_node.transform.position;
            dir.y -= 0.9f;
            //计算鼠标和节点角度
            float angle;
            if (dir.x > 0)
            {
                angle = Vector3.Angle(dir, Vector3.up);
            }
            else
            {
                angle = 360 - Vector3.Angle(dir, Vector3.up);
            }
            //计算箭头角度
            int arrowIndex = (int)angle / 60;

            //攻击方向上的格子存在,且可到达便可发起攻击。或者直接就是当前单位所在格子
            targetNode = BattleManager.instance.map.GetNearbyNodeItem(_node, arrowIndex);

            if (targetNode != null &&
                (targetNode.GetComponent <NodeItem_Battle>().battleNodeType == BattleNodeType.reachable ||
                 targetNode.nodeObject == BattleManager.currentActionUnit))
            {
                //根据角度显示攻击箭头
                int arrowAngle      = (arrowIndex * 60 + 210) % 360;
                int arrowAngleFixed = 360 - arrowAngle;

                CursorManager.instance.ChangeCursor("sword");
                CursorManager.instance.ChangeCursorAngle(arrowAngleFixed);

                //攻击方向上的节点不是当前行动单位,否则直接攻击无需寻路
                if (targetNode.nodeObject != BattleManager.currentActionUnit)
                {
                    //是近战单位则显示路径
                    if (BattleManager.currentActionUnit.isWalker)
                    {
                        FindPath(BattleManager.currentActionUnit, targetNode);
                    }
                }
            }
            else
            {
                CursorManager.instance.ChangeCursor("enemy");
                CursorManager.instance.ChangeCursorAngle();
            }
        }
    }