@page renderertodo TODO

@subpage bigthings Big Things To Build



# DONE



(6/10/2023)

Scene
 - Generic entity & btree grouping mechanism

Server Data Cell
 - Wrapper around scene used by server to manage server scenes and players associated with them
Realm
 - Manages server data cells including rudimentary spin up/down
Realm Manager
 - Manages all realms + provides constructors for types of realms
Data Cell Manager
 - Interface defining method for laying out cells and querying for cells based on real or world coordinates
Gridded Data Cell Manager
 - Implementation of Data Cell Manager that manages a grid of data cells if using terrain engine
Data Cell Location Resolver
 - Takes a vector3d and an entity and figures out what data cell that should correspond to
 - Breaks the above resolver relationship out of cells so that can support different "worlds"
Entity Data Cell Mapper
  - Takes an entity and gives the data cell that entity is inside of
  - Breaks this out from data cell manager to support multiple worlds
Data Cell Physics Manager
  - Breaks the physics generation for chunks out of the data cell manager
Data Cell Search Utils
 - Combine the above classes to provided utilities for searching cells nearby a location for groups of entities

Client Scene Wrapper
 - Wrapper around scene used by client
 - Specifically adds translating server/client entity IDs to one another

Loading Threads
 - Separate client and server versions of loading threads to different files

Server Bone Loader
 - Server bone loading for server only collision simulation

Instancing support

Server Scene Management
 - Creating and simulating entities per chunk

 Server Terrain Management (specifically for collision)
 - Generation collision meshes
 - Also generate texture array

Terrain Chunk Shader
 - Procedural textures for eg rock and dirt

Client Terrain Entity Management (specifically creation/teardown for client)
 - Do the basic query stuff for getting terrain

Diagnose weird walking physics
 - Character terrain collision messiness

Upgrade terrain editing user experience
 - Sphere pallete
 - Gradual updates
 - Terrain Deletion

Upgrade Terrain Chunk
 - Fully connect world chunks

Terrain Editing
 - Server interface for editing terrain
 - Ability to request terrain change from client

Voxel Data Storage
 - Store metadata about types of voxels (rgb offsets, foliage placements, etc)

Foliage Manager upgrades
 - Place foliage based on voxel type
 - Use timeout queueing system to evaluate voxel locations to place foliage
 - Destroy foliage on voxel edit
 - Regrow foliage on empty cells after timeout
 - Gradually regrow

Chunk Saving System
 - File that maps world position to chunk file
 - Save chunks to compressed files
 - Server load chunks as needed
 - Unload chunks after 100 frames of not being used
 - Save chunks on unload

Convert client and server terrain entity composition to use 8 chunks instead of 1

Server Diagnose Physics potentially broken
 - Server physics calculation not happening <--  hard to test bc gravity tree might not actually be updating client to turn off or something

Foliage Manager upgrades
 - Fix popping

(2/25/2024)
Generate Tree Entities
 - Generate leaf blobs container entity
  - Attach individual leaf blob entities to container entity
 - Sways in the wind
 - Synchronize creation on server and client
 - Synchronize swinging on server and client
 - Tree types configurable via files
Scene Streaming (streaming state of a scene to client)
 - Solidify the work that has already been done in this space and PARTICULARLY add good high level documentation
Server Content Engine
 - On first loading a new-to-server chunk, generate all content (foliage, terrain objects (boulders), structures, etc) entities for the chunk


(2/28/2024)
Improve Fonts
 - Support multiple fonts in engine
 - Leverage https://github.com/SilverTiger/lwjgl3-tutorial/wiki/Fonts to load fonts with java

(2/29/2024)
Properly prioritize close trees over far trees

Implement proper Frustum Culling
 - Regular Actors
 - Instanced Actors

(03/06/2024)
Bake in imgui

(03/07/2024)
Server frametime bar graph

(03/09/2024)
Ability to attach ambient audio emitters to entities

Timekeeping class that defaults to gltf time and falls back to systemCurrentTimeMillis

Methods for sleeping physics bodies if nothing nearby them is dynamic (ie trees if there are no moving creatures near them)
 - SAP2 space from ode4j specifically (ended up using BVH space instead)

Overhaul mesh class
 - remove unused stuff
 - private constructor
  (this is going to require changing a lot of dependencies)

(03/10/2024)
De-dupe render calls via doing mutations in render pipeline status and dont call setting variables to values they are already set to
Render pipeline updates to support multiple pipelines defined in different files
 - Grouping meshes together independent of actor so don't have to rebind shader programs or VAOs to redraw

(03/12/2024)
Foliage Manager upgrades
 - Place foliage intelligently

 Fix arena mode (terrain be crazy)

(03/17/2024)
Optimize instance logic (currently sorting the list of objects to push to buffer each frame nukes the cpu)
 sort nukes cpu because capacity logic is after sort, so it tries to sort ~600k items every frame before caping
 The way to optimize this is to completely gut existing code. One draw call per tile. Draw call calles drawInstanced for all blades within that cell.
 Provide a texture that contains data per blade of grass to the cell on draw. Store positions in that once at creation.
 For dynamic wind later will need to use UBOs or something like that.
 Fix grass flickering (it's frustum culling being inconsistent, try commenting it out in InstancedActor and see what happens :| ) (well we won't have that problem anymore lol)

(03/20/2024)
Free camera system that can detatch from player entity

(03/20/2024)
Half pass at cellular automata fluid dynamics system
 - Diffuse density
 - Streaming chunks over network
 - Basic model creation

(03/21/2024)
Fix character movement (allegedly fixed -- maybe by camera stuff?)
 - Walking left or right while turning camera is very jittery
 - Can lock on moving

Fix Frustum Culling for skybox

Fix Character creation preview not working

(03/23/2024)
Physics-controlled objects system

Clean up main method/class
 - Include Remotery library

(03/24/2024)
Bring LWJGL version up to latest

Automatic Scene unloading
 - Tree structure inside scenes for tearing down groups of entities
 - Entity decomposition
   - Server handling
   - Client handling when scene should be unloaded

Level loading/saving + Basic Editor
 - Spin up voxel level (think arena mode)
 - Save voxel level

