From ff242fd1a52d636087ae492f800f0631827371b4 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 22 May 2024 06:52:36 -0400 Subject: [PATCH] Fix some slowness; clock emitters emit immediately. --- game.scm | 25 ++++++++++++++++--------- modules/game/actors.scm | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/game.scm b/game.scm index 4cd58e6..eb158b2 100644 --- a/game.scm +++ b/game.scm @@ -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)) diff --git a/modules/game/actors.scm b/modules/game/actors.scm index 48ad02f..e11bd60 100644 --- a/modules/game/actors.scm +++ b/modules/game/actors.scm @@ -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)