2.6 KiB
2.6 KiB
Dusk Roadmap
Tracking upcoming milestones for the engine.
Upcoming milestones
- Add a very basic physics engine, moving away from the current tile-based movement.
- Give entities full freedom of movement (no longer locked to tile grid positions).
- Update entity interaction, triggers, chunk management, and other systems that currently assume tile-based positioning so they work with the new 3D positioning/movement code.
- Investigate and fix poor UI rendering performance. Rendering the console alone tanks framerate despite the existing mesh optimizations, so there is likely more headroom to find in the vertex/text rendering path.
- Create UI elements for displaying status indicators, e.g. network connection state and save-in-progress.
- Fully test saving end-to-end on all supported platforms.
- Remove the tile system from chunks in favor of meshes, with dynamic hitboxes per chunk loaded in from the chunk file data.
- Create UI elements for network status: a connecting modal, an error state, and a connected flag. Retire the test HTTP request once these are in place.
- Build the socket server and client implementation, including handlers for the different packet types.
- Add a dedicated multiplayer entity type,
clientplayer, alongside the existingnpcandplayertypes. Limit to 8 (defined constant) for now. - Send and receive
clientplayerposition over the network. - Create a UI menu for creating a server and joining a server. For now, join IPs are hard-coded (testing against a fixed IP of 10.0.0.94).
- Create "handshake" packets. For now, just send the username, enforced to be under 10 characters long.
- Server tracks all players' positions and broadcasts them to all connected clients.
- Server sends disconnect packets for users who leave.
- Server assigns each client a UUID; all clients know every other client's UUID (used to reference them across position updates, disconnect packets, etc).
- Server notifies all clients (by UUID) when a user joins, leaves,
or is disconnected, so clients can spawn or remove the
corresponding
clientplayerentity in the world.
Principles
- Never trust the network implicitly. Neither side (server or client)
should assume the other's packets are well-formed or benign --
validate all incoming packet data defensively, since either side
may send garbage or malicious data. Use
errorret_t/errorThrow()for these runtime checks, not assert macros -- asserts are debug-only and won't guard release builds against malformed or malicious packet data.