(04/10/2024)
Level loading/saving + Basic Editor
 - Basic editor functionality
   - Menu of types of entities to spawn
   - Button to spawn them at cursor

UI Work
 - Make ui feel more responsive, whatever that means (answer is make hover-over styling work lol)
 - Frames for windows (WIP)
 - Need to figure out style-wise what we want to do here (generally minimalist)
 - Fix scrollable handling

Terrain editing UI
 - Menu to select palette to generate, populated based on data

(04/13/2024)
UI Work
 - Level editor ability to destroy an entity on server, have it also destroy on client, AND not persist on save
 - Environment controls (not persisting in save yet)

Fix Movement Bug where player keeps running after releasing control

(04/21/2024)
UI Fixes
 - Refactor ui toolkit elements to separate absolute and relative position
 - Fix inventory menus

Touch Up working with items
 - Make sure the models are appropriately scaled
 - Remove all logic from before client-server separation

More Debug menus
 - Screen that shows the overall status of client scene
  - Number of entities
  - Maybe a listing of each one?

Another pass at grass
 - Fix shader being camera position independent (if you move the wind moves with you lol)

Make cursor less jittery (ie always up to date with where the camera is facing)

Physics Tweaks

Fix controls not repeating

(04/22/2024)
Data Cleanup
 - Clean up audio
  - Fix ui audio effects having play times that are wayyyy too long

(04/30/2024)
Fix grass not generating for closest tiles
 - There is no distance check in the ClientFoliageManager

(05/04/2024)
Ground Texture Atlas system
 - Basic atlas working with marching cubes
 - Make it work with triplanar mapping

(05/05/2024)
Synchronize attack tree over network

Clean up data
 - Tree Model Paths


(05/07/2024)
Ground Texture Atlas system
 - Refactor to block main thread only when creating the actual texture object (load buffered image separately)

First Person Camera


(05/15/2024)
More consistent terrain editing

(05/16/2024)
Reintroduce strafing

(05/??/2024)
First person render pipeline
 - Properly compositing onto main texture
   - Potentially look at storing the framebuffer for the pipeline in the pipeline class itself

(05/19/2024)
Character movement in particular feels off
 - Bring back strafing
 - Fix interaction with networking
  - Potentially facing vector on server misaligned with client facing vector? - Nope! They're perfectly aligned
  - May be in the ground move tree itself the hard setting velocity instead of applying a force is causing weirdness

(05/23/2024)
Viewmodel
 - Fix hands placement
 - Animations defined in data file

(05/24/2024)
Viewmodel
 - Add animations queues in btrees
  - idle
  - jump
  - ground movement
  - land
  - fall
  - attack

Attaching items to hands in first person

Fix grass placement

(05/26/2024)

VERY rudimentary first person documentation to give basic navigation to relevant files.

Fix attacking looping and freezing the character in place
 - Was using delta real time (0.02ms) instead of delta frames in server and client attack trees (1 frame/simulate() call)

Document hitboxes
 - Documented how it works currently and the architecture we want to move towards

Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
 - Need to have an object attached to creature that stores the rigid body
  - When creating the creature, for each hitbox, create shapes for the rigid body
 - Attach the overall object to the creature entity

(05/27/2024)

Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
 - Synchronize hitbox positions each frame

(05/31/2024)
Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
- Write custom callback for the collision engine for just hitboxes

(06/04/2024)
Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
 - Need to have an object attached to creature that stores the rigid body
  - When creating the creature, for each hitbox, create shapes for the rigid body
 - Attach the overall object to the creature entity

