From df700e757be0f87e17dac89557ce03a0ff6c4ac6 Mon Sep 17 00:00:00 2001 From: BirDt_ Date: Tue, 7 Apr 2026 19:22:41 +0800 Subject: [PATCH] Exports and guarded constructors/mutators for all visuals --- engine/components.scm | 66 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/engine/components.scm b/engine/components.scm index 9ec6d3c..6bc5148 100644 --- a/engine/components.scm +++ b/engine/components.scm @@ -305,6 +305,8 @@ ;; Visuals ;; Primitive shape visual types +(export pixel-2d? make-pixel-2d + pixel-2d-position set-pixel-2d-position!) (define-record-type (int:make-pixel-2d position) pixel-2d? @@ -317,6 +319,9 @@ (define set-pixel-2d-position! (guarded-mutator pixel-2d? 'position vector2?)) +(export line-2d? make-line-2d line-2d-start-pos + set-line-2d-start-pos! line-2d-end-pos set-line-2d-end-pos! + line-2d-thickness set-line-2d-thickness!) (define-record-type (int:make-line-2d start-pos end-pos thickness) line-2d? @@ -337,6 +342,9 @@ (define set-line-2d-thickness! (guarded-mutator line-2d? 'start-pos (conjoin integer? positive?))) +(export circle-2d? make-circle-2d circle-2d-center + set-circle-2d-center! circle-2d-radius set-circle-2d-radius! + circle-2d-filled set-circle-2d-filled!) (define-record-type (int:make-circle-2d center radius filled) circle-2d? @@ -353,11 +361,15 @@ (define set-circle-2d-center! (guarded-mutator circle-2d? 'center vector2?)) (define set-circle-2d-radius! - (guarded-mutator circle-2d? 'radius ((conjoin integer? positive?) radius))) + (guarded-mutator circle-2d? 'radius (conjoin integer? positive?))) (define set-circle-2d-filled! (guarded-mutator circle-2d? 'filled boolean?)) ;; TODO: might be nicer to have the origin and width/height inside a rect-2d type or similar +(export rectangle-2d? make-rectangle-2d rectangle-2d-origin + set-rectangle-2d-origin! rectangle-2d-width set-rectangle-2d-width! + rectangle-2d-height set-rectangle-2d-height! rectangle-2d-filled + set-rectangle-2d-filled! rectangle-2d-thickness set-rectangle-2d-thickness!) (define-record-type (int:make-rectangle-2d origin width height filled thickness) rectangle-2d? @@ -367,6 +379,28 @@ (filled rectangle-2d-filled? int:set-rectangle-2d-filled!) (thickness rectangle-2d-thickness int:set-rectangle-2d-thickness)) +(define (make-rectangle-2d origin width height filled thickness) + (assert (vector2? origin)) + (assert ((conjoin integer? positive?) width)) + (assert ((conjoin integer? positive?) height)) + (assert (boolean? filled)) + (assert ((conjoin integer? positive?) thickness)) + (int:make-rectangle-2d origin width height filled thickness)) + +(define set-rectangle-2d-origin! + (guarded-mutator rectangle-2d? 'origin vector2?)) +(define set-rectangle-2d-width! + (guarded-mutator rectangle-2d? 'width (conjoin integer? positive?))) +(define set-rectangle-2d-height! + (guarded-mutator rectangle-2d? 'height (conjoin integer? positive?))) +(define set-rectangle-2d-filled! + (guarded-mutator rectangle-2d? 'filled boolean?)) +(define set-rectangle-2d-thickness! + (guarded-mutator rectangle-2d? 'thickness (conjoin integer? positive?))) + +(export triangle-2d? make-triangle-2d triangle-2d-vertex-1 + triangle-2d-set-vertex-1! triangle-2d-vertex-2 triangle-2d-set-vertex-2! + triangle-2d-vertex-3 triangle-2d-set-vertex-3! triangle-2d-filled set-triangle-2d-filled!) (define-record-type (int:make-triangle-2d vertex-1 vertex-2 vertex-3 filled) triangle-2d? @@ -375,11 +409,41 @@ (vertex-3 triangle-2d-vertex-3 int:set-triangle-2d-vertex-3!) (filled triangle-2d-filled int:set-triangle-2d-filled!)) +(define (make-triangle-2d vertex-1 vertex-2 vertex-3 filled) + (assert (vector2? vertex-1)) + (assert (vector2? vertex-2)) + (assert (vector2? vertex-3)) + (assert (boolean? filled)) + (int:make-triangle-2d vertex-1 vertex-2 vertex-3 filled)) + +(define set-triangle-2d-vertex-1! + (guarded-mutator triangle-2d? 'vertex-1 vector2?)) +(define set-triangle-2d-vertex-2! + (guarded-mutator triangle-2d? 'vertex-2 vector2?)) +(define set-triangle-2d-vertex-3! + (guarded-mutator triangle-2d? 'vertex-3 vector2?)) +(define set-triangle-2d-vertex-filled! + (guarded-mutator triangle-2d? 'filled boolean?)) + ;; Visual component +(export visual-2d? make-visual-2d visual-2d-draw set-visual-2d-draw! + visual-2d-color set-visual-2d-color! visual-2d-layer set-visual-2d-layer!) (define-record-type (int:make-visual-2d draw color layer) visual-2d? (draw visual-2d-draw int:set-visual-2d-draw!) ;; NOTE: Typing here: pixel-2d, line-2d, circle-2d, rectangle-2d, triangle-2d etc (color visual-2d-color int:set-visual-2d-color!) (layer visual-2d-layer int:set-visual-2d-layer!)) + +(define (make-visual-2d draw color layer) + (assert ((conjoin triangle-2d? rectangle-2d? circle-2d? line-2d? pixel-2d?) draw)) + (assert (color? color)) + (assert (integer? layer))) + +(define set-visual-2d-draw! + (guarded-mutator visual-2d? 'draw (conjoin triangle-2d? rectangle-2d? circle-2d? line-2d? pixel-2d?))) +(define set-visual-2d-color! + (guarded-mutator visual-2d? 'color color?)) +(define set-visual-2d-layer! + (guarded-mutator visual-2d? 'layer integer?)) )