04c95d93593ccd063d2c4d2a569a3d6fbd24fa63
[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 from erdslangetjie.constants import TILE_SIZE, QUIET
16
17
18 class EditorWindow(FloatLayout):
19
20     def __init__(self, level):
21         super(EditorWindow, self).__init__(size=(800, 600))
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(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         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     if QUIET:
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()