#pragma once #include #include "dbc.hpp" #include "point.hpp" #include #include "matrix.hpp" #include "pathing.hpp" #include "components.hpp" namespace lighting { using components::LightSource; // THESE ARE PERCENTAGES! const int MIN = 20; const int BOOST = 10; class LightRender { public: size_t $width; size_t $height; Matrix $lightmap; Matrix $ambient; Pathing $paths; LightRender(Matrix& walls); 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, float distance, size_t x, size_t y); void render_light(LightSource source, Point at); void render_square_light(LightSource source, Point at, PointList &has_light); void render_compass_light(LightSource source, Point at, PointList &has_light); void render_circle_light(LightSource source, Point at, PointList &has_light); Matrix &lighting() { return $lightmap; } Matrix &paths() { return $paths.paths(); } }; }