public void AfterActivation() { if (!CharacterBhv.Character.IsPlayer) { CharacterBhv.Ai.AfterAction(); } else { GridBhv.ShowPm(CharacterBhv, OpponentBhvs); } }
private void NextTurn() { if (PlayerBhv.Character.IsDead) { return; } bool?lastCharacterIsPlayer = _currentPlayingCharacterBhv?.Character.IsPlayer ?? null; if (++_currentOrderId >= _orderList.Count) { _currentOrderId = 0; } _currentPlayingCharacterBhv = GetCharacterBhvFromOrderId(_orderList[_currentOrderId].Id); var currentPlayingFrame = GameObject.Find("FrameCharacter" + _currentPlayingCharacterBhv.OrderId); OrderIndicator.transform.parent = currentPlayingFrame.transform; OrderIndicator.transform.position = currentPlayingFrame.transform.position; if (!_currentPlayingCharacterBhv.Character.IsPlayer) { ShowCharacterLifeName(_currentPlayingCharacterBhv.Character); } else { HideCharacterLifeName(); } //DEBUG //_currentPlayingCharacterBhv = _playerBhv; foreach (var skill in _currentPlayingCharacterBhv.Character.Skills) { if (skill != null) { skill.OnStartTurn(); } } _currentPlayingCharacterBhv.Turn++; if (_currentOrderId == 0) { _fightTitle.text = _map.Name + ": <material=\"LongWhite\">" + Helper.GetOrdinal(GetCharacterBhvFromOrderId(_orderList[0].Id).Turn) + " Turn</material>"; } UpdateResources(); if (_currentPlayingCharacterBhv.Character.IsPlayer) { State = FightState.PlayerTurn; ManagePlayerButtons(); _gridBhv.ShowPm(_currentPlayingCharacterBhv, _currentPlayingCharacterBhv.OpponentBhvs); Instantiator.NewOverTitle("Player Turn", "Sprites/MapTitle_1", null, Direction.Left); } else { State = FightState.OpponentTurn; ManagePlayerButtons(); if (lastCharacterIsPlayer == true || lastCharacterIsPlayer == null) { Instantiator.NewOverTitle("Opponent" + (_orderList.Count > 2 ? "s" : "") + " Turn", "Sprites/MapTitle_1", AfterTitleFight, Direction.Left); } else { AfterTitleFight(true); } object AfterTitleFight(bool result) { _currentPlayingCharacterBhv.Ai.StartThinking(); return(result); } } }
private bool SetPathToOpponent(RangePos tmpPos) { _gridBhv.ShowPm(_characterBhv, _characterBhv.OpponentBhvs, unlimitedPm: true); return(_characterBhv.SetPath(tmpPos.X, tmpPos.Y, usePm: false)); }
public Damage AttackWithWeapon(int weaponId, CharacterBhv opponentBhv, Map map, bool usePa = true, Vector3 touchedPosition = default(Vector3)) { var tmpDamage = new Damage(); var tmpWeapon = Character.Weapons[weaponId]; float baseDamages = tmpWeapon.BaseDamage * Helper.MultiplierFromPercent(1, Random.Range(-tmpWeapon.DamageRangePercentage, tmpWeapon.DamageRangePercentage + 1)); baseDamages *= Character.GetDamageMultiplier(); float weaponHandlingMultiplier = 0.0f; if (tmpWeapon.Type != Character.FavWeapons[0] && tmpWeapon.Type != Character.FavWeapons[1]) { weaponHandlingMultiplier = Helper.MultiplierFromPercent(weaponHandlingMultiplier, -(RacesData.NotRaceWeaponDamagePercent + Character.NotRaceWeaponDamagePercent)); } else { weaponHandlingMultiplier = Helper.MultiplierFromPercent(weaponHandlingMultiplier, Character.RaceWeaponDamagePercent); } float raceGenderMultiplier = 0.0f; if (opponentBhv != null && opponentBhv.Character.Race == Character.StrongAgainst) { raceGenderMultiplier = Helper.MultiplierFromPercent(raceGenderMultiplier, RacesData.StrongAgainstDamagePercent); } if (map?.Type == Character.StrongIn) { raceGenderMultiplier = Helper.MultiplierFromPercent(raceGenderMultiplier, RacesData.StrongInDamagePercent); } if (Character.Gender == CharacterGender.Female) { raceGenderMultiplier = Helper.MultiplierFromPercent(raceGenderMultiplier, -RacesData.GenderDamage); } else { raceGenderMultiplier = Helper.MultiplierFromPercent(raceGenderMultiplier, RacesData.GenderDamage); } float skillMultiplier = 0.0f; foreach (var skill in Character.Skills) { if (skill != null) { skillMultiplier = Helper.MultiplierFromPercent(skillMultiplier, skill.OnStartAttack()); } } float criticalMultiplier = 0.0f; int criticalPercent = Random.Range(0, 100); if (criticalPercent < tmpWeapon.CritChancePercent) { tmpDamage.Critical = true; criticalMultiplier = Helper.MultiplierFromPercent(raceGenderMultiplier, tmpWeapon.CritMultiplierPercent); if (Character.Gender == CharacterGender.Male) { criticalMultiplier = Helper.MultiplierFromPercent(criticalMultiplier, -RacesData.GenderCritical); } else { criticalMultiplier = Helper.MultiplierFromPercent(criticalMultiplier, RacesData.GenderCritical); } } tmpDamage.Amount = (int)(baseDamages * (1.0f + weaponHandlingMultiplier + raceGenderMultiplier + skillMultiplier + criticalMultiplier)); //Debug.Log("Final Damages = " + resultInt); if (usePa) { SkinContainer.OrientToTarget(transform.position.x - touchedPosition.x); Instantiator.PopIcon(Helper.GetSpriteFromSpriteSheet("Sprites/IconsWeapon_" + tmpWeapon.Type.GetHashCode()), transform.position); StartCoroutine(Helper.ExecuteAfterDelay(PlayerPrefsHelper.GetSpeed(), () => { LosePa(tmpWeapon.PaNeeded); _attackedPosition = touchedPosition; IsAttacking = 1; foreach (var skill in Character.Skills) { if (skill != null) { skill.OnEndAttack(tmpDamage.Amount, opponentBhv); } } Instantiator.NewEffect(InventoryItemType.Weapon, touchedPosition, transform.position, tmpWeapon.EffectId, Constants.GridMax - Y); _gridBhv.ShowPm(this, OpponentBhvs); return(true); })); } return(tmpDamage); }