Exemple #1
0
        /// <summary>
        /// Constructor initializes tile array and tile textures.
        /// </summary>
        /// <param name="tile1Texture">Texture for floor tile.</param>
        /// <param name="tile2Texture">Texture for blocked/wall tile.</param>
        public Map(Texture2D tile1Texture, Texture2D tile2Texture)
        {
            tiles = new int[gridSize, gridSize];
            for (int i = 0; i < gridSize; i++)
                for (int j = 0; j < gridSize; j++)
                    tiles[i,j] = 0;

            pathfinder = null;

            this.tile1Texture = tile1Texture;
            this.tile2Texture = tile2Texture;
        }
Exemple #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Room"/> class.
 /// </summary>
 /// <param name="campaign">The campaign this item belongs to.</param>
 /// <param name="backgroundID">The ID of the room background.</param>
 /// <param name="walkAreaID">The ID of the room walk area.</param>
 /// <param name="hotSpotMaskID">The ID of the room hot spot mask.</param>
 protected Room(
     Campaign campaign,
     string backgroundID,
     string walkAreaID,
     string hotSpotMaskID)
     : base(campaign)
 {
     this.pathfinder = new AStar(2500, (node, neighbor) => 1, this.CalculateOctileHeuristic);
     this.backgroundID = backgroundID;
     this.walkAreaID = walkAreaID;
     this.hotSpotMaskID = hotSpotMaskID;
     this.characters = new List<Character>();
     this.items = new List<Item>();
     this.hotspots = new Dictionary<Color, Hotspot>();
 }
        private string OneBestMove(GameState gameState, IPathfinder pathfinder)
        {
            string murderDirection = murderAlgo(gameState);
            if (!string.IsNullOrEmpty(murderDirection)) {
                Console.Out.WriteLine("WARWARWAR");
                return murderDirection;
            }

            // If we suddenly lost a lot of life, maybe we should reconsider.
            if (heroLife.HasValue && heroLife.Value >= (gameState.myHero.life + 20)) {
                Console.WriteLine("EvenBestChoice: LOW ON LIFE! Maybe we were attacked?");
                target = null;
            }
            heroLife = gameState.myHero.life;

            // If we suddenly moved a lot, maybe we should reconsider.
            if (heroPos != null && Pos.DistanceBetween(heroPos, gameState.myHero.pos) >= 2) {
                Console.WriteLine("EvenBestChoice: TELEPORTED! Maybe we were killed?");
                target = null;
            }
            heroPos = gameState.myHero.pos;

            Tuple<PathData, TargetInfo> pathDataAndTarget = null;
            if (target != null) {
                Console.WriteLine("EvenBestChoice: Current target: ({0},{1}) [tile {2}]", target.pos.x, target.pos.y, target.tile);
                pathDataAndTarget = Tuple.Create(pathfinder.pathTo(target.pos, gameState.myHero.pos, gameState.board, SPIKE_COST), target);
            } else {
                // Seek mine if possible, otherwise seek a tavern
                if (gameState.myHero.life >= 35) {
                    pathDataAndTarget = SeekMine(gameState, pathfinder);
                }
                if (pathDataAndTarget == null || pathDataAndTarget.Item1.lostHealth >= gameState.myHero.life) {
                    pathDataAndTarget = SeekTavern(gameState, pathfinder);
                }
            }

            // If this is the last move, release target unless it's a tavern and we're < 90 life
            if (target != null && pathDataAndTarget != null && pathDataAndTarget.Item1.nextDirection != Direction.Stay &&
                Pos.DistanceBetween(target.pos, gameState.myHero.pos) <= 1 && (target.tile != Tile.TAVERN || gameState.myHero.life >= 90)) {

                Console.WriteLine("EvenBestChoice: Reached destination ({0},{1}) [{2}], releasing target",
                    target.pos.x, target.pos.y, target.tile);
                target = null;
            }
            string nextDirection = pathDataAndTarget != null ? pathDataAndTarget.Item1.nextDirection : null;
            return !String.IsNullOrEmpty(nextDirection) ? nextDirection : Direction.Stay;
        }
        public PhantomsEmbraceEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.Invisibility);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.MagicShield);

            this.Counters.Remove(Abilities.BlackKingBar);
            this.Counters.Remove(Abilities.Bristleback);
            this.Counters.Remove(Abilities.Enrage);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.Add(Abilities.EulsScepterOfDivinity);
            this.ModifierCounters.Add(Abilities.HeavenlyGrace);
            this.ModifierCounters.Add(Abilities.AphoticShield);
        }
