From cee75e57560b77e8ec0a394c1d3c98b9839be80e Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Thu, 15 May 2025 13:46:26 +0200 Subject: Refactor!! --- src/macroknight/tiles.hy | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/macroknight/tiles.hy (limited to 'src/macroknight/tiles.hy') diff --git a/src/macroknight/tiles.hy b/src/macroknight/tiles.hy new file mode 100644 index 0000000..40692e7 --- /dev/null +++ b/src/macroknight/tiles.hy @@ -0,0 +1,36 @@ +(import pygame) + +(defclass TileSet [] + (defn __init__ [self image scaling tile-w tile-h [padding 0]] + (setv self.tile-w tile-w) + (setv self.tile-h tile-h) + (setv self.scaling scaling) + + (setv self.sheet + (let [surf (pygame.image.load "assets/monochrome-transparent.png") + map-width (* (.get_width surf) self.scaling) + map-height (* (.get_height surf) self.scaling)] + (if (!= self.scaling 1) + (pygame.transform.scale surf #(map-width map-height)) + surf))) + + (setv self.tiles + (lfor y (range 0 (.get_height self.sheet) (+ tile-h (* padding self.scaling))) + x (range 0 (.get_width self.sheet) (+ tile-w (* padding self.scaling))) + (let [tile (pygame.Surface #(tile-w tile-h))] + (.blit tile self.sheet #(0 0) #(x y tile-w tile-h)) + tile))))) + +(defclass MiniSprite [pygame.sprite.Sprite] + (defn __init__ [self tile tile-size x y] + (.__init__ (super)) + (setv self.surf (pygame.Surface #(tile-size tile-size))) + (.blit self.surf tile #(0 0)) + (setv self.rect (.get_rect self.surf + :left (* x tile-size) + :top (* y tile-size))))) + +(defn draw-tile [target tileset tile-id x y] + (let [tile (get tileset.tiles tile-id) + sprite (MiniSprite tile tileset.tile-w x y)] + (.blit target sprite.surf sprite.rect))) -- cgit v1.2.3