UI and Penrose Optimizations
Clockwork Sword
In the most recent sprint, I created new UI for the death and victory screens including a prefab that can render particles in UI space and custom title art.

I also made several improvements and major bug fixes to the workbench including further reducing lag, adding click and dragging to spin the weapon wheel, new item highlighting, and sound queues requested by our technical sound designer.

I also improved the item pickups I made last sprint so that the item mesh was always properly centered and I also attached the same fx to the health pickup.
I also made the desktop icon for the game by refining the discord server logo I made last semester.
Misc Side Projects
I continued working on my Penrose pattern generator and got it able to generate large radially symmetric Penrose tile patterns (non-symmetric are a WIP).
After I got the pattern generation working I wanted to optimize it so that any tile on the pattern could be location queried in O(1) time. I first tried storing all the tiles in a Quadtree but that was slow and unnecessarily complex so I switched to storing them in chunks which was just a 2D array of lists where the rounded world positioned the index into the 2D array to get a list of all the tiles in said chunk and this worked well.
But the project was still lagging after playing for a little bit even when the only action was to unrender and rerender the same chunks. After investigating my code I found that none of my data structures were growing over time so I decided to download Rider so I could profile the project. It turns out that the main time sink when lagging was the calls to Godot's DrawPolygon2D function even though I was calling it the same number of times and with the same average data over the lifetime of the program. I now believe that the slowdown is caused by some memory leak or sub-optimal garbage collection in Godot's polygon rendering code. To get around this I plan to switch from drawing polygons to drawing instance quad meshes as those should reduce the number of draw calls from the number of tiles to the number of chunks * the number of unique tile types both of which should be very small numbers. This should also use different internal Godot code and thus avoid whatever memory leak was causing this issue.
Comments