Exemple #5
0
        public ConcussiveShotEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.UnionWith(Abilities.VsProjectile);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.Shield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);

            this.Counters.Remove(Abilities.Counterspell);

            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.UnionWith(Abilities.MagicShield);
            this.ModifierCounters.Remove(Abilities.EulsScepterOfDivinity);
            this.ModifierCounters.Remove(Abilities.WindWaker);
            this.ModifierCounters.Remove(Abilities.Stormcrafter);
        }
Exemple #6
0
        public EMPEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.Mischief);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.Add(Abilities.BladeMail);

            this.Counters.Remove(Abilities.DarkPact);
            this.Counters.Remove(Abilities.ShadowDance);
            this.Counters.Remove(Abilities.ShadowRealm);
        }
Exemple #7
0
        public EarthshockEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.Mischief);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.Shield);
            this.Counters.Add(Abilities.HurricanePike);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.Add(Abilities.BladeMail);

            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
        }
Exemple #8
0
        public IcePathEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            //todo add obstacle
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Bulwark);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.UnionWith(Abilities.SlowHeal);
            this.Counters.Add(Abilities.BladeMail);
        }
Exemple #9
0
        public void ResolveNextStep_NextStepIsDestinationButUnwalkable_ReturnsUnreachable()
        {
            var               currentPosition  = new Position(2, 2);
            var               destination      = new Position(3, 2);
            IPathfinder       pathfinder       = Mock.Of <IPathfinder>();
            IGridInfoProvider gridInfoProvider = Mock.Of <IGridInfoProvider>(p => p.IsWalkable(destination) == false);
            var               navigator        = new Navigator(pathfinder, gridInfoProvider, Mock.Of <INaturalLineCalculator>(), Mock.Of <IRasterLineCreator>(),
                                                               Mock.Of <IUiFacade>());
            var navigationData = new NavigationData
            {
                Destination = destination,
                RemainingStepsInCurrentSegment = new Stack <Position>(new[] { destination, currentPosition })
            };

            Position         nextStep;
            NavigationResult result = navigator.ResolveNextStep(navigationData, currentPosition, out nextStep);

            result.Should().Be(NavigationResult.Unreachable);
        }
Exemple #10
0
 public PostHeartbeatSystem(IEntityDetector entityDetector, IGameConfig gameConfig,
                            ICalculatedAreaAccessor calculatedAreaAccessor, IStimulusReceiver stimulusReceiver, IPathfinder pathfinder,
                            IBroadcastStimulusSender broadcastStimulusSender, IPositionEffectPresenter positionEffectPresenter,
                            GameContext context, IFriendshipResolver friendshipResolver,
                            IUiFacade uiFacade, IOsnowaContextManager contextManager)
     : base(context)
 {
     _entityDetector          = entityDetector;
     _gameConfig              = gameConfig;
     _calculatedAreaAccessor  = calculatedAreaAccessor;
     _stimulusReceiver        = stimulusReceiver;
     _pathfinder              = pathfinder;
     _broadcastStimulusSender = broadcastStimulusSender;
     _positionEffectPresenter = positionEffectPresenter;
     _friendshipResolver      = friendshipResolver;
     _uiFacade       = uiFacade;
     _contextManager = contextManager;
     _context        = context;
 }
