#pragma once #include #include "dbc.hpp" #include "point.hpp" #include #include "matrix.hpp" #include "pathing.hpp" namespace lighting { struct LightSource { int strength = 0; float radius = 1.0f; }; const int MIN = 35; const int MAX = 95; class LightRender { public: size_t $width; size_t $height; Matrix $lightmap; Pathing $paths; LightRender(size_t width, size_t height) : $width(width), $height(height), $lightmap(height, matrix::Row(width, 0)), $paths(width, height) {} 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(); } }; }