Mercurial > skaapsteker
annotate scripts/level-editor @ 577:62666b542afe
Fixed MacOS X packaging, updated .hgignore.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 10 Apr 2011 13:59:30 +0200 |
parents | 5d59238f8996 |
children |
rev | line source |
---|---|
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
2 "Skaapsteker level editor" |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
3 |
54 | 4 from __future__ import division |
5 | |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
6 import optparse |
29 | 7 import os.path |
8 import sys | |
9 | |
31
6f1e43d2fda8
Gaar. That's not what I meant
Stefano Rivera <stefano@rivera.za.net>
parents:
30
diff
changeset
|
10 sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
11 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
12 import pygame |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
13 import pygame.key |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
14 from pygame.locals import (SWSURFACE, QUIT, KEYDOWN, K_UP, K_DOWN, K_LEFT, |
45
7f7b4bfbaf0e
Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents:
42
diff
changeset
|
15 K_RIGHT, KMOD_SHIFT, K_q, K_ESCAPE) |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
16 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
17 from skaapsteker.constants import SCREEN |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
92
diff
changeset
|
18 from skaapsteker.level import DebugLevel |
92
f065109d80ae
Add Player to level-editor, so it can use Level again
Stefano Rivera <stefano@rivera.za.net>
parents:
79
diff
changeset
|
19 from skaapsteker.sprites.player import Player |
54 | 20 from skaapsteker.widgets.text import Text |
223
f675abd90529
player needs a world argument
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
21 from skaapsteker.gamestate import GameState |
279
8d2e4b2a65bf
fixed level editor
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
223
diff
changeset
|
22 from skaapsteker.sound import SoundSystem |
455
5d59238f8996
level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
23 from skaapsteker.data import filepath |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
24 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
25 FRAMERATE = 60 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
26 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
27 def run(levelname): |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
28 clock = pygame.time.Clock() |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
29 screen_surface = pygame.display.get_surface() |
455
5d59238f8996
level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
30 game = GameState(None) |
5d59238f8996
level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
31 game.load_game(filepath("game.json")) |
279
8d2e4b2a65bf
fixed level editor
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
223
diff
changeset
|
32 player = Player(game.world, SoundSystem(False)) |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
92
diff
changeset
|
33 level = DebugLevel(levelname, player) |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
34 level_surface = level.get_surface() |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
35 position = [0, 0] |
69
e4089417766e
FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents:
54
diff
changeset
|
36 fpss = [FRAMERATE] |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
37 while True: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
38 events = pygame.event.get() |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
39 for ev in events: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
40 if ev.type is QUIT: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
41 return |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
42 elif ev.type is KEYDOWN: |
24 | 43 distance = 64 |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
44 if ev.mod & KMOD_SHIFT != 0: |
24 | 45 distance *= 10 |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
46 if ev.key == K_UP: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
47 position[1] -= distance |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
48 elif ev.key == K_DOWN: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
49 position[1] += distance |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
50 elif ev.key == K_LEFT: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
51 position[0] -= distance |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
52 elif ev.key == K_RIGHT: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
53 position[0] += distance |
45
7f7b4bfbaf0e
Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents:
42
diff
changeset
|
54 elif ev.key in (K_q, K_ESCAPE): |
32 | 55 return |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
56 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
57 position[0] = max(position[0], 0) |
35 | 58 position[0] = min(position[0], level.pixel_size[0] - SCREEN[0]) |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
59 position[1] = max(position[1], 0) |
35 | 60 position[1] = min(position[1], level.pixel_size[1] - SCREEN[1]) |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
61 |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
62 clip_rect = pygame.Rect(position, screen_surface.get_size()) |
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
63 level_surface.set_clip(clip_rect) |
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
64 level.draw(level_surface) |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
65 level.sprites.draw(level_surface) |
42
4a9e26f1f35a
Remove area keyword for pygame 1.8 compatability
Neil Muller <drnlmuller@gmail.com>
parents:
40
diff
changeset
|
66 screen_surface.blit(level_surface, (0, 0), clip_rect) |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
67 |
54 | 68 tilepos = (position[0] // 64, position[1] // 64) |
69 text = Text("Level: %s.\nOffset: %r Tile: %r\nFPS: %.1f" | |
69
e4089417766e
FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents:
54
diff
changeset
|
70 % (levelname, position, tilepos, sum(fpss)/len(fpss)), |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
75
diff
changeset
|
71 (10, 10), |
54 | 72 color='white') |
79
fe8652a060df
Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents:
75
diff
changeset
|
73 text.draw(screen_surface) |
45
7f7b4bfbaf0e
Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents:
42
diff
changeset
|
74 |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
75 pygame.display.flip() |
69
e4089417766e
FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents:
54
diff
changeset
|
76 fpss = (fpss + [1000 / clock.tick(FRAMERATE)])[-FRAMERATE:] |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
77 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
78 def main(): |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
79 p = optparse.OptionParser(usage="%prog [options] levelname") |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
80 opts, args = p.parse_args() |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
81 if len(args) != 1: |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
82 p.error("Must provide level name") |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
83 pygame.display.init() |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
84 pygame.font.init() |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
85 pygame.display.set_mode(SCREEN, SWSURFACE) |
33
14f6c6ac1605
silly ladder level plus typo correction
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
32
diff
changeset
|
86 pygame.display.set_caption("Skaapsteker Level Editor") |
19
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
87 pygame.key.set_repeat(100, 20) |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
88 run(args[0]) |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
89 |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
90 if __name__ == '__main__': |
0831989ce8e1
Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
91 main() |