(06/07/2024)
Hitboxes work to properly use capsules (constantly destroy/recreate every frane because od4j doesn't allow rescaling :<)

(06/10/2024)
Add flow for demo menu/level loading

(06/11/2024)
Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
 - Properly calculate the capsule that bridges from previous frame to current frame hitbox location
 - Write custom callback for the collision engine for just hitboxes
Fix player model side-jog animations

(06/13/2024)
Fix newly exported model not rendering correctly
 - All bones are passed into the shader every render call, the bone values must be corrupted
 - NIGHTMARE BUG
Fix equipping an item spawning two items

(06/14/2024)
Fix inventory ui not closing when you hit 'i' key (will need to update utility functions to manage input mode so you're not doing it in callback)
Develop debug ui for equip points

(06/18/2024)
Block state synchronization between client and server
Highlevel netcode gen updates
 - Fix formatting for imports so it doesn't put an extra newline
 - Fix formatting for function generation so it DOES put a new line when the function isn't being replaced
 - Convert fields to using id variables so all behavior tree classes don't get git updates every time the ids shuffle
  - Furthermore, keep tracking of the existing ids for trees and fields and only generate ids for new trees and fields
Fix client gravity tree name

(06/19/2024)
Transvoxel implementation
 - Begin work on transvoxel algo

(06/21/2024)
Transvoxel implementation
 - First working implementation of mesh generation for transvoxel chunks (architecture of adding it to drawcellmanager still todo)

(06/22/2024)
Transvoxel implementation
 - Scaling LODed chunks by lod level

Fix items falling below the ground
Fix server always rotating entity to face client camera -- should only be changing movement vector
Probably some kind of tutorial text

(06/??/2024)
Start working on script engine documentation/design

(06/27/2024)
Animations
 - 2H Sword Hold (3rd person)
 - 2H Sword Attack (3rd person)
 - 2H Sword Block (3rd person)
 - 2H Sword Hold (1st person)
 - 2H Sword Attach (1st person)
 - 2H Sword Block (1st person)

Audio
 - Sword Swing
 - Sword Sheath
 - Sword Unsheath
 - Sword Hit Metal
 - Sword Hit Flesh

(07/02/2024)
better scaffolding for scripting engine with hooks for equipping items, spawning entities, pausing/resuming play, etc
Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)
 - Introduce block hitbox (blockbox) type
 - Sour spot, sweet spot for damage hitboxes and hurtboxes

(07/03/2024)
Clean up framebuffer class
 - Comment everything
 - Error checking
Overhaul opengl error checking generally (as in, actually use it)
 - Add all over the place to help debugging graphics issues
 - Handle uniforms being sent to shaders that don't have the uniform defined
Extracting pixels from framebuffers

(07/07/2024)
Work on testing

(07/16/2024)
Scene Loading Refactor
Hooking into engine from script-side

(07/19/2024)
Element Manager debugging and logic simplification
Hooks debugging
On add item to inventory hook
Hook manager debugging

(07/20/2024)
Properly drill static classes to script context
Expose framestep control to script side
Show tutorial hints from script side
TextBox element (not editable yet)
Word element
Text Wrap handling
Overflow handling

(07/21/2024)
AI scaffolding
Attacker ai tree

(07/24/2024)
2 Hand katana
Switching between first and third person
Devtools for updating first person attachment rotations

(07/26/2024)
Viewmodel equipped item rotates inverted to bone rotation
Utility object for reducing boilerplate when writing btree transitions that just play an animation then transition
First animations flickering in first person (enforce animation priority requirement)
Debug third person animations flickering (attachments not reflecting animations that were played that frame)
Small data fix
Refactor spawn point to not be global
Synchronize objects between client and server
Synchronize life state between client and server

(07/27/2024)
Small bugfix with blocking
Refactor math to be client/server agnostic in attach utils
Attach utils fixes for first person handling

(07/28/2024)
Tear out first person rendering pipeline
Partially fix first person attachment to viewmodel
Creature data validation
Unify animation format data on disk
Leverage animation masks to block while moving
Remove Airplane movement system
Fix client-attached models to viewmodel drawing on previous frame
Alignment work for human right hand

(07/29/2024)
Option to load all cells on init scene file
Insidious Entity protocol bugfix on server
Refactor network protocols to enforce async/sync split

(07/30/2024)
Fix depth texture for shadow rendering
Fix eyebrow weights on human model

(07/31/2024)
Massive netcode gen refactor
Server synchronization manager
Jump tree synchronization
Fix jump bugginess

(08/01/2024)
Fix server entity camera rotation
Fix world bounds application
Bone debug rendering

(08/02/2024)
State transition packets and support on both client and server
State transition utils interrupt support
Block animation cancels immediately on first person model
Bone-attachment fix
Fix data for viewmodel hand.r equip point
Support audio on state transition
Audio on block state transitions

(08/04/2024)
Strafe/backpedal movement speed multipliers
Properly equipping/unequipping 2hand items

(08/08/2024)
Client surface-audio system
Sound effects on footstep
New sound effects for movement
Jump sound effects
Don't play walking audio when entity is jumping
Server alert client on collision
Sound effect on sword hit
Fix walk animation not stopping on state change in ground movement trees
Fix server entity not rotating when ai commands it to

(08/09/2024)
Math overhaul
 - Engine defined origin, up, and left vectors
 - Redo math for camera calculations
Rotate player models to face correct direction
Remove BLENDER_TRANSFORM token
Redo of creature-spawning logic to support including attached items
 - Items do not necessarily send from server if they are in the scene! They must also not have a parent
Ability to serialize/deserialize a creature with equipped items
 - Serialize
 - Deserialize
 - Send to client
 - Receive from server

(08/11/2024)
Sending initial synchronized state on player connect to chunk
Pass at client-server physics synchronization

(08/12/2024)
Fix server animation playing at reduced timescale
Block override concept for hitboxes
Block sfx
Fix server hitboxes freaking out at animation end
Fix hitcapsule misalignment
Always upright tree
Fix upright tree clearing linear force/velocity
Movement tweaks

(08/13/2024)
Hitbox support offsets now
Multiple hitboxes per bone
Potential fix for client concurrency issue
Debounce attack collisions
Remove entities on death
Remove movement restriction on attack
Update frame data for first person 2h sword swing to align with third person better and make it feel snappier
Fix katana is frustum culled incorrectly
 - This is because the data is incorrect (blender has an animation already applied, need to push down)

(08/14/2024)
Fix rendering pipelines being broken when the katana is not drawn
Fix deleting entities on server not properly deleting the whole entity
Windup and Cooldown animations on 2h block
AI rearchitecture to actually do behavior trees now that I know what they are

(08/15/2024)
True behavior trees
 - Decorators
 - BT Timer service
 - Meta nodes
 - Colections
 - Combat
Melee ai using BT framework
Server block nullchecks
Melee AI tweaks
Walk tree
Slow down strafe movement somehow
Better creature damage sfx
Audio debugging
Play animations offset by network delay
 - Attack animation
Fix viewmodel animation framerate

(08/16/2024)
Fix server not starting
Fix client disconnection causing wrong socket to be closed from server
Fix build tooling, scripts, etc
Launcher fixes
Fix inventory control state suggestions not working correctly
Fix unequipping item hard crashing engine
Fix terrain editing hard crashing engine
Fix attack animation mayyybe caching on non-local clients ??
Fix sword double-swing
Fix physics freakout for vertically aligned entities
Fix AI components not resetting on turning off ai manager
Fix broken rendering pipeline when creating new level
Fix ui alignment for item panels in inventory menus (ie dont have to place in corner)
Netconfig file support
Fix rotation not sending correctly on initialization of creatures on client
Fix F2 menu not regaining controls when Xing menu instead of hitting F2 to close
Logger toggle debug window

(08/17/2024)
Foliage serialization/deserialization

(08/18/2024)
Cursor transparency, cloud transparency
Small oit shader work

(08/19/2024)
Disable cloud ring
Undo oit shader work to fix build pipeline
Testing rearchitecting

(08/20/2024)
Update image assert method
Jenkins save and display captured images when failing a rendering test
Setup MantisBT

(08/22/2024)
Fix rendering testing on jenkins
Fix entity scene test spinup by preventing networking sockets from closing
Thread manager/tracker + properly closing threads on engine close

(08/24/2024)
Resetting globals for multiple test runs from coding environment
Return to main menu from ingame
Tagging threads in manager
Quitting to main menu

(08/25/2024)
Server utilities provided to scripting engine
Spawn player character with weapon when testing levels

(08/26/2024)
Automated testing fixes

(08/28/2024)
Fix scene state not resetting on engine shutdown
Fix threads not closing on engine shutdown
Update jenkins config to rerun tests with all logging turned on if maven hard crashes while testing
More logging
More OpenGL error reporting
Fix shader uniforms caching due to same pointer, different value
Fix Yoga double free bug
Explicit error on setting uniform to unsupported type
Methods for getting buffers from mesh

(08/29/2024)
use STBImage instead of ImageIO
Signal passing architecture
Services architecture

(09/01/2024)
Lots of jenkins pipeline work (finally got it mostly consistent!)

(09/02/2024)
Engine mostly building reproducibly/consistently/testably
Framebuffer fixes
Attack tree integration test
Shadowmap fixes
Shadowmap pipeline debug menu
Shader storage refactor
Unit definition/spawning
Hitbox updates for katana 2H
Fix bug with geometry references not properly flipping in server hitbox collision callback
Fix level editor entity tree not re-rendering when an entity is deleted
Fix server entity not rotation when first person camera rotates
Entity details debug menu Data View

(09/03/2024)
Documentation reorganization
Better jenkins documentation
Include jenkins dockerfile in repo
Better model for gameobjects
Server synchronization of sprint tree
Fix potential bad path for item state lookup
Fix multiple ItemUtils NPE bugs
Fix AttachUtils NPE bug
Work on testing stability
Viewport loading

(09/04/2024)
Fix viewport realm server data cell not being flagged as ready
Fix NPEs on property lookups on entities
Unit tests for above
Fix physics debug rendering pipeline
Update human collidable data

(09/05/2024)
Fix AI tracking deleted entity

(09/06/2024)
work on debugging framebuffer bug

(09/07/2024)
par_shapes integration

(09/08/2024)
Directed graph datastructure
Framebuffer + RenderingEngine tests

(09/09/2024)
Fix obnoxious opengl state caching bug w/ framebuffers in junit context
Recoil on attack block
Movement speed penalty on swinging sword
Fix fall tree blocking attack starting on server/Fix falling tree not always deactivating on server
ParShapes integration fix
Fix server ground movement tree playing animation over falling animation
Fix cursor visuals
3D spline implementation

(09/10/2024)
Fix jump/fall/land animations being buggy and inconsistent between client/server
Remove extraneous println's
Fix empty item slot not showing underneath dragged item
Fix voxel selection popout rendering, nav logic

(09/11/2024)
Voxel updates (+new type!)
Fix return-to-title button from ingame main menu
Fix F2 controls bug with title menu
ChunkOctree implementation
Octree approach for rendering foliage on client
Foliage scaled cell generation
DBody key refactor
Audio for grass/leaves
Re-enable UI test
Fix foliage chunk-level radius being too low (causing grass cutoff)
Turn on anti-aliasing for font generation

(09/12/2024)
Alias fonts
Fix audio handling bug
SSBO implementation
Rearch instanced actor
ParticleService implementation
Fix SSBO implementation misusing BufferUtils
Massive entity spawning refactor to collapse entity type permutations
Move AttachUtils package
Move Scene package
Crate object
Data cleanup
Delete Structure entity type
Physics work

(09/13/2024)
Physics debugging
Fix terrain physics updating on server
Lots of animations
Organization and documentation around creatures

(09/14/2024)
More animations
Skeleton 3rd person model
NPE fixes in hitbox collection state + commonentityutils
Debug menu ability to play animation locally or on server
Documentation updates

(09/15/2024)
Fix movement packet timing bug
Fix all items spawning above player head
Fix items falling below terrain
Fix gridded data cell manager saving attached items on realm save
Fix render signals caching between frames (not reseting global flags per usual)
Capture image from opengl to pixel-check
Add ui tests
Fix image panel displaying texture flipped
Fix drag event relative positions
Fix slider behavior
New character customizer component

(09/16/2024)
Fix Scrollable position miscalculation
Fix equipped item packet not being sent to creature's player
Component-ify natural and equip inventory menus
Post Processing Pipeline w/ blur
Blur on open inventory/main menu in game
Remove legacy UI handling of positioning -- entirely reliant on yoga now

(09/17/2024)
Framebuffer position drilling
Redesign inventory menu
Remove deprecated ui constructors
Refactor menus to package under client
Fix buffered scrollable regression in above work
Memory fix
Start proliferating audio through ui
Item-based ui audio
Better sfx for opening/closing inventory menu
Different title menu audio
New katana icon
UI fix
Initial hitstun implementation

(09/18/2024)
Migrate documentation
Netcode generator qol fixes
Combat Stances Component
Remove geometry shader support
Work on clustered lighting

(09/19/2024)
Cluster lighting completed
ClientPointLightComponent
Small rendering info display
Fix terrain editing across chunk borders on server
  - This is because the ray on the client doesn't intersect at the border (because the physics generation isn't working on chunk-end)
  - Also because the client doesn't scan border chunks to see if they should update
