Пример #1
0
    public override void SelectedFunctionality()
    {
        if (LM.currentLevelState == LevelManager.LevelState.ProcessingPlayerActions)
        {
            if (LM.selectedEnemy != null && LM.selectedEnemy != GetComponent <EnemyUnit>())
            {
                LM.HideEnemyHover(LM.selectedEnemy);
                //Llamo a LevelManager para desactivar hover
                if (LM.selectedCharacter != null)
                {
                    LM.selectedCharacter.HideDamageIcons(this);
                }
                LM.HideHover(LM.selectedEnemy);
                LM.selectedEnemy.HealthBarOn_Off(false);
                //LM.UIM.HideCharacterInfo("");
                Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
            }

            else
            {
                LM.DeSelectUnit();
                LM.selectedEnemy = GetComponent <EnemyUnit>();

                //Activo la barra de vida
                HealthBarOn_Off(true);

                //Cambio el color del personaje
                SelectedColor();
            }
        }
    }
Пример #2
0
    public override void Attack(UnitBase unitToAttack)
    {
        CheckIfUnitHasMarks(unitToAttack);
        unitToAttack.timesRepeatNumber.enabled = false;

        if (parryOn)
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            unitToParry = unitToAttack;
            parryIcon.SetActive(true);
            LM.DeSelectUnit();
            //Animación de preparar el parry
            // myAnimator.SetTrigger("Attack");
        }

        else if (doubleAttack)
        {
            for (int i = 0; i < timesDoubleAttackRepeats; i++)
            {
                //Animación de ataque
                myAnimator.SetTrigger("Attack");

                particleMultipleAttack.SetActive(true);

                //He hecho que la partícula sea hija del unitModel y asi, vaya acorde a estas
                //if (currentFacingDirection == FacingDirection.North)
                //{

                //    particleMultipleAttack.transform.DORotate(new Vector3(0, 0, 180),0);

                //}
                //else if (currentFacingDirection == FacingDirection.South)
                //{

                //    particleMultipleAttack.transform.DORotate(new Vector3(0, 0, 0), 0);
                //}
                //else if (currentFacingDirection == FacingDirection.East)
                //{
                //    particleMultipleAttack.transform.DORotate(new Vector3(0, 0, 90), 0);

                //}
                //else if (currentFacingDirection == FacingDirection.West)
                //{
                //    particleMultipleAttack.transform.DORotate(new Vector3(0, 0, 270), 0);
                //}



                //UNDO
                CreateAttackCommand(unitToAttack);

                //Hago daño
                DoDamage(unitToAttack);
            }

            if (itsForHonorTime)
            {
                LM.honorCount++;
                //Cambiar el número si va a tener más de un turno
                myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft2.text = LM.honorCount.ToString();
            }

            //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
            base.Attack(unitToAttack);
        }

        else
        {
            //Animación de ataque
            myAnimator.SetTrigger("Attack");

            //UNDO
            CreateAttackCommand(unitToAttack);

            Instantiate(attackParticle, unitToAttack.transform);

            //Hago daño
            DoDamage(unitToAttack);

            //Meter sonido Samurai
            //SoundManager.Instance.PlaySound(AppSounds.KNIGHT_ATTACK);

            if (itsForHonorTime)
            {
                LM.honorCount++;
                //Cambiar el número si va a tener más de un turno
                myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft2.text = LM.honorCount.ToString();
            }

            //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
            base.Attack(unitToAttack);
        }

        hasAttacked = true;
    }
Пример #3
0
    //En función de donde este mirando el personaje paso una lista de tiles diferente.
    public override void Attack(UnitBase unitToAttack)
    {
        CalculateDamage(unitToAttack);
        CheckIfUnitHasMarks(unitToAttack);
        HideAttackEffect(unitToAttack);

        if (checkersAttack)
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            unitsCanJump--;

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);
            unitsAttacked.Add(unitToAttack);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft.text = unitsCanJump.ToString();

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            if (unitsCanJump >= 1)
            {
                LM.DeSelectUnit();
                hasAttacked = false;
                CheckUnitsAndTilesInRangeToAttack(true);

                hasMoved = true;

                UIM.RefreshTokens();
                LM.SelectUnit(0, this);

                UIM.CheckActionsAvaliable();


                for (int i = 0; i < unitsAttacked.Count; i++)
                {
                    currentUnitsAvailableToAttack.Remove(unitsAttacked[i]);
                }
            }
            else
            {
                //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
                base.Attack(unitToAttack);
                hasAttacked = true;
            }
        }

        else if (extraTurnAttackAfterKill)
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            if (unitToAttack.isDead && extraTurnCount > 0)
            {
                extraTurnCount--;
                hasAttacked = false;
                hasMoved    = false;
                UIM.RefreshTokens();
                LM.DeSelectUnit();
                UIM.CheckActionsAvaliable();
                myPanelPortrait.GetComponent <Portraits>().specialSkillTurnsLeft.text = "0";

                //Lo hago aquí para que cuando se seleccione nuevamente ya esté bien calculado.
                LM.tilesAvailableForMovement = new List <IndividualTiles>(LM.TM.OptimizedCheckAvailableTilesForMovement(movementUds, this, false));

                for (int i = 0; i < LM.tilesAvailableForMovement.Count; i++)
                {
                    LM.tilesAvailableForMovement[i].ColorMovement();
                }

                LM.SelectUnit(movementUds, this);
            }
            else
            {
                //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
                base.Attack(unitToAttack);
                hasAttacked = true;
            }
        }
        else
        {
            //UNDO
            CreateAttackCommand(unitToAttack);

            //Importante esta llamada sea la primera
            CalculateAttackLogic(unitToAttack, true);

            //Quito el color del tile
            myCurrentTile.ColorDeselect();
            transform.DOJump(currentTileVectorToMove, 1, 1, 1);

            //Cambio la rotación
            NewRotationAfterJump(unitToAttack.myCurrentTile);

            //Hago daño
            DoDamage(unitToAttack);

            CheckPasiveUpgrades(unitToAttack);

            SoundManager.Instance.PlaySound(AppSounds.ROGUE_ATTACK);

            //La base tiene que ir al final para que el bool de hasAttacked se active después del efecto.
            base.Attack(unitToAttack);
            hasAttacked = true;
        }
    }