public bool Wear(UnitDecorator item) { UnitDecorator unitBonuses = this.Dress; if (item.SetComponent(unitBonuses)) { this.Dress = item; return(true); } else { return(false); } }
/// <summary> /// Initializes a new instance of the <see cref="UnitData" /> struct. /// </summary> /// <param name="unit">The unit.</param> /// <param name="bonusProvider">The bonus provider.</param> /// <param name="useLandTransportData">if set to <c>true</c> land transport data is used instead of the main equipment.</param> public UnitData(UnitDecorator unit, IBonusProvider bonusProvider, bool useLandTransportData = false) { this._unit = unit; this._useLandTransportData = useLandTransportData; double numStars = Math.Floor(this._unit.CurrentExperience / 100.0); Bonus experienceBonux = bonusProvider.ExperienceBoni[this._unit.Type.Value] * numStars; Bonus firstHeroBonus = bonusProvider.GetHeroBonusFor(this._unit.CurrentFirstHero.Value); Bonus secondHeroBonus = bonusProvider.GetHeroBonusFor(this._unit.CurrentSecondHero.Value); Bonus thirdHeroBonus = bonusProvider.GetHeroBonusFor(this._unit.CurrentThirdHero.Value); Bonus totalHeroBonus = firstHeroBonus + secondHeroBonus + thirdHeroBonus; var experienceBonus = new Bonus { Initiative = (Equipment.Initiative != 0) ? experienceBonux.Initiative : 0, SoftAttack = (Equipment.SoftAttack != 0) ? experienceBonux.SoftAttack : 0, HardAttack = (Equipment.HardAttack != 0) ? experienceBonux.HardAttack : 0, AirAttack = (Equipment.AirAttack != 0) ? experienceBonux.AirAttack : 0, NavalAttack = (Equipment.NavalAttack != 0) ? experienceBonux.NavalAttack : 0, GroundDefense = (Equipment.GroundDefense != 0) ? experienceBonux.GroundDefense : 0, AirDefense = (Equipment.AirDefense != 0) ? experienceBonux.AirDefense : 0, CloseDefense = (Equipment.CloseDefense != 0) ? experienceBonux.CloseDefense : 0, Range = (Equipment.Range != 0) ? experienceBonux.Range : 0, Movement = (Equipment.Movement != 0) ? experienceBonux.Movement : 0, Spotting = (Equipment.Spotting != 0) ? experienceBonux.Spotting : 0, }; var heroBonus = new Bonus { Initiative = (Equipment.Initiative != 0) ? totalHeroBonus.Initiative : 0, SoftAttack = (Equipment.SoftAttack != 0) ? totalHeroBonus.SoftAttack : 0, HardAttack = (Equipment.HardAttack != 0) ? totalHeroBonus.HardAttack : 0, AirAttack = (Equipment.AirAttack != 0) ? totalHeroBonus.AirAttack : 0, NavalAttack = (Equipment.NavalAttack != 0) ? totalHeroBonus.NavalAttack : 0, GroundDefense = (Equipment.GroundDefense != 0) ? totalHeroBonus.GroundDefense : 0, AirDefense = (Equipment.AirDefense != 0) ? totalHeroBonus.AirDefense : 0, CloseDefense = (Equipment.CloseDefense != 0) ? totalHeroBonus.CloseDefense : 0, Range = (Equipment.Range != 0) ? totalHeroBonus.Range : 0, Movement = (Equipment.Movement != 0) ? totalHeroBonus.Movement : 0, Spotting = (Equipment.Spotting != 0) ? totalHeroBonus.Spotting : 0, }; this._bonusInfo = new BonusInfo(heroBonus, experienceBonus); this._bonus = experienceBonus + heroBonus; }
private static Motorization GetMotorization(UnitDecorator unit, IEquipmentProvider equipmentProvider) { var motorization = Motorization.NotMotorized; var lastReport = (ReportDecorator)((Unit)unit).Reports.LastOrDefault(); if (lastReport != null) { if (Equipment.GetAvailableLandTransports(lastReport, unit, equipmentProvider).Count() <= 1) { motorization = Motorization.SelfPropelled; } else if (lastReport.LandTransport != Equipment.None) { motorization = Motorization.Motorized; } } return(motorization); }
/// <summary> /// Called when the unit was changed. /// </summary> /// <param name="oldUnit">The old unit.</param> /// <param name="newUnit">The new unit.</param> protected override void OnUnitChanged(UnitDecorator oldUnit, UnitDecorator newUnit) { if (oldUnit != null) { oldUnit.Reports.CurrentChanged -= OnUnitReportsCurrentChanged; } if (newUnit != null) { newUnit.Reports.CurrentChanged += OnUnitReportsCurrentChanged; if (newUnit.Reports.CurrentItem == null) { newUnit.Reports.MoveCurrentToLast(); } } ResetAllValidationErrors(); UpdateProperties(); }
public void DoSpecialAbility(Armies.IArmy friendlyArmy, Armies.IArmy enemiesArmy) { List <IUnit> availableRange = friendlyArmy.FightStrategy.getSpecialAbilityTargets(friendlyArmy, enemiesArmy, this); if (availableRange.Count <= 0) { return; } List <IUnit> allies = new List <IUnit>(); foreach (var unit in availableRange) { if (friendlyArmy.Units.Contains(unit) && unit is IDressable) { allies.Add(unit); } } if (allies.Count > 0) { int dressIndex = GameEngine.Instance.Random.Next(0, allies.Count); IDressable dressableUnit = allies[dressIndex] as IDressable; UnitDecorator dress = UnitDecoratorFactory.getRandomDecorator(); if (dressableUnit.Wear(dress)) { GameLogger.Instance.Log( String.Format("[{0}] усиливает [{1}], добавляя {2} к его снаряжению", this.ToString(), dressableUnit.ToString(), dress.ToString()), GameLogger.LOG_LEVEL__SPECIAL_ABILITY ); } } }
/// <summary> /// Called when the unit was changed. /// </summary> /// <param name="oldUnit">The old unit.</param> /// <param name="newUnit">The new unit.</param> protected override void OnUnitChanged(UnitDecorator oldUnit, UnitDecorator newUnit) { ResetAllValidationErrors(); UpdateProperties(); }
/// <summary> /// Called when the unit was changed. /// </summary> /// <param name="oldUnit">The old unit.</param> /// <param name="newUnit">The new unit.</param> protected virtual void OnUnitChanged(UnitDecorator oldUnit, UnitDecorator newUnit) { }
private static Motorization GetMotorization(UnitDecorator unit, IEquipmentProvider equipmentProvider) { var motorization = Motorization.NotMotorized; var lastReport = (ReportDecorator)((Unit)unit).Reports.LastOrDefault(); if (lastReport != null) { if (Equipment.GetAvailableLandTransports(lastReport, unit, equipmentProvider).Count() <= 1) { motorization = Motorization.SelfPropelled; } else if (lastReport.LandTransport != Equipment.None) { motorization = Motorization.Motorized; } } return motorization; }