view scripts/level-editor @ 30:60d5673f9d4a

We can do that more cleanly :P
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 03 Apr 2011 18:45:10 +0200
parents 10c067be3e8f
children 6f1e43d2fda8
line wrap: on
line source

#!/usr/bin/env python
"Skaapsteker level editor"

import optparse
import os.path
import sys

sys.path.insert(0, os.path.abspath(os.path.abspath(__file__)))

import pygame
import pygame.key
from pygame.locals import (SWSURFACE, QUIT, KEYDOWN, K_UP, K_DOWN, K_LEFT,
                           K_RIGHT, KMOD_SHIFT)

from skaapsteker.constants import SCREEN
from skaapsteker.level import Level

FRAMERATE = 60

def run(levelname):
    clock = pygame.time.Clock()
    surface = pygame.display.get_surface()
    level = Level(levelname)
    position = [0, 0]
    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

        position[0] = max(position[0], 0)
        position[0] = min(position[0], level.level_size[0] - SCREEN[0])
        position[1] = max(position[1], 0)
        position[1] = min(position[1], level.level_size[1] - SCREEN[1])

        level.draw(surface, position)
        pygame.display.flip()
        clock.tick(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("Skapsteker Level Editor")
    pygame.key.set_repeat(100, 20)
    run(args[0])

if __name__ == '__main__':
    main()