Example #1
0
        public static void LightRefresh()
        {
            int scale = (int)cvarLightmapScale.Valuef();
            int ctr   = renderer.TEXSIZE / 2;

            for (var x = 0; x < LightmapSize; x += scale)
            {
                for (var y = 0; y < LightmapSize; y += scale)
                {
                    lightmap[x, y] = Color.Black;

                    var wc = new vector(x / renderer.TEXSIZE, y / renderer.TEXSIZE);

                    for (var l = 0; l < _lights.Count; l++)
                    {
                        var inf = _lights.ElementAt(l).Value;
                        var pos = new vector(x, y);

                        /*
                         * if (world.map[(int) wc.x, (int) wc.y].wall || !inf.set.Contains(pos)) continue;
                         *
                         * var lvec = _lights.ElementAt(l).Key * renderer.TEXSIZE + new vector(ctr, ctr);
                         * var p = (int)pos.DistanceTo(lvec) * 255 * 2;
                         * var i = (255 - (p / 255).Clamp(0, 255)) / 255;
                         *
                         * for (int xs = 0; xs < scale; xs++)
                         * for (int ys = 0; ys < scale; ys++)
                         * lightmap[x + xs, y + ys] = LightmapBlend(lightmap[x, y], inf.c, i);*/

                        if (world.map[(int)wc.x, (int)wc.y].wall || !inf.set.Contains(pos))
                        {
                            continue;
                        }

                        var lvec = (_lights.ElementAt(l).Key + new vector(0.5f, 0.5f)) * renderer.TEXSIZE;

                        int dist = (int)pos.DistanceTo(lvec) / (scale * 2);
                        int i    = (255 / ((dist).Clamp(0, 255) + 1));

                        for (int xs = 0; xs < scale; xs++)
                        {
                            for (int ys = 0; ys < scale; ys++)
                            {
                                lightmap[x + xs, y + ys] = LightmapBlend(lightmap[x, y], inf.c, (float)i / 255);
                            }
                        }
                    }
                }
            }

            if (cvarLightmapDebug.Valueb())
            {
                WriteLightmap();
            }
        }