aboutsummaryrefslogtreecommitdiff
path: root/src/macroknight/tiles.hy
diff options
context:
space:
mode:
Diffstat (limited to 'src/macroknight/tiles.hy')
-rw-r--r--src/macroknight/tiles.hy36
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)))