public void UpdateVisibility(Position observerPosition, int sightRange, GameEntity entity)
        {
            HashSet <Position> fieldOfView = _fovCalculator.CalculateFov(observerPosition, sightRange,
                                                                         position => _grid.IsPassingLight(position) || position == observerPosition);

            _tilePresenter.UpdateVisibility(fieldOfView);
            _entityPresenter.UpdateVisibility(fieldOfView, observerPosition, sightRange);
        }
        public void UpdateTileVisibility(Vector2Int actorPosition, int cellsRangeInVision)
        {
            List <IGameEntity> entitiesHit = _entityDetector.DetectEntities(actorPosition, cellsRangeInVision).ToList();

            Vector2Int           fovCenter    = actorPosition;
            HashSet <Vector2Int> visibleTiles = _fovCalculator.CalculateFov(fovCenter, cellsRangeInVision, _gridInfoProvider.IsPassingLight);

            _tilePresenter.Illuminate(visibleTiles);
            _entityPresenter.Illuminate(visibleTiles, entitiesHit);
        }
Beispiel #3
0
        public FovArea FetchVisibilityFov(Position center, int sightRange)
        {
            if (_cachedFovArea == null || _cachedFovArea.Center != center || _cachedFovArea.SightRange != sightRange)
            {
                HashSet <Position> fovPositions = _fovCalculator.CalculateFov(center, sightRange,
                                                                              position => _grid.IsPassingLight(position) || position == center);
                _cachedFovArea = new FovArea {
                    Center = center, SightRange = sightRange, Positions = fovPositions
                };
            }

            return(_cachedFovArea);
        }