08c5f6b32bf987a7a81a4c7946540a7624a949fa
[erdslangetjie.git] / erdslangetjie / editor / editor.py
1 import sys
2 import os
3 import kivy
4
5 kivy.require('1.6.0')
6
7 from kivy.app import App
8 from kivy.logger import Logger, LoggerHistory
9 from kivy.uix.widget import Widget
10 from kivy.uix.floatlayout import FloatLayout
11 from kivy.graphics import Color, Rectangle
12
13 from erdslangetjie.data import filepath, load
14 from erdslangetjie.level import Level
15
16
17 class EditorWindow(FloatLayout):
18
19     def __init__(self, level):
20         super(EditorWindow, self).__init__(size=(648, 480))
21         if os.path.exists(filepath(level)):
22             level_data = load(level)
23             self.level = level
24         elif os.path.exists(filepath('levels/' + level)):
25             level_data = load('levels/' + level)
26             self.level = 'levels/' + level
27         else:
28             print 'Unable to find %s - treating this as a new level' % level
29             level_data = load('levels/blank.txt')
30             if 'levels/' in level:
31                 self.level = level
32             else:
33                 self.level = 'levels/' + level
34         self.level_obj = Level(level_data)
35         level_data.close()
36         self.level_obj.load_tiles()
37
38     def build(self):
39         self.clear_widgets()
40         tiles = self.level_obj.get_tiles()
41         tile_size = 24
42         bx, by = 0, 0
43         for tile_line in tiles:
44             bx = 0
45             for tile in tile_line:
46                 node = Widget(size=(tile_size, tile_size), pos=(bx, by))
47                 with node.canvas:
48                     Color(1, 1, 1)
49                     Rectangle(pos=node.pos, size=node.size,
50                             texture=tile.texture)
51                 self.add_widget(node)
52                 bx += tile_size
53             by += tile_size
54
55
56 class EditorApp(App):
57
58     def __init__(self, level):
59         self.level = level
60         super(EditorApp, self).__init__()
61
62     def build(self):
63         editor = EditorWindow(self.level)
64         editor.build()
65         return editor
66
67
68 def main():
69     if len(sys.argv) > 1:
70         level = sys.argv[1]
71     else:
72         level = 'level1.txt'
73     # Uncomment to silence excessive logging
74     #for hdlr in Logger.handlers[:]:
75     #    if not isinstance(hdlr, LoggerHistory):
76     #        Logger.removeHandler(hdlr)
77     EditorApp(level).run()
78
79
80 if __name__ == '__main__':
81     main()