Exemplo n.º 1
0
 public void SetVictoryCondition(VictoryCondition Condition, Army ForArmy, Match Match)
 {
     _Display.Clear();
     foreach (var objective in Condition.Scorers)
     {
         _Display.Add(
             new Button("objective-header")
         {
             DisplayedString =
                 string.Format(
                     "{0}/{1}",
                     objective.CalculateScore(ForArmy, Match, new Dictionary <Objective, int>()),
                     Condition.GetMaximumScore(objective, ForArmy, Match))
         });
         _Display.Add(
             new Button("objective-regular")
         {
             DisplayedString =
                 ObjectDescriber.Sentencify(
                     ObjectiveDescriber.RemoveScore(ObjectiveDescriber.Describe(objective)))
         });
     }
 }
Exemplo n.º 2
0
        void UpdateControl(IEnumerable <Unit> Units)
        {
            var armies = Units.Where(i => i.Configuration.CanControl()).Select(i => i.Army).Distinct().ToList();

            if (armies.Count == 0)
            {
                _ControllingArmy = null;
            }
            else if (armies.Count == 1)
            {
                _ControllingArmy = armies.First();
                // Capture area control captureable units.
                foreach (Unit unit in Units.ToList().Where(
                             i => i.Army != _ControllingArmy && i.Configuration.AreaControlCapture))
                {
                    unit.Capture(_ControllingArmy);
                }
            }
            else
            {
                _ControllingArmy = null;
            }
        }
Exemplo n.º 3
0
        public virtual OrderInvalidReason Validate()
        {
            OrderInvalidReason r;

            if (_OddsCalculations.Count == 0)
            {
                if (TargetTile.Units.Count() == 0)
                {
                    return(OrderInvalidReason.TARGET_EMPTY);
                }
                return(TargetTile.Units.First().CanBeAttackedBy(Army, AttackMethod));
            }

            if (Army.HasAttackedTile(TargetTile))
            {
                return(OrderInvalidReason.TARGET_ALREADY_ATTACKED);
            }
            foreach (SingleAttackOrder order in _Attackers)
            {
                r = order.Validate();
                if (r != OrderInvalidReason.NONE)
                {
                    return(r);
                }
            }
            r = TargetTile.CanBeAttacked(AttackMethod);
            if (r != OrderInvalidReason.NONE)
            {
                return(r);
            }
            if (_Attackers.Select(i => i.AttackTile).Distinct().Count() > 1)
            {
                return(OrderInvalidReason.ILLEGAL);
            }

            return(OrderInvalidReason.NONE);
        }
        public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
        {
            switch (Direction)
            {
            case Direction.NORTH_WEST:
            case Direction.NORTH_EAST:
            case Direction.NORTH:
                return(Match.Map.Height - ForArmy.Units.Max(i => i.Position != null ? 0 : i.Position.Coordinate.Y));

            case Direction.SOUTH_WEST:
            case Direction.SOUTH_EAST:
            case Direction.SOUTH:
                return(ForArmy.Units.Max(i => i.Position != null ? 0 : i.Position.Coordinate.Y) + 1);

            case Direction.EAST:
                return(ForArmy.Units.Max(i => i.Position != null ? 0 : i.Position.Coordinate.X) + 1);

            case Direction.WEST:
                return(Match.Map.Width - ForArmy.Units.Max(i => i.Position != null ? 0 : i.Position.Coordinate.Y));

            default:
                throw new ArgumentException(string.Format("Direction not supported: {0}", Direction));
            }
        }
        public override int?GetMaximumScore(Objective Objective, Army ForArmy, Match Match)
        {
            if (Objective != this)
            {
                return(null);
            }
            switch (Direction)
            {
            case Direction.NORTH:
            case Direction.NORTH_EAST:
            case Direction.NORTH_WEST:
            case Direction.SOUTH:
            case Direction.SOUTH_EAST:
            case Direction.SOUTH_WEST:
                return(Match.Map.Height);

            case Direction.EAST:
            case Direction.WEST:
                return(Match.Map.Width);

            default:
                throw new ArgumentException(string.Format("Direction not supported: {0}", Direction));
            }
        }
Exemplo n.º 6
0
 public override int?GetMaximumScore(Objective Objective, Army ForArmy, Match Match)
 {
     return(Objective == this ? (int?)Match.Map.TilesEnumerable.Count(Matcher.MatchesTransient) : null);
 }
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(ScoreWithMatcher(Matcher.Matches, ForArmy, Match));
 }
Exemplo n.º 8
0
 protected Deployment(Army Army, IEnumerable <Unit> Units, IdGenerator IdGenerator)
 {
     this.Army  = Army;
     this.Units = Units.ToList();
     _Id        = IdGenerator.GenerateId();
 }
Exemplo n.º 9
0
 public IEnumerable <Unit> GenerateUnits(Army Army, IdGenerator IdGenerator)
 {
     return(UnitConfigurations.Select(i => new Unit(Army, i, IdGenerator)));
 }
 public Deployment GenerateDeployment(Army Army, IdGenerator IdGenerator)
 {
     return(new ConvoyDeployment(Army, UnitGroup.GenerateUnits(Army, IdGenerator), this, IdGenerator));
 }
