예제 #1
0
파일: Grid.cs 프로젝트: bmjoy/Osnowa
        public Grid(IOsnowaContextManager contextManager, bool contextShouldBePresent = false)
        {
            if (!contextManager.HasContext)
            {
                if (contextShouldBePresent)
                {
                    throw new ArgumentException("Missing context where it's expeteced to be present");
                }
            }
            else
            {
                _positionFlags         = contextManager.Current.PositionFlags;
                _walkability           = contextManager.Current.Walkability;
                _pathfindingDataHolder = contextManager.Current.PathfindingData;
            }

            contextManager.ContextReplaced += newContext =>
            {
                _positionFlags         = newContext.PositionFlags;
                _walkability           = newContext.Walkability;
                _pathfindingDataHolder = newContext.PathfindingData;
            };
            MinPosition = Position.Zero;

            _passingLightFlagAsUlong = Convert.ToUInt64(PositionFlag.PassingLight);
        }
예제 #2
0
        public void GetJumpPoints_IntegrationTest_ThereIsNoPathToTarget_ReturnsTargetUnreachable()
        {
            /* Illustration:
             * .......
             ###....
             #s#t...
             ###....*/

            int unityGridXSize = 20;
            int unityGridYSize = 20;
            var startPosition  = new Position(1, 1);
            var targetPosition = new Position(3, 1);
            IRasterLineCreator    bresenham      = new BresenhamLineCreator();
            IOsnowaContextManager contextManager = CreateContextManager(unityGridXSize, unityGridYSize);

            contextManager.Current.PathfindingData.UpdateWalkability(new Position(0, 0), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(0, 1), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(0, 2), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(1, 0), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(1, 2), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(2, 0), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(2, 1), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(2, 2), false);
            var pathfinder = new Pathfinder(contextManager, new NaturalLineCalculator(bresenham), bresenham);

            PathfindingResponse jpsResult = pathfinder.FindJumpPointsWithJps(startPosition, targetPosition);

            jpsResult.Result.Should().Be(PathfindingResult.FailureTargetUnreachable);
            jpsResult.Positions.Should().BeNull();

            PathfindingResponse aStarResult = pathfinder.FindJumpPointsWithSpatialAstar(startPosition, targetPosition);

            aStarResult.Result.Should().Be(PathfindingResult.FailureTargetUnreachable);
            aStarResult.Positions.Should().BeNull();
        }
예제 #3
0
        public void GetJumpPoints_IntegrationTest_WallIsBlockingWayToTarget_ReturnsCorrectPath()
        {
            /* Illustration:
             * ......
             * .#....
             * s#t...
             * .j....*/

            int unityGridXSize           = 20;
            int unityGridYSize           = 20;
            var startPosition            = new Position(0, 1);
            var targetPosition           = new Position(2, 1);
            var expectedMiddleJumpPoint  = new Position(1, 0);
            IRasterLineCreator bresenham = new BresenhamLineCreator();

            IOsnowaContextManager contextManager = CreateContextManager(unityGridXSize, unityGridYSize);

            contextManager.Current.PathfindingData.UpdateWalkability(new Position(1, 1), false);
            contextManager.Current.PathfindingData.UpdateWalkability(new Position(1, 2), false);
            var pathfinder = new Pathfinder(contextManager, new NaturalLineCalculator(bresenham), bresenham);

            IList <Position> jumpPoints = pathfinder.FindJumpPointsWithJps(startPosition, targetPosition).Positions;
            IList <Position> jumpPointsFromSpatialAstar = pathfinder.FindJumpPointsWithSpatialAstar(startPosition, targetPosition).Positions;

            jumpPoints.Count.Should().Be(3);
            jumpPoints[0].Should().Be(startPosition);
            jumpPoints[1].Should().Be(expectedMiddleJumpPoint);
            jumpPoints[2].Should().Be(targetPosition);

            jumpPointsFromSpatialAstar.Count.Should().Be(3);
            jumpPointsFromSpatialAstar[0].Should().Be(startPosition);
            jumpPointsFromSpatialAstar[1].Should().Be(expectedMiddleJumpPoint);
            jumpPointsFromSpatialAstar[2].Should().Be(targetPosition);
        }
예제 #4
0
 public EntityViewBehaviourInitializer(ISceneContext sceneContext, GameContext context, IGameConfig gameConfig, IOsnowaContextManager contextManager)
 {
     _sceneContext   = sceneContext;
     _context        = context;
     _gameConfig     = gameConfig;
     _contextManager = contextManager;
 }
