func printLoop(ch <-chan []grid2d.Update, g grid2d.Grid, cns *census.DirCensus, cond *sync.Cond, numUpdates *int64, clearScreen bool) { // Try to keep rendering smooth. runtime.LockOSThread() for _ = range ch { if clearScreen { // TODO(dnesting): use termcap/terminfo to do this more portably. fmt.Print("[H") } term.PrintWorld(os.Stdout, g) fmt.Println() if clearScreen { fmt.Print("[J") } // Write some summary stats after the rendering. fmt.Printf("%d updates\n", atomic.LoadInt64(numUpdates)) fmt.Printf("%d/%d orgs (%d/%d species, %d recorded)\n", cns.Count(), cns.CountAllTime(), cns.Distinct(), cns.DistinctAllTime(), cns.NumRecorded()) if loc := g.Get(0, 0); loc != nil { fmt.Printf("random: %v\n", loc.Value()) } // If we're running with --sync, signal to any goroutines waiting on a rendering that // it's OK for them to continue again. if cond != nil { cond.Broadcast() } } }