Exemplo n.º 1
0
 public BattlefieldVision(PawnModel posessedPawn, Orientation directionOfAttack, UnitsContainer units, MapModel map, BattleCircumstances battleCircumstances)
 {
     _posessedPawn      = posessedPawn;
     _directionOfAttack = directionOfAttack;
     _units             = units;
     _map = map;
     _battleCircumstances = battleCircumstances;
 }
 public static bool IsActivated(this EffectActivationCircumstances activationCircumstances, BattleCircumstances battleCircumstances)
 {
     if (activationCircumstances == EffectActivationCircumstances.Allways)
     {
         return(true);
     }
     else if (activationCircumstances == EffectActivationCircumstances.StepBattle && battleCircumstances == BattleCircumstances.Step)
     {
         return(true);
     }
     else if (activationCircumstances == EffectActivationCircumstances.DirectorBattle && battleCircumstances == BattleCircumstances.Director)
     {
         return(true);
     }
     return(false);
 }
Exemplo n.º 3
0
        public BattleResults PerformPassiveOnlyBattleAtPlace(MyHexPosition battleActivatorPosition, BattleCircumstances battleCircumstances)
        {
            var arbiter = new BattleArbiter(Units, Projectiles, MapModel);

            return(arbiter.PerformPassiveBattleAtPlace(battleActivatorPosition, battleCircumstances));
        }
Exemplo n.º 4
0
        public BattleResults PerformPassiveBattleAtPlace(MyHexPosition battleActivatorPosition, BattleCircumstances battleCircumstances)
        {
            var battleResults = new BattleResults();

            var intruderUnit = _units.GetPawnAt(battleActivatorPosition);

            // First - Passive effects of all neighbours
            foreach (var pair in battleActivatorPosition.NeighboursWithDirections)
            {
                if (_mapModel.HasTileAt(pair.NeighbourPosition)) // is valid position
                {
                    if (_units.IsPawnAt(pair.NeighbourPosition))
                    {
                        var neighbourUnit = _units.GetPawnAt(pair.NeighbourPosition);
                        if (!battleResults.UnitIncapaciated(neighbourUnit))
                        {
                            battleResults.Add(PerformSingleFight(intruderUnit, neighbourUnit, pair.NeighbourDirection, symbol => symbol.PassiveEffect,
                                                                 battleCircumstances));
                            if (battleResults.UnitIncapaciated(intruderUnit))
                            {
                                return(battleResults);
                            }
                        }
                    }
                }
            }

            foreach (var pair in battleActivatorPosition.NeighboursWithDirections)
            {
                if (_mapModel.HasTileAt(pair.NeighbourPosition)) // is valid position
                {
                    if (_units.IsPawnAt(pair.NeighbourPosition))
                    {
                        var neighbourUnit = _units.GetPawnAt(pair.NeighbourPosition);
                        if (!battleResults.UnitIncapaciated(neighbourUnit))
                        {
                            battleResults.Add(PerformSingleFight(neighbourUnit, intruderUnit, pair.NeighbourDirection.Opposite(), symbol => symbol.PassiveEffect,
                                                                 battleCircumstances));

                            if (battleResults.UnitIncapaciated(intruderUnit))
                            {
                                return(battleResults);
                            }
                        }
                    }
                }
            }
            return(battleResults);
        }
Exemplo n.º 5
0
        private BattleEngagement PerformSingleActiveFight(UnitModel attacker, Orientation orientation, BattleCircumstances battleCircumstances)
        {
            var engagementResult = new BattleEngagementResult();
            var engagement       = new BattleEngagement(engagementResult);

            var attackerSymbolLocalDirection = attacker.Orientation.CalculateLocalDirection(orientation);

            if (!attacker.Symbols.ContainsKey(attackerSymbolLocalDirection))
            {
                return(engagement);
            }

            var symbol = attacker.Symbols[attackerSymbolLocalDirection];
            var effect = symbol.ActiveEffect;
            var attackerBattlefieldVision = new BattlefieldVision(attacker, attackerSymbolLocalDirection, _units, _mapModel, battleCircumstances);

            if (!effect.IsActivated(attackerBattlefieldVision, attacker.Position))
            {
                return(engagement);
            }

            var defender = effect.RetriveTarget(attackerBattlefieldVision, attacker.Position);
            var defendingSymbolLocalDirection = defender.Orientation.CalculateLocalDirection(orientation.Opposite());

            AddEngagementElement(attacker, defender, engagement, effect);
            effect.Execute(attackerBattlefieldVision, attacker.Position, engagementResult);

            if (!effect.IsDefendableEffect)
            {
                return(engagement);
            }
            if (!defender.Symbols.ContainsKey(defendingSymbolLocalDirection))
            {
                return(engagement);
            }

            var defenderBattlefieldVision = new BattlefieldVision(defender, defendingSymbolLocalDirection, _units, _mapModel, battleCircumstances);
            var defenderEffect            = defender.Symbols[defendingSymbolLocalDirection].ReactEffect;

            if (defenderEffect.IsActivated(defenderBattlefieldVision, attacker.Position))
            {
                AddEngagementElement(defender, attacker, engagement, defenderEffect);
                defenderEffect.Execute(defenderBattlefieldVision, attacker.Position, engagementResult);
            }
            return(engagement);
        }
Exemplo n.º 6
0
        private BattleEngagement PerformSingleFight(UnitModel defender, UnitModel attacker, Orientation attackerDirectionFromDefender,
                                                    Func <SymbolModel, IEffect> attackingEffectExtractor, BattleCircumstances battleCircumstances)
        {
            var engagementResult = new BattleEngagementResult();
            var engagement       = new BattleEngagement(engagementResult);

            if (defender.Owner == attacker.Owner)
            {
                return(engagement);
            }

            var attackerSymbolLocalDirection  = attacker.Orientation.CalculateLocalDirection(attackerDirectionFromDefender.Opposite());
            var defendingSymbolLocalDirection = defender.Orientation.CalculateLocalDirection(attackerDirectionFromDefender);

            if (attacker.Symbols.ContainsKey(attackerSymbolLocalDirection))
            {
                var symbol = attacker.Symbols[attackerSymbolLocalDirection];
                var effect = attackingEffectExtractor(symbol);

                var attackerBattlefieldVision = new BattlefieldVision(attacker, attackerSymbolLocalDirection, _units, _mapModel, battleCircumstances);
                if (effect.IsActivated(attackerBattlefieldVision, attacker.Position))
                {
                    AddEngagementElement(attacker, defender, engagement, effect);
                    effect.Execute(attackerBattlefieldVision, attacker.Position, engagementResult);
                }
                if (!effect.IsDefendableEffect)
                {
                    return(engagement);
                }
                if (defender.Symbols.ContainsKey(defendingSymbolLocalDirection))
                {
                    var defenderBattlefieldVision = new BattlefieldVision(defender, defendingSymbolLocalDirection, _units, _mapModel, battleCircumstances);
                    var defenderEffect            = defender.Symbols[defendingSymbolLocalDirection].ReactEffect;
                    if (defenderEffect.IsActivated(defenderBattlefieldVision, attacker.Position))
                    {
                        AddEngagementElement(defender, attacker, engagement, defenderEffect);
                        defenderEffect.Execute(defenderBattlefieldVision, attacker.Position, engagementResult);
                    }
                }
            }
            return(engagement);
        }
Exemplo n.º 7
0
 public JourneyBattle(BattleCircumstances battleCircumstances)
 {
     _battleCircumstances = battleCircumstances;
 }