8 UMLSequenceAllInOne 0 240 1432 472 title=Firing a shot obj=display/default.ts\nDefaultEngineEventHandler:onkeydown()~a obj=game/objects.ts\nPlayer~b obj=main.ecal\nsink WebSocketHandler~c obj=engine.ecal\nexecuteAction()~e obj=templates.ecal\nPlayerState~d gate->a:The user presses <space> a->b:stateUpdate(action='fire') b->c:send state update to websocket (action='fire') c->d:set property action='fire' gate->e:Game loop e->d:doAction() d->gate:Add shot sprite to model d->gate:Send audio event to all clients