digraph G {
compound=true;
rankdir=LR;
gs [label="Game State"];
client [label="Client"];
server [label="Server"];
physics [label="Physics"];
graphics [label="Graphics"];
// internet [label="Teh Internets", shape=polygon];
subgraph cluster0 {
label = "Network";
{rank=source; client; server;}
client;
server;
color = black;
}
subgraph cluster1 {
label = "Game Engine";
{rank=min; gs; physics;}
gs;
physics;
color = black;
}
{rank=sink; input; graphics;}
// client->server [dir=both];
client->server;
server->client;
gs->physics;
physics->graphics [ltail=cluster1];
input->gs [lhead=cluster1];
// client->internet [ltail=cluster0];
// internet->server [lhead=cluster0];
gs->server [lhead=cluster0,dir=both];
}