func fetchAssets(gameEngine engine.Engine, complete func()) { os.Mkdir("TestAssets", 0777) patcher := client.NewClient("TestAssets", "http://walesey.net") done := make(chan bool) go func() { patcher.SyncFiles("TestFiles") done <- true }() progressBar := ui.NewProgressBar("Downloading assets...") ui.SetProgressBar(progressBar, 0) gameEngine.AddOrtho(progressBar) progress := 0 var loader engine.Updatable loader = engine.UpdatableFunc(func(dt float64) { select { case <-patcher.Complete: progress++ ui.SetProgressBar(progressBar, 1+int((progress*20)/patcher.TotalFiles)) case <-done: gameEngine.RemoveSpatial(progressBar, true) gameEngine.RemoveUpdatable(loader) gameEngine.RequestAnimationFrame(complete) default: } }) gameEngine.AddUpdatable(loader) }