Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from pygame import Rect
- from pygame import Vector2
- import lzma, base64
- from random import randint
- import time
- class tile:
- def __init__(s, xy):
- global TILE_SIZE
- s.v = Vector2(xy) * TILE_SIZE
- s.r = Rect(s.v, (TILE_SIZE, TILE_SIZE))
- s.oc = (randint(0, 128), randint(0, 128), randint(0, 128))
- def draw(s):
- global PDS
- pygame.draw.rect(PDS, s.oc, s.r)
- class timer:
- def __init__(s, seconds):
- s.ts = time.time()
- s.seconds = seconds
- def update(s):
- now = time.time()
- duration = now - s.ts
- frames = int(duration / s.seconds)
- if frames >= 1:
- s.ts = now
- return frames
- def lerp(start, end, t):
- return start + t * (end - start)
- def chunks(l, n):
- n = max(1, n)
- return [l[i:i+n] for i in range(0, len(l), n)]
- def unzip_map(b64lztm, ms):
- tilemapData = lzma.decompress(base64.b64decode(b64lztm))
- tileData = chunks(list(bytes(tilemapData)), ms[0])
- return tileData
- pygame.init()
- PDR = Rect(0, 0, 1280, 720)
- PDS = pygame.display.set_mode(PDR.size)
- LIGHT_COLOR = (255, 255, 255)
- LIGHT_RADIUS = 100
- LIGHT_SIZE = (LIGHT_RADIUS * 2, LIGHT_RADIUS * 2)
- LIGHT_STEP = 1 / LIGHT_RADIUS
- CHANGE_LIGHT = timer(2)
- B64LZ_MAP = b'/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4I//A+FdAADv+///o7f/QH7h8+istaVmxFJbf3DyyvZOfLJYj4Vfhg0C/LVwslsyx\
- fU+fWSBV5qPvpmSwCW4f3Mx6/irI9loI4V4jzH6KJQ6AXt6T36sjPXKxZVHINJzMenuS7mW2MveZBJq87YMTQG9SeDTSFHXKzhXEijwwO4C5p2v\
- o3va0lm0mLB4lAJ23s3eG3KIS60vuZp/BZsdrG/jHhs6OPeHZzrMTZ7Vyy9V+94M5v5gic44TX73iPv8ccM0/Xzhg9u2/fZKZKwWvkd0u/XjOvc\
- tCRqGztaE0LcCe1d7bAOGgS7hbQjaGNePefAdkBkCOYQHYzzcMVDIRqBKzZ4XCcqr/etuu+m2y4QNUo0cLjpV9P8uZfcnT17D2QDyonxhFJaN8n\
- pDXo5ZrsMy0dXLgcBfyR+dwu9g0bDMv+MID4PB+xodDXuuqLXbhrimgU534Hds2qfZ5pAOmOipD6L/hw4rQIbk2+2zBhoAilpiV9MgYprNUAq2r\
- zz+c444nWZH6rsELHK8hCi2fSfM07gP2u3xq5S+/KI52soSGx4n2vOBrHmkC7cH7BpUKqBpPIhFt6fhAmp1gC0YZktKqulHSq/ussy4LPVzU06r\
- rNED0pxiTYydEVvVcr+DIFsa0VpQA11V5AhhUB7b0R/a/pOwFFtWRE5rucTRFdsiiXlytPbsucVDat7ruspEGL6gTzTQ7+5oEMkzQXVnkY0ylh1\
- 8Ek1Xt9wzFUSzAmqchvy8zp9EkdyQuVIpfCTFPF3I8ltRMcSQ+dY1SHCsOMqYuKYA52nruErQvDn1Ec9y2CbHGlW4/UD0JCdzaJkzAVvuvVqNCY\
- ido6YmO72Z01T+GRzJGN/VC03bcIB5/q41+963Ze2caDawRuTNsQsEoQtkjmWkYfQ2Uyjgo0Tfg6VjTqNja4SniJEWHkEf6hIYTpauNeYxj2hYx\
- XLnrgsPugCkxL8p5zk/GuECXYCIiiL2iJOvnVnbSHxWQUd7dfEZT0HClrPezmWgMvGB/z7yugsQlXzj5RQSf6PsiyiDf6q3t2BmClbxm0dmd58u\
- fewS/6KYw++8RgFH+GIl9U+xKxdWi1VIaxEQlFLRsQuadanXG0h+QVWHw+LG/Zwp1ekgDEWeQpIZ5w5Gox/R2DQe/vU1BlmsNVggTT8SyUnYQg1\
- /S/ks3WGRBQDmB9VdW397v06wl9K62YCfkcULFRotgPasltMf/pC3MltOOc6yGZl9TtcmMsYIX3VsqKyZMZneLFtDwLRHsAPQEzDjeWlpKbgwG2\
- O4znAa0ai+SWKWo48Aj0pL6Ez7kfCIxlDkbIsV9n9JdNaoVwAAAADjYQjsoXP5OwAB/QeAoAIA04tu3rHEZ/sCAAAAAARZWg=='
- MAP_SIZE = (256, 144)
- TILE_SIZE = 5
- MAP = unzip_map(B64LZ_MAP, MAP_SIZE)
- for row in range(MAP_SIZE[1]):
- for col in range(MAP_SIZE[0]):
- if not MAP[row][col]: continue
- MAP[row][col] = tile((col, row))
- MAP[row][col].draw()
- # define some colors
- BLACK = (0, 0, 0)
- WHITE = (255, 255, 255)
- RED = (128, 0, 0)
- quitDemo = False
- while not quitDemo:
- events = pygame.event.get()
- for event in events:
- if event.type == pygame.QUIT:
- quitDemo = True
- if CHANGE_LIGHT.update():
- LIGHT_COLOR = (randint(128, 255), randint(128, 255), randint(128, 255))
- mp = Vector2(pygame.mouse.get_pos())
- mr = Rect(mp - (LIGHT_RADIUS, LIGHT_RADIUS), LIGHT_SIZE)
- aligned_mp = mp // TILE_SIZE * TILE_SIZE
- aligned_mr = Rect(aligned_mp - (LIGHT_RADIUS, LIGHT_RADIUS), LIGHT_SIZE)
- for x in range(aligned_mr.left, aligned_mr.right, TILE_SIZE):
- for y in range(aligned_mr.top, aligned_mr.bottom, TILE_SIZE):
- if x < 0 or x >= PDR.w or y < 0 or y >= PDR.h: continue
- d = abs(Vector2(x, y).distance_to(mp))
- if d <= LIGHT_RADIUS:
- t = MAP[y // TILE_SIZE][x // TILE_SIZE]
- if not t:
- r = int(lerp(LIGHT_COLOR[0] - 128, 0, LIGHT_STEP * d))
- g = int(lerp(LIGHT_COLOR[1] - 128, 0, LIGHT_STEP * d))
- b = int(lerp(LIGHT_COLOR[2] - 128, 0, LIGHT_STEP * d))
- else:
- r = int(lerp(LIGHT_COLOR[0], t.oc[0], LIGHT_STEP * d))
- g = int(lerp(LIGHT_COLOR[1], t.oc[1], LIGHT_STEP * d))
- b = int(lerp(LIGHT_COLOR[2], t.oc[2], LIGHT_STEP * d))
- pygame.draw.rect(PDS, (r, g, b), (x, y, TILE_SIZE, TILE_SIZE))
- pygame.display.update()
- pygame.time.Clock().tick(120)
Add Comment
Please, Sign In to add comment