Ejemplo n.º 1
0
        public void UpdateVisibilityMap(TerrainMap terrain, LightMap lightmap, Point origin)
        {
            // Reset the visible flag of the previous visible points
            if (visiblePoints != null)
            {
                foreach (var visiblePoint in visiblePoints)
                {
                    this[visiblePoint.Location.Coordinate].IsVisible = false;
                }
            }

            // Calculate new visible Fov
            visiblePoints = fovAlgorithm.CalculateFov(terrain, origin, fovProfile);

            // Evaluate each visible point against the lightmap
            // Only lit tiles are visible
            foreach (var visiblePoint in visiblePoints)
            {
                if (!fovProfile.IsVisible(lightmap[visiblePoint.Location.Coordinate].Colour))
                {
                    continue;
                }

                this[visiblePoint.Location.Coordinate].IsVisible = true;
                this[visiblePoint.Location.Coordinate].WasSeen   = true;
            }
        }
Ejemplo n.º 2
0
        private void ProcessLightsources(IEnumerable <LightSource> lightSources)
        {
            foreach (var lightSource in lightSources)
            {
                var litTiles = fovAlgorithm.CalculateFov(terrain, lightSource.Location.Coordinate, lightSource.FovProfile);

                foreach (var litTile in litTiles)
                {
                    var intensity = (1f /
                                     (lightSource.Attenuation.Constant +
                                      (lightSource.Attenuation.Linear * litTile.DistanceFromOrigin) +
                                      (lightSource.Attenuation.Quadratic * litTile.DistanceFromOrigin *
                                       litTile.DistanceFromOrigin)));

                    this[litTile.Location.Coordinate].Colour = AlphaBlendColours(intensity, this[litTile.Location.Coordinate].Colour, lightSource.Colour);
                    //this[litTile.Location.Coordinate].Colour = FromLibtcodColor(
                    //    libtcodWrapper.Color.Interpolate(ToLibtcodColor(this[litTile.Location.Coordinate].Colour), ToLibtcodColor(lightSource.Colour),
                    //                                     intensity));
                }
            }
        }