Mercurial > skaapsteker
view scripts/level-editor @ 431:b753ea36909e
Fix the bug Anna found.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 09 Apr 2011 18:46:28 +0200 |
parents | 8d2e4b2a65bf |
children | 5d59238f8996 |
line wrap: on
line source
#!/usr/bin/env python "Skaapsteker level editor" from __future__ import division import optparse import os.path import sys sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) import pygame import pygame.key from pygame.locals import (SWSURFACE, QUIT, KEYDOWN, K_UP, K_DOWN, K_LEFT, K_RIGHT, KMOD_SHIFT, K_q, K_ESCAPE) from skaapsteker.constants import SCREEN from skaapsteker.level import DebugLevel from skaapsteker.sprites.player import Player from skaapsteker.widgets.text import Text from skaapsteker.gamestate import GameState from skaapsteker.sound import SoundSystem FRAMERATE = 60 def run(levelname): clock = pygame.time.Clock() screen_surface = pygame.display.get_surface() game = GameState("game.json") player = Player(game.world, SoundSystem(False)) level = DebugLevel(levelname, player) level_surface = level.get_surface() position = [0, 0] fpss = [FRAMERATE] while True: events = pygame.event.get() for ev in events: if ev.type is QUIT: return elif ev.type is KEYDOWN: distance = 64 if ev.mod & KMOD_SHIFT != 0: distance *= 10 if ev.key == K_UP: position[1] -= distance elif ev.key == K_DOWN: position[1] += distance elif ev.key == K_LEFT: position[0] -= distance elif ev.key == K_RIGHT: position[0] += distance elif ev.key in (K_q, K_ESCAPE): return position[0] = max(position[0], 0) position[0] = min(position[0], level.pixel_size[0] - SCREEN[0]) position[1] = max(position[1], 0) position[1] = min(position[1], level.pixel_size[1] - SCREEN[1]) clip_rect = pygame.Rect(position, screen_surface.get_size()) level_surface.set_clip(clip_rect) level.draw(level_surface) level.sprites.draw(level_surface) screen_surface.blit(level_surface, (0, 0), clip_rect) tilepos = (position[0] // 64, position[1] // 64) text = Text("Level: %s.\nOffset: %r Tile: %r\nFPS: %.1f" % (levelname, position, tilepos, sum(fpss)/len(fpss)), (10, 10), color='white') text.draw(screen_surface) pygame.display.flip() fpss = (fpss + [1000 / clock.tick(FRAMERATE)])[-FRAMERATE:] def main(): p = optparse.OptionParser(usage="%prog [options] levelname") opts, args = p.parse_args() if len(args) != 1: p.error("Must provide level name") pygame.display.init() pygame.font.init() pygame.display.set_mode(SCREEN, SWSURFACE) pygame.display.set_caption("Skaapsteker Level Editor") pygame.key.set_repeat(100, 20) run(args[0]) if __name__ == '__main__': main()