예제 #1
0
 public void AfterActivation()
 {
     if (!CharacterBhv.Character.IsPlayer)
     {
         CharacterBhv.Ai.AfterAction();
     }
     else
     {
         GridBhv.ShowPm(CharacterBhv, OpponentBhvs);
     }
 }
예제 #2
0
    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);
            }
        }
    }
예제 #3
0
 private bool SetPathToOpponent(RangePos tmpPos)
 {
     _gridBhv.ShowPm(_characterBhv, _characterBhv.OpponentBhvs, unlimitedPm: true);
     return(_characterBhv.SetPath(tmpPos.X, tmpPos.Y, usePm: false));
 }
예제 #4
0
    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);
    }