Exemple #11
0
        public void Init(IPathfinder pathfinder, ITilemapInitializer tilemapInitializer,
                         IEntityViewBehaviourInitializer entityViewBehaviourInitializer, IGameConfig gameConfig, IViewCreator viewCreator,
                         IPositionFlagsResolver positionFlagsResolver, IStimulusHandler stimulusHandler,
                         ISavedComponents savedComponents, GameContext context, PerInitiativeFeature perInitiativeFeature, RealTimeFeature realTimeFeature,
                         IOsnowaContextManager contextManager, IGrid grid)
        {
            _realTimeFeature      = realTimeFeature;
            _perInitiativeFeature = perInitiativeFeature;

            _tilemapInitializer    = tilemapInitializer;
            _pathfinder            = pathfinder;
            _gameConfig            = gameConfig;
            _positionFlagsResolver = positionFlagsResolver;
            _stimulusHandler       = stimulusHandler;
            _savedComponents       = savedComponents;
            _context        = context;
            _contextManager = contextManager;
            _grid           = grid;
        }
Exemple #12
0
        public void ResolveNextStep_NavigationDataIsCorrupted_RecalculationIsUsed(NavigationData inputNavigationData)
        {
            IPathfinder       pathfinder       = Mock.Of <IPathfinder>();
            IGridInfoProvider gridInfoProvider = Mock.Of <IGridInfoProvider>(p =>
                                                                             p.IsWalkable(It.IsAny <Position>()) == true &&
                                                                             p.IsWalkable(new Position(2, 2)) == false &&
                                                                             p.IsWalkable(new Position(3, 2)) == false // two walls, so that no recalculated nodes are skipped
                                                                             );
            var bresenham         = new BresenhamLineCreator();
            var navigatorMockReal = new Mock <Navigator>(pathfinder, gridInfoProvider, new NaturalLineCalculator(bresenham),
                                                         bresenham, Mock.Of <IUiFacade>())
            {
                CallBase = true
            };
            Position        currentPosition = new Position(1, 1);
            List <Position> recalculatedRemainingNodes = new[] { new Position(3, 1), new Position(4, 3) }.ToList();
            var             recalculatedNavigationData = new NavigationData
            {
                Destination    = recalculatedRemainingNodes[1],
                RemainingNodes = recalculatedRemainingNodes,
                RemainingStepsInCurrentSegment = new Stack <Position>(),
                LastStep = currentPosition
            };

            navigatorMockReal.Setup(n => n.GetNavigationData(currentPosition, recalculatedRemainingNodes[1]))
            .Returns(recalculatedNavigationData);

            Position         nextStep;
            NavigationResult result = navigatorMockReal.Object.ResolveNextStep(inputNavigationData, currentPosition, out nextStep);

            result.Should().Be(NavigationResult.InProgressWithRecalculation);
            var expectedNavigationData = new NavigationData
            {
                Destination    = recalculatedRemainingNodes[1],
                RemainingNodes = recalculatedRemainingNodes,
                RemainingStepsInCurrentSegment = new Stack <Position>(new[] { recalculatedRemainingNodes[0] }),
                LastStep = new Position(2, 1)
            };

            inputNavigationData.Should().BeEquivalentTo(expectedNavigationData);
            nextStep.Should().Be(new Position(2, 1));
        }
Exemple #13
0
        public SilenceEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.UnionWith(Abilities.Invisibility);

            this.Counters.Remove(Abilities.Enrage);
            this.Counters.Remove(Abilities.EulsScepterOfDivinity);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
        }
        public ChargeOfDarknessEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Disables.UnionWith(Abilities.SimpleStun);
            this.Disables.UnionWith(Abilities.Root);
            this.Disables.UnionWith(Abilities.Invulnerability);
            this.Disables.UnionWith(Abilities.PhysDisable);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.HurricanePike);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.StrongPhysShield);
            this.Counters.UnionWith(Abilities.Invisibility);
            this.Counters.Add(Abilities.BladeMail);
            this.Counters.Add(Abilities.LotusOrb);
        }
Exemple #15
0
        public MysticFlareEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.Add(Abilities.ForceBoots);
            this.Blinks.Add(Abilities.ForceStaff);
            this.Blinks.Add(Abilities.HurricanePike);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.HurricanePike);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.Add(Abilities.BladeMail);

            this.Counters.Remove(Abilities.DarkPact);
            this.Counters.Remove(Abilities.ShadowDance);
            this.Counters.Remove(Abilities.ShadowRealm);
        }
