45545a2830aba42fbbacbe9f99cc88fb22c3d692
[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()
35         self.level_obj.load(level_data)
36         level_data.close()
37         self.level_obj.load_tiles()
38
39     def build(self):
40         self.clear_widgets()
41         tiles = self.level_obj.get_tiles()
42         tile_size = 24
43         bx, by = 0, 0
44         for tile_line in tiles:
45             bx = 0
46             for tile in tile_line:
47                 node = Widget(size=(tile_size, tile_size), pos=(bx, by))
48                 with node.canvas:
49                     Color(1, 1, 1)
50                     Rectangle(pos=node.pos, size=node.size,
51                             texture=tile.texture)
52                 self.add_widget(node)
53                 bx += tile_size
54             by += tile_size
55
56
57 class EditorApp(App):
58
59     def __init__(self, level):
60         self.level = level
61         super(EditorApp, self).__init__()
62
63     def build(self):
64         editor = EditorWindow(self.level)
65         editor.build()
66         return editor
67
68
69 def main():
70     if len(sys.argv) > 1:
71         level = sys.argv[1]
72     else:
73         level = 'level1.txt'
74     # Uncomment to silence excessive logging
75     #for hdlr in Logger.handlers[:]:
76     #    if not isinstance(hdlr, LoggerHistory):
77     #        Logger.removeHandler(hdlr)
78     EditorApp(level).run()
79
80
81 if __name__ == '__main__':
82     main()