예제 #5
0
파일: Pathfinder.cs 프로젝트: bmjoy/Osnowa
        public Pathfinder(IOsnowaContextManager contextManager, INaturalLineCalculator naturalLineCalculator, IRasterLineCreator rasterLineCreator)
        {
            _contextManager        = contextManager;
            _naturalLineCalculator = naturalLineCalculator;
            _rasterLineCreator     = rasterLineCreator;

            _contextManager.ContextReplaced += InitializeAlgorithms;
        }
예제 #6
0
파일: TurnManager.cs 프로젝트: bmjoy/Osnowa
 public TurnManager(IWorldClock worldClock,
                    PerInitiativeFeature perInitiativeFeature, RealTimeFeature realTimeFeature,
                    IOsnowaContextManager contextManager)
 {
     _worldClock           = worldClock;
     _perInitiativeFeature = perInitiativeFeature;
     _realTimeFeature      = realTimeFeature;
     _contextManager       = contextManager;
 }
예제 #7
0
 public VisibilityUpdater(ITilePresenter tilePresenter, IEntityPresenter entityPresenter, IFovCalculator fovCalculator, IGrid grid,
                          IOsnowaContextManager contextManager)
 {
     _grid            = grid;
     _fovCalculator   = fovCalculator;
     _tilePresenter   = tilePresenter;
     _entityPresenter = entityPresenter;
     _contextManager  = contextManager;
 }
예제 #8
0
        public DeathHandler(IUiFacade uiFacade, IViewCreator viewCreator, IGameConfig gameConfig, IPositionEffectPresenter positionEffectPresenter, IOsnowaContextManager contextManager)
        {
            _uiFacade    = uiFacade;
            _viewCreator = viewCreator;
            _gameConfig  = gameConfig;

            _positionEffectPresenter = positionEffectPresenter;
            _contextManager          = contextManager;
        }
예제 #9
0
        public UnityGridInfoProvider(ISceneContext sceneContext, IOsnowaContextManager contextManager)
        {
            _sceneContext = sceneContext;

            contextManager.ContextReplaced += newContext => _positionFlags = newContext.PositionFlags;

            _sceneContext.TilemapDefiningOuterBounds.CompressBounds();
            MinPosition = Position.Zero;
            CellSize    = _sceneContext.TilemapDefiningOuterBounds.cellSize.x;
        }
예제 #10
0
 public AttackAction(GameEntity entity, float energyCost, IActionEffectFactory actionEffectFactory, IRandomNumberGenerator rng, GameEntity attackedEntity, IGameConfig gameConfig, IAggressionTriggerer aggressionTriggerer, IPositionEffectPresenter positionEffectPresenter, IOsnowaContextManager contextManager, ReactiveFeature reactiveFeature)
     : base(entity, energyCost, actionEffectFactory)
 {
     AttackedEntity       = attackedEntity;
     _rng                 = rng;
     _actionEffectFactory = actionEffectFactory;
     _gameConfig          = gameConfig;
     _contextManager      = contextManager;
     _reactiveFeature     = reactiveFeature;
 }
예제 #11
0
파일: Pathfinder.cs 프로젝트: bmjoy/Osnowa
        /// <summary>
        /// Should be used only in object trees that are not created by dependency injection (e.g. map generation).
        /// </summary>
        public static Pathfinder Create(IOsnowaContextManager contextManager)
        {
            var bresenhamLineCreator = new BresenhamLineCreator();

            //Grid gridForMapGeneration = new Grid(contextManager, pathfindingDataHolder, true);
            var pathfinder = new Pathfinder(contextManager, new NaturalLineCalculator(bresenhamLineCreator), bresenhamLineCreator);

            //pathfinder.InitializeAlgorithms();
            return(pathfinder);
        }
예제 #12
0
 public void Init(IUnityGridInfoProvider unityGridInfoProvider, IUiFacade uiFacade, IOsnowaContextManager contextManager,
                  ITileByIdProvider tileByIdProvider, IGameConfig gameConfig, IEntityDetector entityDetector, GameContext context)
 {
     _tileByIdProvider      = tileByIdProvider;
     _contextManager        = contextManager;
     _uiFacade              = uiFacade;
     _unityGridInfoProvider = unityGridInfoProvider;
     _gameConfig            = gameConfig;
     _entityDetector        = entityDetector;
     _context = context;
 }