Exemple #16
0
        public LifeDrainEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.Counterspell);

            this.ModifierCounters.Add(Abilities.PhaseShift);
            this.ModifierCounters.Add(Abilities.EulsScepterOfDivinity);
            this.ModifierCounters.Add(Abilities.WindWaker);
            this.ModifierCounters.Add(Abilities.Stormcrafter);
            this.ModifierCounters.Add(Abilities.SleightOfFist);
            this.ModifierCounters.Add(Abilities.BallLightning);
            this.ModifierCounters.UnionWith(Abilities.Shield);
            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.MagicShield);
            this.ModifierCounters.Add(Abilities.BladeMail);

            this.ModifierDisables.UnionWith(Abilities.Disable);
            this.ModifierDisables.UnionWith(Abilities.ChannelDisable);
            this.ModifierDisables.UnionWith(Abilities.Invulnerability);
        }
Exemple #17
0
        public GustEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);
            this.Disables.UnionWith(Abilities.PhysDisable);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.StrongPhysShield);
            this.Counters.Add(Abilities.Spoink);

            this.Counters.Remove(Abilities.Enrage);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.UnionWith(Abilities.StrongPhysShield);
        }
Exemple #18
0
        public NullifierEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Counters.UnionWith(Abilities.VsDisableProjectile);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.Add(Abilities.LotusOrb);
            this.Counters.Add(Abilities.Armlet);

            this.Counters.Remove(Abilities.Enrage);
            this.Counters.Remove(Abilities.ShadowDance);
            this.Counters.Remove(Abilities.SpikedCarapace);
            this.Counters.Remove(Abilities.Refraction);
            this.Counters.Remove(Abilities.ShadowRealm);
            this.Counters.Remove(Abilities.ShadowRealm);
            this.Counters.Remove(Abilities.LifeBreak);
        }
Exemple #19
0
        public PitOfMaliceEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.PhaseShift);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.Add(Abilities.PressTheAttack);
            this.ModifierCounters.Add(Abilities.Enrage);
            this.ModifierCounters.Add(Abilities.ChemicalRage);
            this.ModifierCounters.UnionWith(Abilities.Invulnerability);

            this.ModifierCounters.Remove(Abilities.EulsScepterOfDivinity);
            this.ModifierCounters.Remove(Abilities.DarkPact);
        }
        public SanitysEclipseEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.Mischief);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.Add(Abilities.BladeMail);
        }
Exemple #21
0
        public EarthSplitterEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.Mischief);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.EulsScepterOfDivinity);
            this.Counters.Add(Abilities.WindWaker);
            this.Counters.Add(Abilities.Stormcrafter);
            this.Counters.Add(Abilities.Snowball);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.Shield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.Add(Abilities.BladeMail);
        }
Exemple #22
0
        public EarthbindEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.BallLightning);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.SlowHeal);
            this.Counters.Add(Abilities.BladeMail);

            this.Counters.Remove(Abilities.Enrage);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.Add(Abilities.PressTheAttack);
            this.ModifierCounters.Add(Abilities.Enrage);
            this.ModifierCounters.Add(Abilities.ChemicalRage);
            this.ModifierCounters.UnionWith(Abilities.Invulnerability);
        }
Exemple #23
0
        public TorrentEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.Mischief);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.UnionWith(Abilities.SlowHeal);
            this.Counters.Add(Abilities.BladeMail);
            this.Counters.Add(Abilities.Bulwark);

            this.ModifierCounters.UnionWith(Abilities.AllyStrongPurge);
            this.ModifierCounters.Add(Abilities.PressTheAttack);
        }
Exemple #24
0
        public GlimpseEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.Add(Abilities.Burrowstrike);
            this.Blinks.Add(Abilities.FireRemnant);

            this.Counters.Add(Abilities.Doppelganger);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.XMark);
            this.Counters.UnionWith(Abilities.MagicImmunity);
            this.Counters.Add(Abilities.PhaseShift);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.Add(Abilities.TricksOfTheTrade);
            this.Counters.Add(Abilities.Snowball);
            this.Counters.UnionWith(Abilities.MagicShield);

            this.Counters.Remove(Abilities.Bristleback);

            this.ProactiveCounters.Add(Abilities.Counterspell);
        }
