示例#1
0
 public void ApplyTo(FighterBase fighter)
 {
     for (int i = 0; i < FighterProperties.Count(); i++)
     {
         var value    = GetGene(i).Value;
         var property = typeof(FighterBase).GetProperty(FighterProperties.ElementAt(i).Name);
         property.SetValue(fighter, value);
     }
 }
示例#2
0
 public void StartGame()
 {
     Console.Clear();
     Console.WriteLine("ИГРОК 1 СОЗДАЕТ БОЙЦА:\n");
     player1 = CreateFighter();
     Console.Clear();
     Console.WriteLine("ИГРОК 2 СОЗДАЕТ БОЙЦА:\n");
     player2 = CreateFighter();
     Console.Clear();
     StartFight();
 }
        public static void AddSkills(FighterBase fighter)
        {
            var defaultSkill = Skills.Where(o => o.Cooldown == 0).GetRandom();
            var others       = Skills.Shuffle().Take(3);
            var heal         = Skills.OfType <IHealSkill>().GetRandom();

            fighter.Skills = others.Union(new ISkill[]
            {
                defaultSkill,
                heal,
            });
        }
示例#4
0
        public IEnumerable <EnemyIntel> GetIntels(
            FighterBase fighter,
            IEnumerable <EngineRoundTick> roundTicks,
            EngineCalculationValues calculationValues,
            IEnumerable <IFighterStats> enemies)
        {
            foreach (var enemy in enemies)
            {
                var intel = new EnemyIntel()
                {
                    Id            = enemy.Id,
                    HealthPercent = enemy.HealthRemaining(calculationValues) / enemy.Health(calculationValues),
                };

                intel.DamageDealt = DamageDone(roundTicks, fighter.Id, enemy.Id);
                intel.DamageTaken = DamageDone(roundTicks, enemy.Id, fighter.Id);

                intel.LastTarget = roundTicks
                                   .GetLastRounds(2)
                                   .OfType <FighterAttackTick>()
                                   .Where(o => o.Fighter.Id == fighter.Id)
                                   .OrderByDescending(o => o.DateTime)
                                   .FirstOrDefault()
                                   ?.Target.Id;

                intel.IsInRange = fighter.SkillFinder
                                  .GetMaxRangeSkill(fighter, fighter.SkillFinder.ExcludeSkillsOnCooldown(fighter, fighter.Skills, roundTicks), calculationValues)?.Range >= fighter.GetDistance(enemy);

                intel.LastRoundHealSkillUsed = roundTicks
                                               .Where(o => o.Ticks.OfType <FighterHealTick>().Any(t => t.Target.Id == enemy.Id))
                                               .GetLastRound()
                                               ?.Round;

                intel.IsStunned        = enemy.States.OfType <ISkillCondition>().Any(o => o.PreventsPerformingActions);
                intel.IsHealingReduced = enemy.States.OfType <ISkillCondition>().Any(o => o.HealingReduced != null);

                intel.OtherFightersNearby = enemies
                                            .Where(o => o.Id != enemy.Id)
                                            .Where(o => o.GetDistanceAbs(enemy) <= 10)
                                            .Count();

                intel.LastAttackers = roundTicks
                                      .GetLastRounds(2)
                                      .OfType <FighterAttackTick>()
                                      .Where(o => o.Target.Id == enemy.Id)
                                      .Select(o => o.Fighter.Id)
                                      .Distinct();

                yield return(intel);
            }
        }
示例#5
0
    public override void Run()
    {
        if (firstrun)
        {
            firstrun = false;

            fighterbase = new Druid_Feral();
            fighterbase.Init();
        }
        else
        {
            fighterbase.Update();
        }
    }
示例#6
0
 private void CalculateDamage(FighterBase agressor, FighterBase victim)
 {
     if (victim.DodgeChance > random.Next(1, 101))
     {
         Console.WriteLine("{0} хотел ударить, но противник " +
                           "увернулся от удара!", agressor.Name);
     }
     else
     {
         victim.HP -= agressor.Hit();
         Console.WriteLine("^\t\t\t^\t\t\t^");
         victim.HP -= agressor.UseUltimateAbility();
         Console.WriteLine("^\t\t\t^\t\t\t^");
     }
 }
示例#7
0
    public Vector2 Get_Attack_Range(AttackType _attack, AttackButton _btn, FighterBase Base)
    {
        Vector2 range = new Vector2();

        switch (_attack)
        {
        case AttackType.Forward:
            range.x += Base.Forward_Range;
            break;

        case AttackType.Back:
            range.x += Base.Back_Range;
            break;

        case AttackType.Neutral:
            range.x += Base.Neutral_Range;
            break;

        case AttackType.Air:
            range.x += Base.Air_Range;
            break;

        case AttackType.Crouch:
            range.x += Base.Crouch_Range;
            break;

        case AttackType.Projectile:
            range.x += Base.Projectile_Range;
            break;
        }
        range.y = range.x;
        if (_btn == AttackButton.Primary)
        {
            range.x += Base.Primary_Range_X;
            range.y += Base.Primary_Range_Y;
        }
        else if (_btn == AttackButton.Secondary)
        {
            range.x += Base.Secondary_Range_X;
            range.y += Base.Secondary_Range_Y;
        }
        return(range);
    }
示例#8
0
    public float Get_Attack_Damage(AttackType _attack, AttackButton _btn, FighterBase Base)
    {
        float damage = 0f;

        switch (_attack)
        {
        case AttackType.Forward:
            damage += Base.Forward_Damage;
            break;

        case AttackType.Back:
            damage += Base.Back_Damage;
            break;

        case AttackType.Neutral:
            damage += Base.Neutral_Damage;
            break;

        case AttackType.Air:
            damage += Base.Air_Damage;
            break;

        case AttackType.Crouch:
            damage += Base.Crouch_Damage;
            break;

        case AttackType.Projectile:
            damage += Base.Projectile_Damage;
            break;
        }
        if (_btn == AttackButton.Primary)
        {
            damage += Base.Primary_Damage;
        }
        else if (_btn == AttackButton.Secondary)
        {
            damage += Base.Secondary_Damage;
        }
        return(damage * Fighter_Stats.Current_Damage_Multiplier);
    }
示例#9
0
    public float Get_Attack_CoolDown(AttackType _attack, AttackButton _btn, FighterBase Base)
    {
        var cd = 0f;

        switch (_attack)
        {
        case AttackType.Forward:
            cd += Base.Forward_CD;
            break;

        case AttackType.Back:
            cd += Base.Back_CD;
            break;

        case AttackType.Neutral:
            cd += Base.Neutral_CD;
            break;

        case AttackType.Air:
            cd += Base.Air_CD;
            break;

        case AttackType.Crouch:
            cd += Base.Crouch_CD;
            break;

        case AttackType.Projectile:
            cd += Base.Projectile_CD;
            break;
        }
        if (_btn == AttackButton.Primary)
        {
            cd += Base.Primary_CD;
        }
        else if (_btn == AttackButton.Secondary)
        {
            cd += Base.Secondary_CD;
        }
        return(cd);
    }
示例#10
0
 void Start()
 {
     fb = gameObject.GetComponent <FighterBase>();
 }