void Move(Point p) { MapNodePiece target = Map.Instance.getNodeAtPoint(p).getPiece(); if (target.value == 2) { return; } piece.transform.parent = null; Map.Instance.SwitchNodePieceAndValue(piece.index, p); var tmp = target.transform.position; transform.DOMove(target.transform.position, 0.2f).OnComplete(() => { piece.transform.parent = transform; piece.transform.localPosition = Vector3.zero; if (CheckBeside() != null) { attackNode = Map.Instance.getNodeAtPoint(Player.Instance.index).getPiece(); attackNode.transform.localPosition -= Vector3.forward * 1.1f; attackNode.SetColor(Color.red); } }); target.transform.position = piece.transform.position; piece.transform.position = tmp; }
void CloseAttackPiece() { if (attackNode != null) { attackNode.SetColor(Color.white); attackNode.transform.localPosition += Vector3.forward * 1.1f; attackNode = null; } }
void Move(Point p) { MapNodePiece target = Map.Instance.getNodeAtPoint(p).getPiece(); if (target.value == 2) { return; } if (Mathf.Abs(p.x - piece.index.x) == 0) { if (p.y - piece.index.y > 0) { transform.rotation = transform.rotation = Quaternion.Euler(Vector3.forward * 180); } else { transform.rotation = Quaternion.Euler(Vector3.zero); } } else { if (p.x - piece.index.x > 0) { transform.rotation = Quaternion.Euler(Vector3.forward * -90); } else { transform.rotation = Quaternion.Euler(Vector3.forward * 90); } } piece.transform.parent = null; Map.Instance.SwitchNodePieceAndValue(piece.index, p); var tmp = target.transform.position; transform.DOMove(target.transform.position, 0.2f).OnComplete(() => { piece.transform.parent = transform; piece.transform.localPosition = Vector3.zero; if (CheckBeside() != null) { attackNode = Map.Instance.getNodeAtPoint(Player.Instance.index).getPiece(); attackNode.transform.localPosition -= Vector3.forward * 1.1f; attackNode.SetColor(Color.red); } }); target.transform.position = piece.transform.position; piece.transform.position = tmp; }
void MovePath(List <Point> pathList, int index) { MapNodePiece target = Map.Instance.getNodeAtPoint(pathList[index]).getPiece(); if (target.value == 2) { pauseTimes += index; pauseTimes += 1; if (pauseTimes >= moveTimes) { pauseTimes = 0; return; } else { FindTheWay(detectDis, piece.index, Player.Instance.index); FindTheLowestPath(); if (moveList.Count != 0) { MovePath(moveList, 0); } } } if (index >= moveTimes || pathList.IndexOf(pathList[index]) == pathList.Count - 1) { if (CheckBeside() != null) { attackNode = Map.Instance.getNodeAtPoint(Player.Instance.index).getPiece(); attackNode.transform.localPosition -= Vector3.forward; attackNode.SetColor(Color.red); } return; } piece.transform.parent = null; Map.Instance.SwitchNodePieceAndValue(piece.index, pathList[index]); var tmp = target.transform.position; transform.DOMove(target.transform.position, 0.2f).OnComplete(() => { piece.transform.parent = transform; piece.transform.localPosition = Vector3.zero; MovePath(pathList, index + 1); }); target.transform.position = piece.transform.position; piece.transform.position = tmp; }
MapNodePiece ChangeWeakPoint() { if (currentWeakPoint == null) { weakPoints[0].SetColor(Color.yellow); return(weakPoints[0]); } int index = weakPoints.IndexOf(currentWeakPoint); index += 1; if (index >= weakPoints.Count) { index = 0; } weakPoints[index].SetColor(Color.yellow); currentWeakPoint.SetColor(mapPieceColor); return(weakPoints[index]); }
public override void EnemyNeedToDO() { if (dead) { return; } Debug.Log("EnemyAction"); CloseAttackPiece(); if (sprite.color.a == 1 && !hasBeenDetected) { hasBeenDetected = true; oriColor = new Color(oriColor.r, oriColor.g, oriColor.b, 1); } hasAround = false; if (!DetectDistance()) { sprite.color = oriColor; return; } Point dir = CheckBeside(); if (dir != null) { AttackPlayer(); attackNode = Map.Instance.getNodeAtPoint(Player.Instance.index).getPiece(); attackNode.transform.localPosition -= Vector3.forward * 1.1f; attackNode.SetColor(Color.red); hasMove = 0; if (dir.Equals(Point.up)) { transform.rotation = Quaternion.Euler(Vector3.forward * 180); } else if (dir.Equals(Point.down)) { transform.rotation = Quaternion.Euler(Vector3.zero); } else if (dir.Equals(Point.right)) { transform.rotation = Quaternion.Euler(Vector3.forward * -90); } else if (dir.Equals(Point.left)) { transform.rotation = Quaternion.Euler(Vector3.forward * 90); } return; } DetectPlayer(detectDis, piece.index); if (hasAround) { moveList.Clear(); FindTheWay(detectDis, piece.index, Player.Instance.index); FindTheLowestPath(); if (moveList.Count != 0) { Move(moveList[0]); } moveListList.Clear(); sprite.color = Color.red; hasMove += 1; if (hasMove < moveTimes) { StartCoroutine(WaitToDo(0.2f, () => EnemyNeedToDO())); } else { hasMove = 0; } } else { sprite.color = oriColor; } }
public override void EnemyNeedToDO() { if (dead) { return; } CloseAttackPiece(); if (sprite.color.a == 1 && !hasBeenDetected) { hasBeenDetected = true; oriColor = new Color(oriColor.r, oriColor.g, oriColor.b, 1); } hasAround = false; if (!DetectDistance()) { return; } Point dir = CheckBeside(); if (dir != null) { AttackPlayer(); attackNode = Map.Instance.getNodeAtPoint(Player.Instance.index).getPiece(); attackNode.transform.localPosition -= Vector3.forward * 1.1f; attackNode.SetColor(Color.red); return; } DetectPlayer(detectDis, piece.index); if (hasAround) { moveList.Clear(); FindTheWay(detectDis, piece.index, Player.Instance.index); FindTheLowestPath(); if (moveList.Count != 0) { Move(moveList[0]); } moveListList.Clear(); sprite.sprite = changeSprite; hasMove += 1; if (hasMove < moveTimes) { StartCoroutine(WaitToDo(0.2f, () => EnemyNeedToDO())); } else { hasMove = 0; } } else { sprite.sprite = originSprite; } }