(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 [goal False]] (.__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))) (setv self.goal goal))) (defn draw-tile [target tileset tile-id #* args #** kwargs] (let [tile (get tileset.tiles tile-id) sprite (MiniSprite tile tileset.tile-w #* args #** kwargs)] (.blit target sprite.surf sprite.rect) sprite))