diff options
author | Gene Pasquet <gene@pacerevenue.com> | 2025-05-15 13:46:26 +0200 |
---|---|---|
committer | Gene Pasquet <gene@pacerevenue.com> | 2025-05-15 13:46:26 +0200 |
commit | cee75e57560b77e8ec0a394c1d3c98b9839be80e (patch) | |
tree | 8bd29322dc951ad827435e0c4ab162ed13ff911e /src/macroknight/tiles.hy | |
parent | b8580d616831213934eb424d9284621aadc4c544 (diff) |
Refactor!!
Diffstat (limited to 'src/macroknight/tiles.hy')
-rw-r--r-- | src/macroknight/tiles.hy | 36 |
1 files changed, 36 insertions, 0 deletions
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))) |