Fix shader program bug with no-bone variants
Particle Emitter work (it renders! it has management!)
Texture atlasing for particle system
Texture atlas caching
Point light offsets

(09/20/2024)
Light manager buffer overflow bugfix
Particle Emitter data definitions
Torch w/ particle + lighting
Fix text input collapsing while typing
Voxel selection item
Fix ui elements not storing default discrete world size on level editor menu
Fix skeleton right strafe
Fix ui audio playing at world origin

(09/21/2024)
Snow voxel type
Move animation work

(09/22/2024)
Hide viewmodel hands when idle
Autodisabling implementation
Fix static friction coeff causing player to slide on shallow slopes
 - Turns out it needed auto disabling logic
Change timescale for test
Refactor graphics entity definitions to be under dedicated object
Tree model debug menu

(09/24/2024)
Make voxel selection panel have better spacing
Partially fix idle animations for human + skeleton
Directional lighting color control
Skysphere affected by directional lighting

(09/25/2024)
(09/26/2024)
Work on toolbar refactor

(09/27/2024)
Toolbar state mostly working
Filter toolbar slots out of equip menu

(09/30/2024)
Fix attack tree checks
Disable client equip tests until can review
Toolbar scrolling
Items executing script engine hooks on usage
Fix server attack tree regressions
Editing voxels hook and extensions for voxel palette item
Entity spawning palette item actually working via hooks
Model fix for shovel, shuffling item models
Work on separating procedural tree generation steps