Exemple #25
0
 public UnitMapper(
     IAttributeRepository attributeRepository,
     IPropertyRepository propertyRepository,
     IBehaviourTreeRepository behaviourTreeRepository,
     IBehaviourRepository behaviourRepository,
     ISkillRepository skillRepository,
     IArchetypeDataRepository archetypeDataRepository,
     ILootDataRepository lootDataRepository,
     IItemRepository itemRepository,
     IPathfinder pathfinder)
 {
     this.attributeRepository     = attributeRepository;
     this.propertyRepository      = propertyRepository;
     this.behaviourTreeRepository = behaviourTreeRepository;
     this.behaviourRepository     = behaviourRepository;
     this.skillRepository         = skillRepository;
     this.archetypeDataRepository = archetypeDataRepository;
     this.lootDataRepository      = lootDataRepository;
     this.itemRepository          = itemRepository;
     this.pathfinder = pathfinder;
 }
Exemple #26
0
        public StoneFormEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.Add(Abilities.HurricanePike); //todo test
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.Add(Abilities.BladeMail);

            this.ModifierCounters.UnionWith(Abilities.AllyStrongPurge);
            this.ModifierCounters.UnionWith(Abilities.Invulnerability);
            this.ModifierCounters.UnionWith(Abilities.StrongMagicShield);
        }
Exemple #27
0
        public void ResolveNextStep_NextStepIsUnwalkableAndRecalculatingFails_ReturnsUnreachable(bool nextStepIsDestination)
        {
            var               currentPosition  = new Position(2, 2);
            var               destination      = new Position(4, 2);
            Position          plannedNextStep  = nextStepIsDestination ? destination : new Position(3, 2);
            IPathfinder       pathfinder       = Mock.Of <IPathfinder>();
            var               bresenham        = new BresenhamLineCreator();
            IGridInfoProvider gridInfoProvider = Mock.Of <IGridInfoProvider>(p => p.IsWalkable(plannedNextStep) == false);
            var               navigator        = new Navigator(pathfinder, gridInfoProvider, new NaturalLineCalculator(bresenham), bresenham,
                                                               Mock.Of <IUiFacade>());
            var navigationData = new NavigationData
            {
                Destination = destination,
                RemainingStepsInCurrentSegment = new Stack <Position>(new[] { plannedNextStep, currentPosition })
            };

            Position         nextStep;
            NavigationResult result = navigator.ResolveNextStep(navigationData, currentPosition, out nextStep);

            result.Should().Be(NavigationResult.Unreachable);
        }
Exemple #28
0
        public TerrorizeEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.MantaStyle);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.UnionWith(Abilities.SlowHeal);
            this.Counters.Add(Abilities.BladeMail);

            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.UnionWith(Abilities.Invulnerability);
            this.ModifierCounters.UnionWith(Abilities.StrongMagicShield);
        }
