#pragma once #include #include "dbc.hpp" #include "point.hpp" #include #include "matrix.hpp" #include "pathing.hpp" namespace lighting { struct LightSource { int strength = 0; // lower is better int distance = 1; // higher is farther, in squares }; const int MIN = 40; const int MAX = 220; const int MID = 140; const std::array LEVELS{ MAX, 200, 180, 160, MID, 120, 100, 80, 60, MIN, }; class LightRender { public: int $limit; size_t $width; size_t $height; Matrix $lightmap; Pathing $paths; LightRender(size_t width, size_t height, int limit) : $limit(limit), $width(width), $height(height), $lightmap(height, MatrixRow(width, 0)), $paths(width, height, limit) {} void reset_light(); void set_light_target(const Point &at, int value=0); void clear_light_target(const Point &at); void path_light(Matrix &walls); void light_box(LightSource source, Point from, Point &min_out, Point &max_out); int light_level(int level, size_t x, size_t y); void render_light(LightSource source, Point at); Matrix &lighting() { return $lightmap; } }; }