(10/16/2024)
Camera offset definitions in entity files
Non-Lsystem pine tree
Potential fix for ground audio bug

(10/20/2024)
Fix SP debug launcher actually entering world
Fix virtual scrollable clipping logic
Fix ui scaling on abnormal monitors
  - This is literally just a function of the settings file not being updated for different resolutions
Fix inventory null pointer check on virtualaudiomanager

(10/21/2024)
Fix inventory message for undefined id on client
Fix movement audio service when audio engine disabled
Fix idle animations (for katana)
Fix equipping sword on toolbar
Add punching/unarmed combat
Fix script spawning NPE

(10/22/2024)
Editor movement system + editor entity
Ability to disable physics
Inspector item
Fix alignment on spawn palette menu
Add padding setters to ui kit
Refactor ui components to be under client folder
Scaffold out recipes data
Initial implementation of tooltips

(10/23/2024)
Tooltip improvements
Terrain generation testing realm
Biome data definition
Notes on biomes
OpenSimplex util class
Chemistry system collision engine instance on server and client

(10/24/2024)
CraftingPanel implementation

(10/27/2024)
World gen docs + ideas
Update default resolution in config

(10/28/2024)
Fix main menu ui test
Refactor math utils to spatial math utils to make room for more fundamental utils

(10/29/2024)
Begin drawcellmanager rewrite

(10/30/2024)
Integrate transvoxel algorithm
Document NetArranger
Break out datastructures library

(10/31/2024)
Fix some transvoxel bugs
Optimizations
Refactoring generator code

(11/01/2024)
Optimizations
Fix transvoxel xnzn edge generation

(11/04/2024)
Major draw cell optimizations
Fix normals calculation in transvoxel rasterizer
Fix draw cell LOD joining bug
Fix draw cell bounding sphere calculation
Hill Gen tweaks

(11/05/2024)
More normals fixes for terrain

(11/06/2024)
Fix server caching of terrain
Implement server side striding of chunk data

(11/07/2024)
Add quarter, eighth, and sixteenth scale chunk gen
Add network pressure capping
Add stratified updates that prioritize game chunks
Add message deduplication
Fix LOD bounding sphere calculation
Hook up content generation to test generation realm
Reorganize biome data

(11/08/2024)
Player and entity tracking overhaul in grid data cell manager
Add more profiling points
Height manual adjustment for content placement
Fast track client draw cell manager cell evaluation
Fix foliage rendering
Fix async physics gen on client
Convert volumetric + shadow pass to entity tags

(11/09/2024)
Fix eighth res chunk radius
Fix chunk gen debug ui regenerate button
Script-defined chunk generators
Script engine synchronization utility
Convert ScriptEngine to service
ScriptEngine full re-initialization signal
Add surface width to test generator
User setting to toggle foliage manager
Fix client terrain cache lookup bug
Memory debugging work + update memory flags in launch file

(11/10/2024)
Attempts at optimizing ClientDrawCellManager
Server-driven homogenous tracking to accelerate client draw cell manager
Face data fill bounds check optimization
Data fill skipping optimization
Homogenous node skipping optimization
Remove evaluation by distance
Squared distance optimization
Distance calculation caching optimization
Two layer destruction optimization
Non-reallocating list iteration for children in draw cell manager optimization
Split leaf/nonleaf tracks for node evaluation optimization

(11/11/2024)
Chunk data now stored/transmitted in 17 dim instead of 16 dim (Thereby cutting down on network/storage cost)
Unique actor concept
Asset manager pipeline to destroy models/meshes/textures
Terrain model freeing on destruction
Potential physics destruction fix
Join propagation further up tree
Lower client cache size (to fight memory stalling)
Manual free button on memory debug window
Passing chunk data between nodes
Fix homogenous value propagating from chunk gen to client cache
Fix homogenous value joining on client

(11/12/2024)
Work to optimize javascript chunk generators
Solve curve SDF

(11/13/2024)
Fix shadows on terrain
Work on an anime-style mountain generator
Work on making chunk reloading less obvious
Fix default chunk generator
Fix unit test
Fix missing data on katana item
Ability to replacing a player's entity
Fix shadows on main shader
Button to swap between player entity and editor entity
Fix physics being disabled on editing a level
Fix entity repositioning bugs + Enable recursive logic
Fix hitbox manager handling of destruction
Fix gridded data cell manager player + entity position handling and refactor to simplify logic
Add debug options for entities to reposition on server
Item data refactor to make it recursive
Loot pool data definition
Implement items dropping from entities on death
Officially mark transvoxel algo as solved
Fix shovel not having texture
Re-enable foliage manager
Fix chunk value lookup

(11/14/2024)
Workbench model
Item usage definitions
Way to define auto generated spawner items (ie item form of a furniture item)
Define interaction distance explicitly
Fix client side store-in-inventory transform failing to destroy world-side item
Fix gravity trees failing to handle missing collidables
Fix token NPE
Physics editing debug tab
ControlHandler refactor to break out callbacks into dedicated files
Add concept of interaction definition in common entity type
Fix bug with entity ray casting selecting player entity
Fix crafting menu yoga appliation logic
Workbench can open crafting menu
Fix character customization panel layout

(11/15/2024)
Script engine preloading
Fix YogaUtils.refreshComponent breaking when passed null window
Remove FontUtils .testcache creation
File watching scripts source dir
Fix STBImage flipping bug (set flag statically)
Update visuals on pine tree

(11/16/2024)
Mountain generation work
Implement crafting
Fix image panel test
Add explicit kinematic flag in data
Fix hitbox destruction logic to not double-delete

(11/17/2024)
Mountain generation work
Fix flickering chunks on unload
Fix draw cell distance cache busting on far distances
Fix skybox not updating position with player entity
Add Scene shorthand for registering runnables as behavior trees
Re-integrate frame time tracking
Solve y last in chunkgen to optimize height calc

