blob: f9e112d783954753939f442a6c13aecc00d29d06 (
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-file 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 image-file)
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)))
|