Ejemplo n.º 1
0
        public void PrintOrbState(OrbStatus state)
        {
            switch (state)
            {
            case OrbStatus.AlreadyTaken:
                Console.WriteLine("You already have the OrbStatus of Power!");
                break;

            case OrbStatus.Found:
                Console.WriteLine("You found the OrbStatus of Power!");
                Console.WriteLine("Your attack increases by 5!");
                Console.WriteLine("Your defence increases by 5!");
                break;

            case OrbStatus.North:
            case OrbStatus.South:
            case OrbStatus.East:
            case OrbStatus.West:
            case OrbStatus.NorthEast:
            case OrbStatus.NorthWest:
            case OrbStatus.SouthEast:
            case OrbStatus.SouthWest:
                Console.WriteLine($"You sense that the OrbStatus of Power is to the {state}.");
                break;

            default:
                throw new ArgumentException("Invalid Orb State: " + state);
            }
        }
Ejemplo n.º 2
0
 void OrbSkillReady()
 {
     status = OrbStatus.READY;
     if (showStaffEffect && skill != null && skill.staffEffectPrafab != null)
     {
         staffEffectObj = Instantiate(skill.staffEffectPrafab, caster.GetShootPoint(ShootPointPosition.STAFF));
     }
 }
Ejemplo n.º 3
0
    public void TriggerSkill(GameObject triggeredObject, ContactPoint contactPoint)
    {
        status = OrbStatus.TRIGGERED;
        this.triggeredObject = triggeredObject;
        this.contactPoint    = contactPoint;

        GameObject skillHolder = AddSkillController(triggeredObject, contactPoint);

        StartOrbSkill(skillHolder, triggeredObject);
    }
Ejemplo n.º 4
0
    //void OrbAttackPreStart()
    //{
    //    status = OrbStatus.PRE_START;
    //}

    public void OrbAttackStart()
    {
        status = OrbStatus.MOVING;
        DestoryHandEffect();
        skill.StartCD();
    }