(11/18/2024)
Defining noise functions in config files
Invoking noise functions from noise functions
Voxel and Heightmap generators based on noise functions in files
Set all client terrain rigid bodies are kinematic
Add caves
Tweaking test2 noise definition
Add sleep to server socket thread

(11/19/2024)
Fix draw cells not deleting once all children have reported generation
Fix server data cells unloading before ready state
Fix terrain chunk generation trying to generate rigid body for no-vertex cell
Fix server homogenous chunk check on generation with variadic weights
Optimize data passing from voxel rasterizer to model generation
Vector pooling in transvoxel rasterizer
Fix invalid normals from transvoxel rasterizer

(11/20/2024)
Design storm engine icon
Fix edge-polygon generation for invalid cases
Add engine logo to title menu
Use STBttf for font loading/remove dependency on java.awt.fonts
Fix font height lookups in string carousel, text input, and word
Fix invalid audio source ID bug
Up threshold on tests for approximate color matching
Refactor signal service subscription mechanism
Add main thread signal service
Fix backing out to main menu
Refactor ShaderProgram -> VisualShader
Break out shader uniform setting into shared file
Fix being able to walk off far side of the world (ie in level editor)
Fix chunks saving to disk in wrong stride
Fix server terrain generation lock spinning on loading terrain from disk
Fix crosshair NPE when camera undefined
Fix ray casting entity filtering bug
Fix ClientTerrainManager concurrent editing bug
Fix point lights not being cleared from buffer after deletion
Remove point lights from skeleton + human

(11/21/2024)
Change grass texture
Fix allocations on FoliageChunk child iterations
Reduce near clip to remove flickering on far chunks
Complete overhaul of foliage management
Fix foliage inconsistently placing on varied terrain
Fix foliage texture wrapping when drawing too many foliage items
Fix memory management in asset loader for queued assets
Add functionality for texture freeing from asset manager
Increase foliage chunk range
Swtich collision engine to use reentrant lock

(11/22/2024)
Foliage manager non-collision engine height lookups
Fix foliage manager not respecting graphics settings
Small noise sampling refactor
Fix test data for main menu render test
Change voxel weight reporting from server to align with foliage
Use jenkins data for unit test temporarily
Disable tunnel noise to align foliage better + adjust manual value for foliage placement

(11/23/2024)
Clean up top level folder
Break out dependency documentation into a dedicated file
Fix terrain editing
Fix foliage not updating at edited chunk
Dedicated control for opening crafting
Break out network imgui debug window
Move text files to documentation pages
1000th commit milestone!
Pine tree collidables
Fix human animation bad data
Fix script entity spawn utils not spawning on max cursor distance
Block mesh generation
Add asset manager support for queueing models asynchronously w/ promised path
Add promised path support to queued textures
Code formatting on queued asset classes
Refactoring server side of terrain management
Add server manager for block chunk data & management
Add endpoint to request strided block data
Add client side handling of block endpoint
Add server-driven block rasterizer with LOD
Convert PhysicsEntityUtils to use generic interface to load tri geom rigid bodies

(11/24/2024)
Fix winding order on block meshes
Add texture atlasing to blocks

(11/25/2024)
Remove unused import
Geometry mesh generation class
Cloud shader
VisualShader refactoring
VisualShader #include macro implementation
Fix particles not spawning in correct positions

(11/28/2024)
Fix block not firing
Fix reentrant locking bug
Convert server physics cell generation to executor service
Simplifying physics cases
Allow variable collision bits for collidable entities
Autodisable terrain colliders
Lower grass radius
Work on diagnosing data cell misalignment with entities
Fix gridded data cell manager loops iterating incorrectly
Implement multi-biome sampling for surface heightmap
Nearest biome sampling for content generation
Fix recursive delete not actually recursing
Add floor voxel type
Singleplayer menu layout work
Remove explicit garbage collection call
Actor panel additional functionality
Better style for character creation menu
Fix AABB calculation from assimp-loaded models
Fix singleplayer launching at all
Store characters in database
Spawn characters from database
Fluid spawning item
Fix fluid shader
Re-enable fluid simulation
Remove concurrent datastructure usage in cell management
Auto close prepared queries that are iterated over
Fix viewport loading

(11/30/2024)
Water spawner firing on repeat
Convert server side fluid storage to using buffers
Move cellular automata simulator package
Update fluid chunk dimensions to correspond with C code
Update release build system to include shared libraries
Break out solver consts

(12/01/2024)
Move header file generation location
Add more debugging tools for fluids
Remove conditional update check in fluid sim
Explicit memory management of fluid chunk cache buffers
Fix GriddedDataCellManager memory leak caused by physics and ConcurrentHashMap
Fix fluid sim null pointer bug with unallocated chunks
Fix fluid sim NP bug with skipped chunks
Fix fluid chunk indexing from java side
Memory pooling for chunk buffer allocations
Server homogenous fluid chunk declarations
Unsleeping fluid chunks on edit
Conditionally rasterize fluid chunks based on homogeneity
Awake fluid chunks based on neighbor state
Fluid chunk conditionally send update based on sleep status
Fluid simulation normalization ratio
Stabilized static liquids
Integrate CMake + Ninja

(12/02/2024)
Add testing to native code side
Add native testing step to jenkins pipeline

(12/03/2024)
Native code building correctly in jenkins pipeline
Refactoring native code
Fix gravity tree not deactivating when body is disabled
Refactoring world menu generators into dedicated class
Fix single player loading
Spawn player in center of single player world
Elevation fix + use correct voxel generation in SP worlds
Fix cache key collision bug
Fix homogenous flagging on cell managers
Fix more cache key collision cases
Store terrain chunk files in dedicated folder
Start to standardize on doubles for positional data
Fix placing character at end of world bounds
Bump ode4j version
Small collision engine code formatting

(12/04/2024)
Fix testing apparatus for native code on windows
Fix doxygen also pointing at native code lib folder

(12/06/2024)
Fix arena loading
Refactoring fluid sim code
Refactoring fluid sim headers
Refactor native test code under src/test
More test file refactoring
Native fluid chunk dispatcher
Dedicated native fluid simulator
Define cellular simulator
Fix fluid dispatcher array deref
Bounds array allocation
Store world pos on native side
Native bounds solver
Fix cellular sim bounds check
Add hard walls to bounds solver