Exemple #29
0
        public SacredArrowEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.sacredArrow = (SacredArrow)ability;

            this.Counters.Add(Abilities.BallLightning);
            // Counters.Add(Abilities.MantaStyle); //todo test
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.Add(Abilities.Spoink);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.StrongMagicShield);
            this.Counters.UnionWith(Abilities.Invulnerability);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.UnionWith(Abilities.SlowHeal);
            this.Counters.Add(Abilities.BladeMail);
            this.Counters.Add(Abilities.Bulwark);

            this.ModifierCounters.UnionWith(Abilities.AllyStrongPurge);
            this.ModifierCounters.Add(Abilities.PressTheAttack);
            this.ModifierCounters.UnionWith(Abilities.Invulnerability);
        }
        public StaticRemnantEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Counters.Add(Abilities.SleightOfFist);
            this.Counters.Add(Abilities.BallLightning);
            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.UnionWith(Abilities.Shield);
            this.Counters.UnionWith(Abilities.MagicShield);
            this.Counters.UnionWith(Abilities.Heal);
            this.Counters.Add(Abilities.Armlet);
            this.Counters.UnionWith(Abilities.Suicide);
            this.Counters.Add(Abilities.BladeMail);

            this.singleCounters.Add(Abilities.Refraction);
            this.singleCounters.Add(Abilities.SpikedCarapace);
            this.singleCounters.Add(Abilities.AttributeShift);
            this.singleCounters.UnionWith(Abilities.MagicShield);
            this.singleCounters.UnionWith(Abilities.Heal);
            this.singleCounters.Add(Abilities.Armlet);
            this.singleCounters.UnionWith(Abilities.Suicide);
            this.singleCounters.Add(Abilities.BladeMail);
        }
        public GlobalSilenceEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Blinks.UnionWith(Abilities.Blink);

            this.Disables.UnionWith(Abilities.Disable);

            this.Counters.Add(Abilities.AttributeShift);
            this.Counters.Add(Abilities.FortunesEnd);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.Invisibility);

            this.Counters.Remove(Abilities.Bristleback);
            this.Counters.Remove(Abilities.Enrage);
            this.Counters.Remove(Abilities.EulsScepterOfDivinity);
            this.Counters.Remove(Abilities.FatesEdict);
            this.Counters.Remove(Abilities.BlackKingBar);

            this.ModifierCounters.Add(Abilities.MantaStyle);
            this.ModifierCounters.UnionWith(Abilities.AllyPurge);
            this.ModifierCounters.Add(Abilities.PressTheAttack);
        }
Exemple #32
0
        public MultishotEvadable(Ability9 ability, IPathfinder pathfinder, IMainMenu menu)
            : base(ability, pathfinder, menu)
        {
            this.Multishot = (Multishot)ability;

            this.Disables.UnionWith(Abilities.Disable);
            this.Disables.UnionWith(Abilities.ChannelDisable);
            this.Disables.UnionWith(Abilities.Invulnerability);

            this.Counters.Add(Abilities.Bulwark);
            this.Counters.UnionWith(Abilities.StrongShield);
            this.Counters.UnionWith(Abilities.StrongPhysShield);
            this.Counters.Add(Abilities.BladeMail);
            this.Counters.UnionWith(Abilities.Heal);

            this.Counters.ExceptWith(Abilities.MagicImmunity);
            this.Counters.Remove(Abilities.HeavenlyGrace);
            this.Counters.Remove(Abilities.Bulldoze);
            this.Counters.Remove(Abilities.DarkPact);
            this.Counters.Remove(Abilities.ShadowDance);
            this.Counters.Remove(Abilities.Windrun);
        }
