(define-module (game util assets) #:use-module (ice-9 ftw) #:use-module (ice-9 textual-ports) #:use-module (chickadee graphics texture) #:use-module (chickadee graphics color) #:export ( assets-load assets-load-image tile-texture tile-atlas hero-texture hero-atlas assets-map-levels read-level-map defeat-image victory-image ) ) (define tile-texture #f) (define tile-atlas #f) (define hero-texture #f) (define hero-atlas #f) (define defeat-image #f) (define victory-image #f) (define (assets-location) "find the location of the assets directory. The location is specified by the ASSET_DIR environment variable, or defaults to 'assets' in the current directory." (pk "Assets location: " (or (getenv "ASSET_DIR") "assets" ))) (define (assets-file-name . names) "Return the full path of a file in the assets directory. The file is specified by a list of names, which are joined together. The ASSET_DIR environment variable can be used to specify a prefix to the asset directory." (string-append (assets-location) "/" (string-join names "/"))) (define (read-level-map filename) "Read a level map from a file. The map is a list of strings, where each string is a row of the map. The map is read from the file in the 'levels' directory." (call-with-input-file (assets-file-name "levels" filename) get-string-all)) (define (level-map? filename ) "Return true if the filename is a level map file. Level map files have the extension '.map'." (string-suffix? ".map" filename)) (define (assets-map-levels f) "Apply a function to each level map file in the 'levels' directory. The function is passed the filename of the level map file." (map (compose f read-level-map) (scandir (assets-file-name "levels") level-map?))) (define (assets-load-image filename) "Load an image from a file in the assets directory. The filename is specified as a list of names, which are joined together. The image is returned as a texture." (load-image (assets-file-name "images" filename))) (define (assets-load) "Load all the assets for the game." (set! tile-texture (assets-load-image "simples_pimples.png")) (set! tile-atlas (split-texture tile-texture 16 16)) (set! hero-texture (assets-load-image "lr_penguin2.png")) (set! hero-atlas (split-texture hero-texture 32 32)) (set! defeat-image (assets-load-image "defeat.jpg")) (set! victory-image (assets-load-image "victory.jpg")) )