(12/07/2024)
Cellular bounds transfer properly
Fluid chunk terrain bounds transfer
Cellular transfer behavior work
Native math utils
Frame tracking on native side
Fix memory leak in client fluid data chunks
Work on cellular sim determinism
More cellular determinism verification
reintroduce sleeping code
Cellular bounds desync fixes

(12/08/2024)
cellular stability work

(12/09/2024)
cellular stability work
Add grid2 sim files
grid2 functioning + lots of tests
multigrid implementation

(12/10/2024)
Implement conjugate gradient solver
Fix density advection dx being wrong
Update gravity const
Add bounds setting to velocity projection

(12/11/2024)
Fix multigrid solver
Fix conjugate gradient solver
grid2 starting to look realtime!

(12/12/2024)
Pass environment data through grid2 solver
Save assembly on compile

(01/24/2025)
Delete old server physics cell on terrain edit
Fix server terrain physics entity positioning
Disable client fluid draw cell loading gate
Properly differentiate local/world bone attach point calculation
Floating origin implementation for collision engine
Improve initial asset loading performance
PoseModel creation for basic shape types
Procedural block item types

(01/25/2025)
Update flush method in tests to account for faster loading
Allow pre-setting queued asset path
Fix asset manager texture queueing (was not pushing queued textures into loaded texture map)
Model for single block (hooked up to item as well)
Single block model custom shader
Data-defined actor per-mesh uniform overrides
Proper textures on each block item

(03/06/2025)
Fix bugs with block chunks not being marked as non-homogenous after editing

(03/24/2025)
Fix entity swap button resetting position

(03/26/2025)
Fix block meshgen not incrementing indices correctly
Fix block meshgen algorithm iteration bug
Add debug control to swap first/third person
Setup scaffolding for drag-and-drop asset handling
Editor mode asset file drag and drop
Editor mode pauses simulation
Tabs for editor view
ImGui drag-and-drop into viewport functionality
Normalized mouse pos lookup function

(03/27/2025)
Disable fluid sim for performance
Increase fall delay
Rearchitect foliage rendering to combat grass pop-in/pop-out
Increase sim range to fight game object pop-in
Filter select-able saves on singleplayer screen to full game saves
Increase number of invalid openAL IDs
Fix audio engine not cleaning up audio sources
More accurate block test types
Block meshgen work
Delete deprecated foliage manager
Title menu navigation work
Fix UI Testing debug menu
Fix orphan tooltips from inventory screen
Code formatting
File-controlled foliage coloration
Fix TextureInstancedActor packing data texture incorrectly (column major instead of row major)

(03/28/2025)
Grass height variance with control from ui + file
Fix block mesh ray casting bug due to trimesh overlap
Fix block mesh samplers incorrectly buffering
Fix block mesh gen algorithm merging quads incorrectly
Make HitboxManager threadsafe
Don't simulate extra frames if we're taking too much time
Fluid sim toggle on client side
Lower duplicate physics frame count
Various code cleanup
Stop sleeping during high frame time
Actor bone spatial data caching for performance
Volumetric pipeline optimization
Collidable tree simplification
Near collision callback streamlining
Reduced mid-range chunk LOD
MicroSimulation performance checks
Small hitbox collection optimization
Remove excess collision call on client
Move profiler logging
Disable kinematic colliders on creation
MainContentPipeline reduce allocations
Move AI simulation to server level from chunk level

(03/29/2025)
Optimize ray casting near callback
Chunk file operation threadsafing
Multithread entity creation on server cell creation
Network message object pooling
Threadsafe EntityDataCellMapper
Code cleanup
Small ServerAttackTree fix (for when not holding an item)
Work on optimization

(03/30/2025)
Reorganizing terrain data
ServerGroundMovementTree concurrent modify fix
TransvoxelModelGeneration allocation reduction
More allocation reduction
Vector pooling
Simplify WorldOctTree to reduce lag with large node counts
Increase memory allowance, mostly fixed latency while walking around
AssetManager streaming budget
Better chunk position hashing algo
Hills generator work
Fix foliage manager and cells confusing worldpos and absolutevoxelpos
Farther draw radius

(03/31/2025)
HillsGen visuals work

(04/01/2025)
Falling min frames to activate increased
Reorganizing world creation ui file
UI panel work
World creation options work

(04/02/2025)
Homogenous worlds actually generate-able
Two EXCELLENT rock textures



# TODO




Implement gadgets
  - Chemistry System
    - Emitters
    - Subscribers
    - Dedicated collision engine on server
  - Trap
    - Bear
    - Freeze
    - Flame
  - Bomb (to be thrown)
    - Regular (Deals damage, ignites)
    - Air (high push coeff)
    - Flash (dazes)
    - Sleep (puts enemies to sleep)
    - Smoke (creates LOS blockers)
    - Decoy (creates a decoy)
  - Torch
  - Throwable potions

Floating world origin
 - Better criteria to update floating world origin in collision engine (can't run every frame cause very very expensive, but need to periodically check so it doesn't become irrelevant)
 - Separately simulated regions of physics that dynamically merge/unmerge based on chunk loading

Bug Fixes
 - Fix hitbox placement does not scale with entity scale on server
 - Calculate bounding sphere for meshes by deforming vertices with bone default pose instead of no bone deform
 - Fix light cluster mapping for foliage shader
 - Fix flickering when applying yoga signal (may need to rethink arch here)
 - Fix virtual scrollables not working

Startup Performance
 - Allow texture map to bind multiple model paths to a single set of mesh->textures
 - Cache texture atlas for terrain
 - Separate thread loads non-critical assets async while on title menu, but blocks main game display until completed

Scripting enhancements
 - setTimeout
 - Get marker by entity name/id
 - Play/Stop animations on actors
 - Apply cameras
 - Show/Hide UI
 - Enable/disable controls states
 - Spawn/Destroy entities
 - Ability to define regions in space (ie with entities)

