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); }
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); }