package tins2020 import ( "fmt" "time" "github.com/veandco/go-sdl2/sdl" ) type FPS struct { ControlBase Show *bool start time.Time stamp time.Duration slot int ticks []int total int } func (f *FPS) Init(*Context) error { f.start = time.Now() f.stamp = 0 f.ticks = make([]int, 51) return nil } func (f *FPS) Render(ctx *Context) { if f.Show == nil || !*f.Show { return } elapsed := time.Since(f.start) stamp := elapsed / (20 * time.Millisecond) for f.stamp < stamp { f.total += f.ticks[f.slot] f.slot = (f.slot + 1) % len(f.ticks) f.total -= f.ticks[f.slot] f.ticks[f.slot] = 0 f.stamp++ } f.ticks[f.slot]++ font := ctx.Fonts.Font("debug") font.RenderCopy(ctx.Renderer, fmt.Sprintf("FPS: %d", f.total), Pt(5, 17), sdl.Color{R: 255, G: 255, B: 255, A: 255}) }