Move static mesh physics initialization and optimize UI event handling

  • Physics: Moved the static mesh physics body creation from Gameplay::run into Mesh::loadJson. Meshes now automatically register with the Jolt physics system if the "isStatic": true property is present in the JSON definition.
  • Scene Management: Added a specialized getPlayer() method to the Scene class to replace generic get<Player>() calls in Gameplay and CrystalSanctuaryGuardian.
  • UI Optimization: Refactored UI event loops (mouse motion, clicks, and wheel) in Gameplay to use a new getNodeUis() helper, avoiding manual dynamic_cast checks on every node.
  • Projectiles: Refactored BhsProjectile to handle its self-removal timer in a postCtor() override rather than a deferred action in the constructor.
  • Documentation: Updated todo.md to replace “recipe” tasks with specific multi-tier model requirements (x1 to x32768) for Entropy, Harmony, and Essence items.
  • Code Quality: Cleaned up Mesh class implementation by moving inline logic to mesh.cpp and implementing saveJson/loadJson.
  • Scrollbar & Input: Fixed TileView scrolling logic by properly calculating column counts (nCol) to prevent division by zero. Corrected the scrollPos clamping math and implemented functionality to scroll by clicking and dragging the scrollbar thumb.

Next - Previous