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;
    }
示例#2
0
 void CloseAttackPiece()
 {
     if (attackNode != null)
     {
         attackNode.SetColor(Color.white);
         attackNode.transform.localPosition += Vector3.forward * 1.1f;
         attackNode = null;
     }
 }
示例#3
0
    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;
    }
示例#5
0
    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]);
    }
示例#6
0
    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;
        }
    }