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); } }
void OrbSkillReady() { status = OrbStatus.READY; if (showStaffEffect && skill != null && skill.staffEffectPrafab != null) { staffEffectObj = Instantiate(skill.staffEffectPrafab, caster.GetShootPoint(ShootPointPosition.STAFF)); } }
public void TriggerSkill(GameObject triggeredObject, ContactPoint contactPoint) { status = OrbStatus.TRIGGERED; this.triggeredObject = triggeredObject; this.contactPoint = contactPoint; GameObject skillHolder = AddSkillController(triggeredObject, contactPoint); StartOrbSkill(skillHolder, triggeredObject); }
//void OrbAttackPreStart() //{ // status = OrbStatus.PRE_START; //} public void OrbAttackStart() { status = OrbStatus.MOVING; DestoryHandEffect(); skill.StartCD(); }
// 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); }