예제 #13
0
        public TilePresenter(ISceneContext sceneContext, IGameConfig gameConfig, IOsnowaContextManager contextManager,
                             ITileByIdProvider tileByIdProvider, ITileMatrixUpdater tileMatrixUpdater)
        {
            _gameConfig        = gameConfig;
            _sceneContext      = sceneContext;
            _contextManager    = contextManager;
            _tileByIdProvider  = tileByIdProvider;
            _tileMatrixUpdater = tileMatrixUpdater;

            _positionsToReset = new List <Position>(400);
        }
예제 #14
0
        public KeepDistanceActivity(IActionFactory actionFactory, int preferredDistance, INavigator navigator,
                                    GameEntity targetToKeepDistanceTo, ICalculatedAreaAccessor calculatedAreaAccessor, IRandomNumberGenerator rng, string name, IOsnowaContextManager contextManager)
            : base(name)
        {
            _actionFactory          = actionFactory;
            _preferredDistance      = preferredDistance;
            _navigator              = navigator;
            _targetToKeepDistanceTo = targetToKeepDistanceTo;

            _calculatedAreaAccessor = calculatedAreaAccessor;
            _rng            = rng;
            _contextManager = contextManager;

            _lastTargetPosition = targetToKeepDistanceTo.position.Position;
        }
예제 #15
0
 public void Init(IInputWithRepeating inputWithRepeating, IEnvironmentPresenter environmentPresenter,
                  GameContext context, IGameConfig gameConfig, IUiFacade uiFacade, ISceneContext sceneContext,
                  [Inject(Id = "_playerActionResolver")] IActionResolver playerActionResolver,
                  ResolveAbilitiesPerTurnSystem resolveAbilitiesPerTurnSystem,
                  PlayerInventoryChangedSystem playerInventoryChangedSystem, IOsnowaContextManager contextManager)
 {
     _keysToAbilities      = InitializeKeysToAbilities(gameConfig.Abilities.AllAbilities);
     _inputWithRepeating   = inputWithRepeating;
     _environmentPresenter = environmentPresenter;
     _context                       = context;
     _uiFacade                      = uiFacade;
     _sceneContext                  = sceneContext;
     _gameConfig                    = gameConfig;
     _playerActionResolver          = playerActionResolver;
     _resolveAbilitiesPerTurnSystem = resolveAbilitiesPerTurnSystem;
     _playerInventoryChangedSystem  = playerInventoryChangedSystem;
     _contextManager                = contextManager;
 }
예제 #16
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;
 }
예제 #17
0
        public void Init(IPathfinder pathfinder, ITilemapInitializer tilemapInitializer,
                         IEntityViewBehaviourInitializer entityViewBehaviourInitializer, IGameConfig gameConfig, IViewCreator viewCreator,
                         IPositionFlagsResolver positionFlagsResolver, IStimulusReceiver stimulusReceiver,
                         ISavedComponents savedComponents, GameContext context, PerInitiativeFeature perInitiativeFeature, RealTimeFeature realTimeFeature,
                         IOsnowaContextManager contextManager, IGrid grid)
        {
            _realTimeFeature      = realTimeFeature;
            _perInitiativeFeature = perInitiativeFeature;

            _tilemapInitializer    = tilemapInitializer;
            _pathfinder            = pathfinder;
            _gameConfig            = gameConfig;
            _positionFlagsResolver = positionFlagsResolver;
            _stimulusReceiver      = stimulusReceiver;
            _savedComponents       = savedComponents;
            _context        = context;
            _contextManager = contextManager;
            _grid           = grid;
        }
예제 #18
0
        public WorldClock(ISceneContext sceneContext, IGameConfig gameConfig,
                          IUiFacade uiFacadeUiFacade, IEntityDetector entityDetector, ITileMatrixUpdater tileMatrixUpdater,
                          IRandomNumberGenerator rng, IViewCreator viewCreator,
                          IOsnowaContextManager contextManager)
        {
            _sceneContext = sceneContext;

            _gameConfig        = gameConfig;
            _uiFacade          = uiFacadeUiFacade;
            _entityDetector    = entityDetector;
            _tileMatrixUpdater = tileMatrixUpdater;
            _rng            = rng;
            _viewCreator    = viewCreator;
            _contextManager = contextManager;
            _gameContext    = Contexts.sharedInstance.game;

            double minutesInDay = new TimeSpan(1, 0, 0, 0).TotalMinutes;

            _minutesInTurn = minutesInDay / _gameConfig.TurnsInDay;
        }
