Fix some slowness; clock emitters emit immediately.

This commit is contained in:
David Thompson 2024-05-22 06:52:36 -04:00
parent 984ea4df67
commit ff242fd1a5
2 changed files with 17 additions and 10 deletions

View file

@ -102,18 +102,25 @@
(set! *snapshots* older-snapshots)
(media-play audio:undo))))
(define (sort lst <=)
(define (sort lst compare)
(match lst
(() '())
((_) lst)
((pivot . rest)
(let lp ((left '()) (right '()) (pivot pivot) (rest rest))
(match rest
(() (append (sort left <=) (list pivot) (sort right <=)))
((x . rest)
(if (<= x pivot)
(lp (append left (list x)) right pivot rest)
(lp left (append right (list x)) pivot rest))))))))
(_
;; Insertion sort because I am lazy!
(let ((vec (list->vector lst)))
(let outer ((i 1))
(when (< i (vector-length vec))
(let inner ((j i))
(when (> j 0)
(let ((a (vector-ref vec j))
(b (vector-ref vec (1- j))))
(when (compare a b)
(vector-set! vec j b)
(vector-set! vec (1- j) a)
(inner (1- j))))))
(outer (1+ i))))
(vector->list vec)))))
(define (filter-map proc lst)
(let lp ((lst lst))

View file

@ -115,7 +115,7 @@
(('pushed?) ($ pushed?))))
(define (^clock-emitter bcom x y interval)
(define timer (spawn ^cell 0))
(define timer (spawn ^cell -1))
(define position (vector x y 0))
(match-lambda*
(('type) 'emitter)