diff --git a/main.go b/main.go index 3094024..ff599c7 100755 --- a/main.go +++ b/main.go @@ -11,15 +11,16 @@ import ( "github.com/bloeys/nmage/input" "github.com/bloeys/nmage/logging" "github.com/bloeys/nmage/shaders" + "github.com/bloeys/nmage/timing" "github.com/go-gl/gl/v4.1-core/gl" "github.com/inkyblackness/imgui-go/v4" "github.com/veandco/go-sdl2/sdl" ) //TODO: -//Timing and deltatime //Make a window/engine class //Mesh class +//Object //Abstract UI //Textures //Proper Asset loading @@ -117,13 +118,18 @@ func main() { simpleShader.SetUnifVec3("lightColor1", &lightColor1) //Game loop + timing.Init() for isRunning { + timing.FrameStarted() + handleInputs() runGameLogic() draw() - sdl.Delay(17) + timing.FrameEnded() + + window.SetTitle(fmt.Sprintf("FPS: %.0f; Elapsed: %v", 1/timing.DT(), timing.ElapsedTime())) } } diff --git a/timing/timing.go b/timing/timing.go new file mode 100755 index 0000000..b149957 --- /dev/null +++ b/timing/timing.go @@ -0,0 +1,31 @@ +package timing + +import "time" + +var ( + dt float32 = 0.01 + frameStart time.Time + startTime time.Time +) + +func Init() { + startTime = time.Now() +} + +func FrameStarted() { + frameStart = time.Now() +} + +func FrameEnded() { + dt = float32(time.Since(frameStart).Seconds()) +} + +//DT is frame deltatime in milliseconds +func DT() float32 { + return dt +} + +//ElapsedTime is time since game start +func ElapsedTime() uint64 { + return uint64(time.Since(startTime).Seconds()) +}