TODAY'S GOAL:

* Goblins will be in the world and not move or are already dead.
* https://pkl-lang.org/
* Check out https://github.com/stephenberry/glaze
* Things are still in walls because I +1 the x,y if they're colliding.
* Config loader should setup the "id" based on the key to avoid errors.
* Colision fails when you place two entities on the same square, but the init_positions adds them and one deletes the other.
* Create a move function for iterators that recalculates their position to make it easy to move them inside the matrix.  This can then be used in lighting. Just make an iterator once, and move it around after.
* Components::Tile must also die and turned into Components::Actor or something like that.
* Fire icon \u2034
* Water icon \u224b
* Flame pillars icon \u2e3e
* matrix::in_box needs a rectangle alternative and actually viewport could be a function that just takes a viewport spec and returns a rectangle for it.

* Study https://github.com/hirdrac/gx_lib/blob/main/gx/Unicode.hh
* Study this https://en.cppreference.com/w/cpp/language/explicit
* Study https://en.cppreference.com/w/cpp/language/member_functions#Special_member_functions

-1. Learn std::initializer_list by using it.
0. \ua3fd causes the character immediately after to vanish. Make a test and solve it.
1. Why do Sliders only have to be kept around forever and can't go in containers like everything else?

* Enemies stuck in walls after generation.

TODO:

* Add a char lookup input to the designer.

* Make the light directional.

* Refine the event handling to pass most of them to the gui panels and then I can intercept them.

* Fix BUG markers as much as possible.

* A condition map that indicates what each tile's condition is, so it can have "watery", "wet", "mossy", "burned", and that changes the color of the foreground/background but not the actual tile.

* Save file needs work, it's not saving gold and lights.

* When fighting two enemies with lots of attacks it crashes because one dies and isn't there.  Test by making enemies immortal.

* Format of pre/post in dbc isn't consistent with the rest of the lib but I also maybe don't need the function version?

* I can do headless windows in renderer for testing.
  - renderer.$window.setVisible(false);

* Think up an enemy system.
* Write a method for renderer that can translate coordinates.
* Can std::any be defaulted to a noop in the events?
* Maybe an LOS system, but the hearing version works pretty well so far.
* Probably a system for mapping collision types to sound effects, rather than having the GUI do it.

* BUG: When enemies die they can be overlapping another enemy.
