/// <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; }
/// <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); }
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); }
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); }
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); }
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); }
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); }
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; }
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; }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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; }
public void Init() { this.Pathfinder = this.CreateInstance(this.CalculateOctileHeuristic); }