Exemplo n.º 1
0
        public bool Wear(UnitDecorator item)
        {
            UnitDecorator unitBonuses = this.Dress;

            if (item.SetComponent(unitBonuses))
            {
                this.Dress = item;
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        /// <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;
        }
        /// <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;
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 6
0
        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();
 }
Exemplo n.º 8
0
 /// <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)
 {
 }
        /// <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();
        }
        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)
 {
     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)
 {
 }