Exemplo n.º 11
0
 void SetVictoryConditions(Army Army)
 {
     _VictoryConditionDisplay.SetVictoryCondition(
         Army.Configuration.VictoryCondition, Army, Army.Match);
 }
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Match.Armies.Where(i => i.Configuration.Team != ForArmy.Configuration.Team)
            .All(i => i.GetObjectiveSuccessLevel() < ObjectiveSuccessLevel.VICTORY) ? 1 : 0);
 }
Exemplo n.º 13
0
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Objectives.Sum(i => i.GetScore(ForArmy, Match, Cache)));
 }
Exemplo n.º 14
0
 public void Control(Unit Unit)
 {
     _ControllingArmy = Unit.Army;
 }
Exemplo n.º 15
0
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Match.Map.TilesEnumerable.Count(
                i => Friendly == (i.ControllingArmy == ForArmy) && Matcher.Matches(i)));
 }
Exemplo n.º 16
0
 public IndirectFireAttackOrder(Army Army, Tile TargetTile)
     : base(Army, TargetTile)
 {
 }
Exemplo n.º 17
0
 public override int?GetMaximumScore(Objective Objective, Army ForArmy, Match Match)
 {
     return(Objective == this
                         ? Match.Scenario.TurnConfiguration.Turns
                            : this.Objective.GetMaximumScore(Objective, ForArmy, Match));
 }
 public Deployment GenerateDeployment(Army Army, IdGenerator IdGenerator)
 {
     return(new PositionalDeployment(Army, UnitGroup.GenerateUnits(Army, IdGenerator), this, IdGenerator));
 }
Exemplo n.º 19
0
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Points * Objective.GetScore(ForArmy, Match, Cache));
 }
Exemplo n.º 20
0
 public ResetOrder(Army Army, bool CompleteReset)
 {
     this.Army          = Army;
     this.CompleteReset = CompleteReset;
 }
Exemplo n.º 21
0
 public static string Describe(Army Army)
 {
     return(Describe(Army.Configuration));
 }
Exemplo n.º 22
0
        public void HandleCombatResult(CombatResult CombatResult, AttackMethod AttackMethod, Army AttackingArmy)
        {
            if (Position == null)
            {
                return;
            }
            if (Passenger != null)
            {
                Passenger.HandleCombatResult(CombatResult, AttackMethod, AttackingArmy);
            }
            foreach (var unit in Position.Units.Where(i => Covers(i)).ToList())
            {
                unit.HandleCombatResult(CombatResult, AttackMethod, AttackingArmy);
            }

            switch (CombatResult)
            {
            case CombatResult.MISS:
                return;

            case CombatResult.DESTROY:
                if (Army.Match.Scenario.Rules.AllowCloseAssaultCapture &&
                    AttackMethod == AttackMethod.CLOSE_ASSAULT &&
                    Configuration.CloseAssaultCapture)
                {
                    Capture(AttackingArmy);
                }
                else
                {
                    Status = UnitStatus.DESTROYED;
                    OnDestroy?.Invoke(this, EventArgs.Empty);
                    Remove();
                }
                return;

            case CombatResult.DAMAGE:
                Status = UnitStatus.DAMAGED;
                Remove();
                return;

            case CombatResult.DISRUPT:
                Status = UnitStatus.DISRUPTED;
                if (Configuration.UnloadsWhenDisrupted && Passenger != null)
                {
                    Unload(false);
                }
                OnDisrupt?.Invoke(this, EventArgs.Empty);
                return;

            case CombatResult.DOUBLE_DISRUPT:
                if (Status == UnitStatus.DISRUPTED)
                {
                    HandleCombatResult(CombatResult.DESTROY, AttackMethod, AttackingArmy);
                }
                else
                {
                    Status = UnitStatus.DISRUPTED;
                    if (Configuration.UnloadsWhenDisrupted && Passenger != null)
                    {
                        Unload(false);
                    }
                    OnDisrupt?.Invoke(this, EventArgs.Empty);
                }
                return;
            }
        }
Exemplo n.º 23
0
 public NextPhaseOrder(Army Army, TurnComponent TurnComponent)
 {
     this.Army          = Army;
     this.TurnComponent = TurnComponent;
 }
Exemplo n.º 24
0
 public override int CalculateScore(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Numerator.GetScore(ForArmy, Match, Cache) / Denominator.GetScore(ForArmy, Match, Cache));
 }
Exemplo n.º 25
0
 public AirAttackOrder(Army Army, Tile TargetTile)
     : base(Army, TargetTile)
 {
 }
Exemplo n.º 26
0
 public AntiAirAttackOrder(Army Army, Tile TargetTile)
     : base(Army, TargetTile)
 {
     SetAttackTarget(AttackTarget.EACH);
 }
 public override int?GetMaximumScore(Objective Objective, Army ForArmy, Match Match)
 {
     return(Objective == this ? (int?)1 : null);
 }
Exemplo n.º 28
0
 public TurnInfo(Army Army, TurnComponent TurnComponent)
 {
     this.Army          = Army;
     this.TurnComponent = TurnComponent;
 }
 public bool IsSatisfied(Army ForArmy, Match Match, Dictionary <Objective, int> Cache)
 {
     return(Invert ? Objective.GetScore(ForArmy, Match, Cache) <= Threshold
                                                                          : Objective.GetScore(ForArmy, Match, Cache) >= Threshold);
 }
 public MinefieldAttackOrder(Army Army, Tile TargetTile)
     : base(Army, TargetTile)
 {
 }