aboutsummaryrefslogtreecommitdiff
path: root/src/macroknight/tiles.hy
blob: 40692e7b03c69eb677eab32182584247b8a97783 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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)))