//鼠标在节点内移动 public void OnMouseMoved(NodeItem _node) { BattleNodeMgr.instance.OnMouseMoved(_node.GetComponent <NodeItem_Battle>()); }
public override void OnNodeUnhovered(NodeItem _node) { BattleNodeMgr.instance.OnNodeUnhovered(_node.GetComponent <NodeItem_Battle>()); }
//鼠标移动 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(); } } }