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(); } } }
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; }
//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; } }