4 from erdslangetjie.constants import TILE_SIZE
6 from kivy.app import App
7 from kivy.uix.widget import Widget
8 from kivy.uix.floatlayout import FloatLayout
9 from kivy.graphics import Color, Rectangle
10 from kivy.uix.label import Label
11 from kivy.utils import platform
12 from kivy.config import Config
14 from erdslangetjie.data import filepath, load
15 from erdslangetjie.level import Level
18 if platform() != 'android':
19 Config.set('graphics', 'width', '1326')
20 Config.set('graphics', 'height', '760')
23 class EditorWindow(FloatLayout):
25 def __init__(self, level):
26 super(EditorWindow, self).__init__(size=(1326, 760))
27 if os.path.exists(filepath(level)):
28 level_data = load(level)
30 elif os.path.exists(filepath('levels/' + level)):
31 level_data = load('levels/' + level)
32 self.level = 'levels/' + level
34 print 'Unable to find %s - treating this as a new level' % level
35 level_data = load('levels/blank.txt')
36 if 'levels/' in level:
39 self.level = 'levels/' + level
40 self.level_obj = Level(level_data)
42 self.level_obj.load_tiles()
45 self.tool_widgets = []
49 tiles = self.level_obj.get_tiles()
52 for tile_line in tiles:
54 for tile in tile_line:
55 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
56 node.bind(on_touch_down=self.change_node)
57 node.bind(on_touch_move=self.change_node)
60 Rectangle(pos=node.pos, size=node.size,
63 self.nodes[(bx, by)] = node
67 name = Label(text="Level: [color=00ffcc]%s[/color]" % self.level,
68 markup=True, font_size=24, pos=(500, 360))
73 def draw_toolbar(self):
74 for widget in self.tool_widgets:
75 widget.unbind(on_ref_press=self.change_tool)
76 self.remove_widget(widget)
77 self.tool_widgets = []
79 for tool in ['wall', 'floor', 'entrance', 'exit']:
84 tool_label = Label(text='[color=%s][ref=%s]%s[/color]' %
85 (color, tool, tool), markup=True, font_size=24,
88 tool_label.bind(on_ref_press=self.change_tool)
89 self.add_widget(tool_label)
90 self.tool_widgets.append(tool_label)
92 def change_tool(self, label, ref):
96 def contained(self, node, pos):
97 if pos[0] < node.pos[0] or pos[0] > node.pos[0] + TILE_SIZE:
99 if pos[1] < node.pos[1] or pos[1] > node.pos[1] + TILE_SIZE:
103 def change_node(self, node, touch):
104 if self.contained(node, touch.pos):
105 print touch, node, node.size, node.pos
108 class EditorApp(App):
110 def __init__(self, level):
112 super(EditorApp, self).__init__()
115 editor = EditorWindow(self.level)
121 if len(sys.argv) > 1:
125 EditorApp(level).run()
128 if __name__ == '__main__':