A generic distributed voxel game engine with an eye towards scalability and flexibility.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
simplerules
Cartographer.py
Courier.py
Narrator.py
README
Ruleset.py
Scribe.py
Tesella.py
config.yaml
pubsub.py

README

Courier - Interacts with players, subscribes to chunks on behalf of the players.
Scribe - Access player and world data on disk
Cartographer - Generates new chunks 
Narrator - Handles actual processing of BlockRules, EntityRules, and BlockSetRules
Tesella - acts as directory and message broker

Hello World Plan:

client->Courier logon 
Courier->Scribe retrieve user info
Scribe->Courier user info for client
Courier .oO(User needs chunks x_i, y_i, z_i...)
Courier->Tesella Who owns chunk x,y,z?
Tesella .oO(No one does. Let's spawn a new Narrator or select one from the pool)
NewNarrator->Scribe retrieve chunk x,y,z
Scribe .oO(I don't have a chunk x,y,z on-disk)
Scribe->Cartographer generate chunk x,y,z
Cartographer->Scribe chunk x,y,z data
Scribe->NewNarrator chunk x,y,z data
NewNarrator->Tesella I own chunk x,y,z now
Tesella->Courier NewNarrator owns chunk x,y,z now.
Courier->NewNarrator Subscribe me to chunk x,y,z
NewNarrator->Courier chunk x,y,z data
Courier->client chunk x,y,z data
...
NewNarrator->Courier block_change x,y,z sx,sy,sz prop=val (iff prop is public)
Courier->client block_change x,y,z sx,sy,sz prop=val
...
client->Courier attempt_move dx,dy,dz
Courier->NewNarrator attempt_move player_entity dx,dy,dz
Courier->client move_confirmed player_entity dx,dy,dz


Common ZMQ-level connections:

All have a REQ connection to Tesella
All have a PUB/SUB with Tesella, to keep them updated on 
They open PUB/SUBs as necessary with other nodes. All nodes have a SUB and REQ binding.