(module (bd grid) () (import scheme (chicken base) (chicken module) raylib (imugi core) (imugi resource) (imugi drawing) (imugi math) (srfi 1) (srfi 99)) (export grid) (define (grid len wid default) (define (iter i acc) (if (= len i) acc (iter (+ 1 i) (cons (make-list wid default) acc)))) (iter 0 '())) (export gv) (define (gv grd x y) (list-ref (list-ref grd y) x)) (export gv!) (define (gv! grd x y val) (set! (list-ref (list-ref grd y) x) val)) (define (draw-grid-square offset width x y entity) (let ((square-pos (v+ offset (vec (* x width) (* y width))))) (push-render-object 'screen 0 (lambda () (draw-rectangle-2d square-pos width width (make-color 0.1 0.1 0.1 0.5) #f 2))) (when (or (eqv? entity 'player) (eqv? entity 'enemy)) (push-render-object 'screen 1 (lambda () (draw-texture-2d (v+ (vec 0 -5) square-pos) (texture (case entity ((player) "../res/sprites/pawns/blue.png") ((enemy) "../res/sprites/pawns/red.png"))) (make-color 1 1 1 1))))))) (export draw-grid) (define draw-grid (make-system 'draw-grid 10 'entity '() (lambda (_ grid-view) (let ((gd (grid-view-grid grid-view)) (width (grid-view-width grid-view)) (pos (grid-view-pos grid-view))) (do ((i 0 (+ 1 i))) ((= i (length gd)) gd) (let ((row (list-ref gd i))) (do ((j 0 (+ 1 j))) ((= j (length row)) row) (draw-grid-square pos width i j (list-ref row j))))))))) (export grid-view grid-view-grid) (define-record-type (grid-view start-pos gd width) grid-view? (start-pos grid-view-pos set-grid-view-pos!) (gd grid-view-grid set-grid-view-grid!) (width grid-view-width set-grid-view-width!)) )