Game loop runs on its own thread