Flowerpot
To-Do
- outline this README
- add instructions for making a mod from the template
- license the codebase appropriately
- migrate tasks from journal here
- setup CI to test code quality of PRs
- add clippy to CI
- make panicking (i.e. use of unwrap() or expect()) a clippy error
- create a "map" mod
- map: write map component and message schemas using chunks
- map: generate a basic, fixed-size map of chunks server-side
- map: synchronize all (for now) chunks with all players
- map: spawn client-side chunk and tile entities in response to updates
- create a "player" mod
- player: construct the provided player entity with transform, avatar, and camera
- player: define mouselook messages and send them on input
- player: define shared movement code and run it client-side
- player: define movement messages and send them from the client
- make a "fauna" mod
- fauna: define a fauna tag component
- fauna: define fauna spawn and despawn messages
- fauna: define fauna position and angle components + update messages
- fauna: spawn and update puppeted fauna entities client-side
- player: make the player a fauna server-side
- player: run player movement server-side
- player: rubberbanding (how can this be integrated with fauna rubberbanding?)
- map: add a list component of subscribed clients (player entity IDs; user IDs for message-sending can be retrieved) to chunks
- map: keep all chunk subscriptions updated with all clients
- map: define messages for un/subscribing specific clients to specific chunks
- map: listen to subscription messages and update chunks accordingly (keep values sorted for rapid diffing)
- fauna: define an
in_chunk
component and update all fauna with it - fauna: define an
last_chunk
component - fauna: when a fauna moves chunks, diff the subscribers
in_chunk
againstlast_chunk
(which are sorted; so use rapid diffing) to spawn and despawn fauna to clients, then updatelast_chunk
- make a "terrain" mod
- terrain: define a heightmap chunk component
- terrain: procedurally generate chunk heightmaps
- terrain: generate meshes and materials for client-side chunks
- terrain: define a
cut_direction
component - terrain: experiment with different
cut_direction
heuristics - terrain: define and use a terrain seed resource
- fauna: position fauna on the map using their chunk's terrain
Big topics that stil need to be planned:
- render distance
- fauna models
- player avatars
- soil types
- day/night cycle
- crop definitions, growth, and syncing
- cover crop rendering
- a base content mod
- roads and foundations
- items and crafting
- fauna display names
- player sets display name on join
- game chat