Exemple #33
0
        public PathRequest <NodePath> CreatePathRequest(IPathfinder <NodePath> pathfinder, IDefinitionNodeNetwork definitionNodes, float x1, float y1, float x2, float y2, PathfindaxCollisionCategory collisionLayer = PathfindaxCollisionCategory.None, byte agentSize = 1)
        {
            DefinitionNode startNode;
            DefinitionNode endNode;

            switch (definitionNodes)
            {
            case IDefinitionNodeGrid definitionNodeGrid:
                var offset = -GridClearanceHelper.GridNodeOffset(agentSize, definitionNodeGrid.Transformer.Scale);
                startNode = definitionNodeGrid.GetNode(x1 + offset.X, y1 + offset.Y);
                endNode   = definitionNodeGrid.GetNode(x2 + offset.X, y2 + offset.Y);
                return(PathRequest.Create(pathfinder, startNode, endNode, collisionLayer, agentSize));

            case IDefinitionNodeNetwork definitionNodeNetwork:
                startNode = definitionNodeNetwork.GetNode(x1, y1);
                endNode   = definitionNodeNetwork.GetNode(x2, y2);
                return(PathRequest.Create(pathfinder, startNode, endNode, collisionLayer, agentSize));

            default:
                throw new NotSupportedException($"{definitionNodes.GetType()} is not supported");
            }
        }
 private Tuple<PathData, TargetInfo> SeekMine(GameState gameState, IPathfinder pathfinder)
 {
     List<Tile> mineTiles = new List<Tile>(new[] {
         Tile.GOLD_MINE_NEUTRAL,
         Tile.GOLD_MINE_1,
         Tile.GOLD_MINE_2,
         Tile.GOLD_MINE_3,
         Tile.GOLD_MINE_4,
     });
     if (gameState.myHero.id == 1) {
         mineTiles.Remove(Tile.GOLD_MINE_1);
     } else if (gameState.myHero.id == 2) {
         mineTiles.Remove(Tile.GOLD_MINE_2);
     } else if (gameState.myHero.id == 3) {
         mineTiles.Remove(Tile.GOLD_MINE_3);
     } else if (gameState.myHero.id == 4) {
         mineTiles.Remove(Tile.GOLD_MINE_4);
     }
     return SeekTiles(gameState, pathfinder, MINE_COST, mineTiles.ToArray());
 }
 private Tuple<PathData, TargetInfo> SeekTavern(GameState gameState, IPathfinder pathfinder)
 {
     return SeekTiles(gameState, pathfinder, TAVERN_COST, Tile.TAVERN);
 }
        private Tuple<PathData, TargetInfo> SeekTiles(GameState gameState, IPathfinder pathfinder, int tileCost, params Tile[] soughtTiles)
        {
            // Scan game board and find path data to all matching tiles
            List<Tuple<Pos, Tile, PathData>> moves = new List<Tuple<Pos, Tile, PathData>>();
            SortedSet<Tile> tiles = new SortedSet<Tile>(soughtTiles);
            for (int x = 0; x < gameState.board.Length; ++x) {
                for (int y = 0; y < gameState.board[x].Length; ++y) {
                    Tile tile = gameState.board[x][y];
                    if (tiles.Contains(tile)) {
                        Pos pos = new Pos(x, y);
                        PathData curPathData = pathfinder.pathTo(pos, gameState.myHero.pos, gameState.board, SPIKE_COST);
                        
                        // Fix health if we don't have one
                        if (curPathData.lostHealth == 0) {
                            curPathData.lostHealth = curPathData.distance;
                        }

                        // Add tile cost to health cost
                        curPathData.lostHealth += tileCost;
                        
                        // Add potential target.
                        moves.Add(Tuple.Create(pos, tile, curPathData));
                    }
                }
            }

            // Seek to minimize lost health.
            moves.Sort((a, b) => a.Item3.lostHealth - b.Item3.lostHealth);

            // Find a move that will take us to the target.
            Tuple<PathData, TargetInfo> res = null;
            if (moves.Count != 0 && moves[0].Item3.distance < 1000) {
                res = Tuple.Create(moves[0].Item3, new TargetInfo(moves[0].Item1, moves[0].Item3.distance, moves[0].Item2));
                if (res.Item1.lostHealth >= gameState.myHero.life) {
                    Console.WriteLine("EvenBestChoice: WARNING: current choice will kill us: costs {0}, remaining life {1}",
                        res.Item1.lostHealth, gameState.myHero.life);
                }
            }
            if (res != null && res.Item1 == null) {
                res = null;
            }
            return res;
        }
 public string BestMove(GameState gameState, IPathfinder pathfinder)
 {
     return OneBestMove(gameState, pathfinder);
 }
Exemple #38
0
 /// <summary>
 /// Set the current pathfinding algorithm.
 /// </summary>
 /// <param name="algorithm">The algorithm to use in pathfinding.</param>
 public void SetPathfinder(PathfinderAlgorithm algorithm)
 {
     this.algorithm = algorithm;
     pathfinder = PathfinderFactory.CreatePathfinder(algorithm, gridSize, this);
     Console.WriteLine("Map.cs: Pathfinding algorithm set to " + pathfinder.GetName() + ".\n");
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="bestChoice">Object to pick best choice for next move.</param>
 /// <param name="pathfinder">Object to compute paths.</param>
 public BestBot(IBestChoice bestChoice, IPathfinder pathfinder)
 {
     this.bestChoice = bestChoice;
     this.pathfinder = pathfinder;
 }
Exemple #40
0
 public void Init()
 {
     this.Pathfinder = this.CreateInstance(this.CalculateOctileHeuristic);
 }