예제 #19
0
 public ActionFactory(IGrid grid, IActionEffectFactory actionEffectFactory, IUnityGridInfoProvider unityGridInfoProvider, IPositionEffectPresenter positionEffectPresenter, IRandomNumberGenerator randomNumberGenerator, IDeathHandler deathHandler, ISceneContext sceneContext, IGameConfig gameConfig, IViewCreator viewCreator, ITileMatrixUpdater tileMatrixUpdater, IFirstPlaceInAreaFinder firstPlaceInAreaFinder, IBroadcastStimulusSender stimulusBroadcaster, IEntityDetector entityDetector, LoadViewSystem loadViewSystem, IUiFacade uiFacade, IOsnowaContextManager contextManager, IEntityViewBehaviourInitializer entityViewBehaviourInitializer, IAggressionTriggerer aggressionTriggerer, IEntityGenerator entityGenerator, ReactiveFeature reactiveFeature)
 {
     _grid = grid;
     _unityGridInfoProvider   = unityGridInfoProvider;
     _positionEffectPresenter = positionEffectPresenter;
     _randomNumberGenerator   = randomNumberGenerator;
     _deathHandler            = deathHandler;
     _actionEffectFactory     = actionEffectFactory;
     _sceneContext            = sceneContext;
     _gameConfig             = gameConfig;
     _viewCreator            = viewCreator;
     _tileMatrixUpdater      = tileMatrixUpdater;
     _firstPlaceInAreaFinder = firstPlaceInAreaFinder;
     _stimulusBroadcaster    = stimulusBroadcaster;
     _entityDetector         = entityDetector;
     _loadViewSystem         = loadViewSystem;
     _uiFacade       = uiFacade;
     _contextManager = contextManager;
     _entityViewBehaviourInitializer = entityViewBehaviourInitializer;
     _aggressionTriggerer            = aggressionTriggerer;
     _entityGenerator = entityGenerator;
     _reactiveFeature = reactiveFeature;
 }
예제 #20
0
 public ContextManagerBehaviour()
 {
     _contextManager = new OsnowaContextManager();
     _contextManager.ContextReplaced += ContextReplaced;
 }
예제 #21
0
 public EntityPresenter(IOsnowaContextManager contextManager, IUiFacade uiFacade, IPositionedEntityDetector entityDetector)
 {
     _contextManager = contextManager;
     _uiFacade       = uiFacade;
     _entityDetector = entityDetector;
 }
예제 #22
0
 public TilemapGenerator(ISceneContext sceneContext, IGameConfig gameConfig, IOsnowaContextManager contextManager)
 {
     _sceneContext   = sceneContext;
     _contextManager = contextManager;
     _tileset        = gameConfig.Tileset;
 }
예제 #23
0
 private static Mock <TilePresenter> CreateTilePresenterMockWithRealIlluminateImplementation(SceneContextMock sceneContext)
 {
     IOsnowaContextManager contextManager    = Mock.Of <IOsnowaContextManager>();
     ITileMatrixUpdater    tileMatrixUpdater = Mock.Of <ITileMatrixUpdater>();
     var mock = new Mock <TilePresenter>(sceneContext, default, contextManager, new TileByIdFromFolderProvider(), tileMatrixUpdater)
예제 #24
0
 public void Init(IUiFacade uiFacade, IOsnowaContextManager contextManager)
 {
     _uiFacade       = uiFacade;
     _contextManager = contextManager;
 }
예제 #25
0
 public void Init(IObjectToHashColorCalculator objectToHashColorCalculator, IOsnowaContextManager contextManager)
 {
     _objectToHashColorCalculator = objectToHashColorCalculator;
     _contextManager = contextManager;
 }
예제 #26
0
        public TileMatrixUpdater(IPositionFlagsResolver positionFlagsResolver, IGameConfig gameConfig,
                                 ITileByIdProvider tileByIdProvider, ISceneContext sceneContext, IOsnowaContextManager contextManager)
        {
            _positionFlagsResolver = positionFlagsResolver;
            _gameConfig            = gameConfig;
            _tileByIdProvider      = tileByIdProvider;
            _sceneContext          = sceneContext;

            contextManager.ContextReplaced += newContext => _tileMatricesByteByLayer = newContext.TileMatricesByLayer;
        }
예제 #27
0
 public PositionFlagsResolver(IOsnowaContextManager contextManager, IGameConfig gameConfig, ILogger logger)
 {
     contextManager.ContextReplaced += OnContextReplaced;
     _gameConfig = gameConfig;
     _logger     = logger;
 }
예제 #28
0
 public void Init(IOsnowaContextManager contextManager, IEntityDetector entityDetector)
 {
     _contextManager = contextManager;
     _entityDetector = entityDetector;
 }