Ejemplo n.º 5
0
    // Metodo mais importante da orbe, chamado pelos metodos acima, faz com que a orbe se movimente em
    // uma direcao e realize checagens em relacao a cada tile e objeto que esta no caminho, os parametros definem
    // a direcao, incrementX corresponde a horizontal enquanto incrementY corresponde a vertical, e eles
    // representam o movimento a cada loop dentro da matriz a partir da posicao atual da orbe, portanto a posiçao X e Y
    // da orbe sera somada com incrementX e incrementY respectivamente, e um deles deve ser 0, porque a orbe nao pode
    // se mover na diagonal
    void Move(int incrementX, int incrementY)
    {
        getBoard().NodeClicked(null);

        // O player nao pode mais mover essa orbe por enquanto
        canDrag = false;

        // Resetando o Action Node
        actionNode = null;

        // A orbe por enquanto esta normal
        orbStatus = OrbStatus.kNormal;

        // Essas variaveis vao guardar a posiçao X e Y para onde a orbe vai se mover no final do proximo loop
        int toX = posX;
        int toY = posY;

        {
            // Checa o tipo do tile atual
            // Cracked
            BoardTile currentTile = getBoard().tileMatrix[toX, toY];
            if (currentTile.tileType == BoardTile.TileType.kTileCracked)
            {
                currentTile.PassingOver(this);
            }
        }

        // Loop que soma a posiçao da orbe com as variaveis passadas por parametro,
        // e aqui que a logica de colisao com tiles e objetos acontece
        while (true)
        {
            // Tile Atual
            BoardTile currentTile = getBoard().tileMatrix[toX, toY];

            // Tiles
            if (currentTile)
            {
                // Checa o tipo do tile atual
                // Cracked
                //if (currentTile.tileType == BoardTile.TileType.kTileCracked)
                //{
                //    currentTile.PassingOver(this);
                //}

                if (currentTile.tileType == BoardTile.TileType.KTileMove)
                {
                    // Move Tile
                    Debug.Log("Move Tile");

                    // Checa se a orbe esta atualmente em cima do MoveTile, se ela estiver ela pode se mover
                    // para qualquer direçao sem ser afetada por ele, se nao estiver, ela sera movida para uma nova
                    // direcao no fim desse movimento
                    if ((posX != toX || posY != toY))
                    {
                        // Redirecionando a orbe

                        // Salvando o MoveTile no objeto de interaçao, para futuramente pegar a direcao
                        // para qual ele aponta.
                        actionNode = currentTile.GetComponent <MoveTile>();

                        // Muda o status da orbe para Redirecting
                        orbStatus = OrbStatus.kRedirecting;

                        // Para o loop
                        break;
                    }
                }
            }

            // Limites da Board

            if (toX + incrementX < 0 || toX + incrementX >= Board.kBoardWidth ||
                toY + incrementY < 0 || toY + incrementY >= Board.kBoardHeight)
            {
                // Fim dos limites da matriz da Board
                Debug.Log("Limite da Board");
                break;
            }

            if (!getBoard().tileMatrix[toX + incrementX, toY + incrementY])
            {
                // Dentro dos limites da matriz da board,
                // porem os tiles de gelo ja acabaram,
                // portanto esse e o limite do movimento.
                Debug.Log("Limite do Gelo");
                break;
            }

            // No caso dos objetos, nos checamos pelo objeto da casa a frente, porque o da casa atual
            // seria obviamente a propria orbe
            BoardObject objectAhead = getBoard().boardMatrix[toX + incrementX, toY + incrementY];

            // Objetos
            if (objectAhead)
            {
                // Checa o tipo do objeto afrente

                if (objectAhead.orbType == OrbType.kTypeOrb || objectAhead.orbType == OrbType.kTypeBlock)
                {
                    // O objeto a frente e uma orbe ou blocos comum
                    Debug.Log("Orbe ou bloco");

                    // Checa a cor do objeto a frente para saber se combina com a cor dessa orbe
                    if (objectAhead.orbType == OrbType.kTypeBlock && checkMatch(objectAhead.orbColor))
                    {
                        // As cores se combinam, portanto deu match
                        Debug.Log("Match");

                        if (currentTile.tileType == BoardTile.TileType.kTileCracked)
                        {
                            currentTile.PassingOver(this);
                        }

                        // Salva o objeto a frente no objeto de interacao, para futuramente
                        // aplicar a animaçao de fade nele tambem
                        actionNode = objectAhead;

                        // Muda o status da orbe para Matching
                        orbStatus = OrbStatus.kMatching;
                    }

                    // Como colidiu com um objeto solido, sae do loop
                    break;
                }
                else if (objectAhead.orbType == OrbType.kTypeStar)
                {
                    // A orbe passou por uma estrela
                    Debug.Log("Pegou estrela");

                    // Pega a estrela e continua o loop, pois a estrela nao e um objeto solido
                    objectAhead.GetComponent <Star>().starCollected(this);
                }
            }

            if (currentTile.tileType == BoardTile.TileType.kTileCracked)
            {
                currentTile.PassingOver(this);
            }

            // Nenhuma colisao aconteceu, portanto continua checando a proxima posiçao
            toX += incrementX;
            toY += incrementY;
        }

        // Se o tile onde a orbe parou for um Cracked Tile, entao ela cae

        /*
         *      if (getBoard().tileMatrix[toX, toY].tileType == BoardTile.TileType.kTileCracked)
         *      {
         *              // Muda o status da orbe para Falling
         *              orbStatus = OrbStatus.kFalling;
         *      }
         */
        // Se a posiçao para onde a orbe tem que se mover for a mesma da posicao inicial
        // significa que ela nem se moveu, portanto nao tera animaçao
        if (toX == posX && toY == posY)
        {
            // Posiçao final e igual a posiçao inicial
            Debug.Log("Pos Igual");

            // Chamando o metodo que e executado no fim da animaçao de movimento
            MovingEnd();

            // Parando esse metodo, porque nao haveria animaçao de movimento
            return;
        }

        // Criando a animaçao de movimento ate a posiçao final
        createMovementAnimation(toX, toY);
    }