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