-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathtime.rkt
56 lines (38 loc) · 1.42 KB
/
time.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#lang racket
#|
Racket Arcade (r-cade) - a simple game engine
Copyright (c) 2020 by Jeffrey Massung
All rights reserved.
|#
(require csfml)
;; ----------------------------------------------------
(provide (all-defined-out))
;; ----------------------------------------------------
(define framerate (make-parameter #f))
(define frame (make-parameter #f))
(define frameclock (make-parameter #f))
;; ----------------------------------------------------
(define frametime (make-parameter #f))
(define gametime (make-parameter #f))
;; ----------------------------------------------------
(define (timer time #:loop [loop #f])
(let ([this time])
(λ (#:reset [reset #f])
(set! this (if reset time (- this (frametime))))
; true if the this time has expired
(let ([expired (< this 0.0)])
(begin0 expired
; reset if looping
(when (and loop expired)
(set! this time)))))))
;; ----------------------------------------------------
(define (process-frametime)
(let* ([elapsed (sfClock_getElapsedTime (frameclock))]
[delta (- (/ (framerate)) (sfTime_asSeconds elapsed))])
(unless (< delta 0.0)
(sleep delta)))
; update frametime, gametime, frame, and reset the frame clock
(frametime (sfTime_asSeconds (sfClock_getElapsedTime (frameclock))))
(gametime (+ (gametime) (frametime)))
(frame (+ (frame) 1))
(sfClock_restart (frameclock)))