Editor displays something, although it's hack'ish
[erdslangetjie.git] / erdslangetjie / editor / editor.py
1 import sys
2 import os
3 import kivy
4 from erdslangetjie.data import filepath, load
5 from erdslangetjie.level import Level
6
7 kivy.require('1.6.0')
8
9 from kivy.app import App
10 from kivy.logger import Logger, LoggerHistory
11 from kivy.uix.widget import Widget
12
13 from kivy.uix.floatlayout import FloatLayout
14 from kivy.uix.scatter import Scatter
15 from kivy.graphics import Color, Rectangle
16
17
18 class EditorWindow(FloatLayout):
19
20     def __init__(self, level):
21         super(EditorWindow, self).__init__()
22         if os.path.exists(filepath(level)):
23             level_data = load(level)
24             self.level = level
25         elif os.path.exists(filepath('levels/' + level)):
26             level_data = load('levels/' + level)
27             self.level = 'levels/' + level
28         else:
29             print 'Unable to find %s - treating this as a new level' % level
30             level_data = load('levels/blank.txt')
31             if 'levels/' in level:
32                 self.level = level
33             else:
34                 self.level = 'levels/' + level
35         self.level_obj = Level()
36         self.level_obj.load(level_data)
37         level_data.close()
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 = Scatter(pos=(bx, by), size=(tile_size, tile_size))
48                 with node.canvas:
49                     Color(1, 1, 1)
50                     Rectangle(size=node.size, 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()