Code Generation
 - Generate static "hasXComponent", "getXComponent" functions on sync'd components

Wrapper callback to debounce a function
 - ie, wrap a given block of code with some special functional class
 - the wrapper lets you specify how frequently the code can execute

Rearchitecting
 - Main render is a ui element (that we can have multiple of)
 - Shader injecting consts from the engine itself (ie max lights is dynamically injected, that way never have to worry about .glsl and .java not aligning)
 - Cache busting for particle atlas cache

Code cleanup
 - Rename "BehaviorTree" to be "Component" (what it actually is)
 - Refactor ground movement components

Build system to allow specifying certain audio files to load as stereo

Rework how chunks are written to disk to make them more cache friendly
 - IE, write consecutively higher LOD levels the further into the file, so that you can read just the first few bytes if its a far away chunk

Debug
 - Draw all bones with orientations

Biome description enhancements
 - Weather description

Would be nice to be able to cut clients that stream their logs to my server 

Refactor render flags

Data Cleanup
 - Clean up creatures
  - Remove unused ones
 - Clean up unused models
 - Clean up textures
  - Move model textures into models
 - Recursive model transform data

Clean up Material class
 - fix storing textures in the mat class ( pain :c )

Overhaul of 'attach' semantics
 - Having different types of attach tree propagation
 - Ability to turn on/off combinations of models at will (already exists, but needs review)

More Debug menus
 - Screen that shows the overall status of draw cell manager
 - Screen that shows the overall status of fluid cell manager
 - Screen that shows the overall status of realm 0
 - Screen that shows the overall status of realm manager
 - Particularly, want a view of all entities in the scene, and the ability to click on a single entity to get an overview of everything on the entity
  - For each behavior tree, ability to click into the tree and view fine details about its state (both pure state variable as well as other relevant variables)

Revisit first attempt at instancing (its really laggy lol)
 - Maybe have draw call happen on top level entity and immediately queue all children recursively

Another pass at grass
 - Multiple foliage models in same cell

Build a lod system
 - Could potentially be held at actor level
 - Link different models based on LOD level
 - LOD trees aggressively
 - LOD foliage cells aggressively

Refactor attach logic to better encapsulate semantic attachment

Light Manager
 - Support "flickering" somehow
 - Eventually support spot lights?
 - Point shadows ???

gltf Support
  - Texture loading from gltf file

Security
 - FileUtils sanitation function check if requested file is in game root dir

Cellular Automata Fluid Dynamics System
 - Advect force
 - Advect density
 - Diffuse density
 - Do not bound to single chunks
 - Only add compression when it starts to become an issue


skybox work
 - make it prettier
 - be able to manage its colors through a clean interface

Ray Traced Audio Engine

Documentation Pass on as many files as you can stomache

Generate Tree Entities
 - Generate stem
 - Ability to specify central stem
 - Cubic function for limb dispersion over length
 - Generate branch starters from trunk that are not full length
 - Have leaves point out of branches at specific angles

Foliage Manager upgrades
 - Wind system (environment ubi that defines wind that is lookup'd by individual blades)


Server Micro/Macro transitioning (turning entity into character in macro simulation and vice-versa)
Macro level content tracker
 - Keep track of chunks that would have trees and include this in the data passed to client


Season tracking
 - Have a concept of seasons as loaded from assets/data
   - Have a season manager that keeps track of seasons at the macro scale
   - Maybe make it per biome or something in data?
 - Create interface for querying and updating season in a given chunk
 - Update foliage system to transition models and colors based on the current season (update maybe every minute in game or something?)


Weather tracking
 - Keeps track at macro level of wind direction and level
 - Keeps track at macro level of cloud coverage and structure (ie transmits same cloud to client as server)
 - Keeps track at macro level of temperature
 - Keeps track at macro level of precipitation

Environmental Audio Service
 - Tracks characteristics about surroundings to determine looping audio to play
 - Voxels nearby
 - Major entity types nearby
 - Biomes


Color Palette Generator


Foliage Manager upgrades
 - Add wind simulation if relevant



Server Content Engine
 - On reloading a chunk with macro objects like structures, apply appropriate modifiers to align micro object with macro object
   - EG if a building is damaged in macro simulation, regenerate the micro one to be damaged before marking chunk as valid


Upgrade terrain editing user experience further
 - Leveling tools
 - Lock to axis tools
 - Server validation for client request to change terrain




# Ongoing

Upgrade terrain generation algorithms
 - This one should be an ongoing process in general as it is a matter of taste
 - Make a route hard coded that throws you straight into a generated world
  - This makes it easier to tweak algo and immediately get results

Documentation

Test Creation





# Eventually

Procedural Cliff Texture
 - Uses noise or fractals or something to generate infinite textures in shader
Loot Generator
 - System that can generate items that would be appropriate reward given some variables
 - ie you tell it 'this is this character's stats, this is the relative level of loot I want to provide'
 - it then searches through the lore to generate appropriate weapons, armor, materials, consumables, etc
Computational Fluid Dynamics System
 - Basic transparent voxels for fluid
 - Fluid simulation algorithm
 - Vectorize/JNI fluid simulation
 - Separate fluid chunks
 - Networked fluid chunk transportation (including force vectors for generating particles on client)
 - Save fluid chunks




Gameplay:

 - Swordsman with movement abilities
 - Archer with movement abilities
 - Mage with elemental physics based abilities








# Fun pie in the sky stuff
Ability to cast spell to extinguish sun, making world permanently dark/night time
dynamic camp/house system - npcs will gradually join your camp the longer you stay there
  - They also leave to go on quests and missions
  - You see the composition of the camp change over time
dynamic warfare system
  - Guard towers that need to be captured by factions before enabling assault on real settlements
  - Raids against villages





# Known bugs
 - Draw cell manager iso values dont make sense and should scale empty cells based on neighbor cells
 - Draw cell manager logic doesn't fill in border cells properly (the logic to check if a border cell exists always succeeds as long as the potential location is within world bounds, not if it actually exists in cache)
 - Control handler re-polls for mouse coordiantes for each control handler group it processes, so only the first group gets the mouse movement event properly