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); } }
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, }); }
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); } }
public override void Run() { if (firstrun) { firstrun = false; fighterbase = new Druid_Feral(); fighterbase.Init(); } else { fighterbase.Update(); } }
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^"); } }
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); }
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); }
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); }
void Start() { fb = gameObject.GetComponent <FighterBase>(); }