X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=erdslangetjie%2Feditor%2Feditor.py;h=2e2c0bc92f0f6c475398fb254f9563be174b76a1;hb=7226f363830b124ffc4f6b9a8a1a254a07b54be2;hp=8d9fdcbfd5f410a870d220debe5a0fc62b66131d;hpb=743cc9f8d9560dcc1fd8071c1926a1979bee655f;p=erdslangetjie.git diff --git a/erdslangetjie/editor/editor.py b/erdslangetjie/editor/editor.py index 8d9fdcb..2e2c0bc 100644 --- a/erdslangetjie/editor/editor.py +++ b/erdslangetjie/editor/editor.py @@ -1,24 +1,129 @@ -import kivy +import sys +import os -kivy.require('1.6.0') +from erdslangetjie.constants import TILE_SIZE from kivy.app import App from kivy.uix.widget import Widget +from kivy.uix.floatlayout import FloatLayout +from kivy.graphics import Color, Rectangle +from kivy.uix.label import Label +from kivy.utils import platform +from kivy.config import Config +from erdslangetjie.data import filepath, load +from erdslangetjie.level import Level -class EditorWindow(Widget): - pass + +if platform() != 'android': + Config.set('graphics', 'width', '1326') + Config.set('graphics', 'height', '760') + + +class EditorWindow(FloatLayout): + + def __init__(self, level): + super(EditorWindow, self).__init__(size=(1326, 760)) + if os.path.exists(filepath(level)): + level_data = load(level) + self.level = level + elif os.path.exists(filepath('levels/' + level)): + level_data = load('levels/' + level) + self.level = 'levels/' + level + else: + print 'Unable to find %s - treating this as a new level' % level + level_data = load('levels/blank.txt') + if 'levels/' in level: + self.level = level + else: + self.level = 'levels/' + level + self.level_obj = Level(level_data) + level_data.close() + self.level_obj.load_tiles() + + self.tool = None + self.tool_widgets = [] + + def build(self): + self.clear_widgets() + tiles = self.level_obj.get_tiles() + bx, by = 0, 0 + self.nodes = {} + for tile_line in tiles: + bx = 0 + for tile in tile_line: + node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by)) + node.bind(on_touch_down=self.change_node) + node.bind(on_touch_move=self.change_node) + with node.canvas: + Color(1, 1, 1) + Rectangle(pos=node.pos, size=node.size, + texture=tile.texture) + self.add_widget(node) + self.nodes[(bx, by)] = node + bx += TILE_SIZE + by += TILE_SIZE + + name = Label(text="Level: [color=00ffcc]%s[/color]" % self.level, + markup=True, font_size=24, pos=(500, 360)) + self.add_widget(name) + + self.draw_toolbar() + + def draw_toolbar(self): + for widget in self.tool_widgets: + widget.unbind(on_ref_press=self.change_tool) + self.remove_widget(widget) + self.tool_widgets = [] + y = 300 + for tool in ['wall', 'floor', 'entrance', 'exit']: + if self.tool == tool: + color = '00cccc' + else: + color = 'cccccc' + tool_label = Label(text='[color=%s][ref=%s]%s[/color]' % + (color, tool, tool), markup=True, font_size=24, + pos=(500, y)) + y -= 50 + tool_label.bind(on_ref_press=self.change_tool) + self.add_widget(tool_label) + self.tool_widgets.append(tool_label) + + def change_tool(self, label, ref): + self.tool = ref + self.draw_toolbar() + + def contained(self, node, pos): + if pos[0] < node.pos[0] or pos[0] > node.pos[0] + TILE_SIZE: + return False + if pos[1] < node.pos[1] or pos[1] > node.pos[1] + TILE_SIZE: + return False + return True + + def change_node(self, node, touch): + if self.contained(node, touch.pos): + print touch, node, node.size, node.pos class EditorApp(App): - def build(self): - return EditorWindow() + def __init__(self, level): + self.level = level + super(EditorApp, self).__init__() + + def build(self): + editor = EditorWindow(self.level) + editor.build() + return editor def main(): - EditorApp().run() + if len(sys.argv) > 1: + level = sys.argv[1] + else: + level = 'level1.txt' + EditorApp(level).run() if __name__ == '__main__': - main() + main()