From a8810fbb633d14f4dbb935cbe79d0bd14e54ed3a Mon Sep 17 00:00:00 2001 From: justuswolff Date: Fri, 24 May 2024 11:25:10 +0200 Subject: [PATCH] fixed model loading saving --- langsys/lang/de_DE.LAN | 1 + langsys/lang/en_EN.LAN | 1 + main.py | 103 +++++++++++++++++++++++++++++++---------- tests/newmodeltest | 1 + 4 files changed, 82 insertions(+), 24 deletions(-) create mode 100644 tests/newmodeltest diff --git a/langsys/lang/de_DE.LAN b/langsys/lang/de_DE.LAN index 571bf9c..d2b5ca3 100644 --- a/langsys/lang/de_DE.LAN +++ b/langsys/lang/de_DE.LAN @@ -36,4 +36,5 @@ "COP": "Position aendern", "export": "Exportieren", "import": "Importieren", +"clog": "Logs erstellen", } \ No newline at end of file diff --git a/langsys/lang/en_EN.LAN b/langsys/lang/en_EN.LAN index 2efa38e..77c4862 100644 --- a/langsys/lang/en_EN.LAN +++ b/langsys/lang/en_EN.LAN @@ -36,4 +36,5 @@ "COP": "Change position", "export": "Export", "import": "Import", +"clog": "Create logs", } \ No newline at end of file diff --git a/main.py b/main.py index fa55a87..1458725 100644 --- a/main.py +++ b/main.py @@ -61,7 +61,9 @@ def prepgamedata(): ptext = tk.Label(tempwin, text="NONE") ptext.place() count = 1 + modellist = {} for i in gamedata: + id = i i = gamedata[i] ptext.config(text=i["name"]) bar.step(count/len(gamedata)) @@ -84,10 +86,15 @@ def prepgamedata(): temp2 = getattributes(arg) temp2.update({"ARGID": arg._type}) tempargs[argname] = temp2 + if objtree.parent(id) != "": + modelname = objtree.item(objtree.parent(id), "text") + if not modelname in list(modellist.keys()): + modellist[modelname] = [] + modellist[modelname].append(count-2) temp["args"] = tempargs out.append(temp) tempwin.destroy() - return out + return [out, modellist] def prepspecified(target): out = [] @@ -97,7 +104,9 @@ def prepspecified(target): ptext = tk.Label(tempwin, text="NONE") ptext.place() count = 1 + modellist = {} for i in target: + id = i i = gamedata[i] ptext.config(text=i["name"]) bar.step(count/len(gamedata)) @@ -120,10 +129,15 @@ def prepspecified(target): temp2 = getattributes(arg) temp2.update({"ARGID": arg._type}) tempargs[argname] = temp2 + if objtree.parent(id) != "": + modelname = objtree.item(objtree.parent(id), "text") + if not modelname in list(modellist.keys()): + modellist[modelname] = [] + modellist[modelname].append(count-2) temp["args"] = tempargs out.append(temp) tempwin.destroy() - return out + return [out, modellist] class script: def __init__(self): @@ -483,9 +497,13 @@ def importobj(target): for i in outargs: setattr(preview.getobjbyid(gamedata[oid]["args"]["ID"]), i, outargs[i]) id["args"].update(outargs) + return oid -def load(cleargame=True): - file = filedialog.askopenfile() +def load(cleargame=True, GUI=True, path=""): + if GUI == True: + file = filedialog.askopenfile() + else: + file = open(path, 'r') tempwin = tk.Tk() ptext = tk.Label(tempwin, text="NONE") ptext.place(y=30) @@ -496,18 +514,45 @@ def load(cleargame=True): target = ast.literal_eval(target) if cleargame: clear() - count = 1 - bar = tkk.Progressbar(tempwin, maximum=len(target)) - bar.place(width=200) - for i in target: - ptext.config(text="Current: "+i["name"]) - bar.step() - stat.config(text=f"Object {count}/{len(target)}") - tempwin.update() - importobj(i) - count += 1 - tempwin.destroy() - preview.render() + if len(target) == 0: return + if not isinstance(target[0], list): + #old save file + count = 1 + bar = tkk.Progressbar(tempwin, maximum=len(target)) + bar.place(width=200) + for i in target: + ptext.config(text="Current: "+i["name"]) + bar.step() + stat.config(text=f"Object {count}/{len(target)}") + tempwin.update() + importobj(i) + count += 1 + tempwin.destroy() + preview.render() + else: + #new save file + count = 1 + bar = tkk.Progressbar(tempwin, maximum=len(target)) + bar.place(width=200) + ids = {} + for i in target[0]: + ptext.config(text="Current: "+i["name"]) + bar.step() + stat.config(text=f"Object {count}/{len(target)}") + tempwin.update() + id = importobj(i) + if id: + ids[count-1] = id + count += 1 + if GUIe == True: + for i in target[1]: + tempid = genid() + objtree.insert("", tk.END, text=i, image=icons["model"], iid=tempid, tags=("HASHMODEL",)) + for f in target[1][i]: + objtree.detach(ids[f]) + objtree.move(ids[f], tempid, "end") + tempwin.destroy() + preview.render() def export(): temp = objtree.selection() @@ -526,11 +571,13 @@ def export(): def log(text, end="\n", flush=False): global logfile - if not os.path.exists("logs"): - os.mkdir("logs") - file = open("logs/"+logfile+".txt", 'a') - file.write(str(text)+end) - file.close() + global clog + if clog: + if not os.path.exists("logs"): + os.mkdir("logs") + file = open("logs/"+logfile+".txt", 'a') + file.write(str(text)+end) + file.close() def NULL(): pass @@ -558,12 +605,13 @@ class gsound: def testing(): global testproc global running + global clog try: if running == True: return except: pass running = True - testproc = multiprocessing.Process(target=execgame, args=(prepgamedata(),)) + testproc = multiprocessing.Process(target=execgame, args=(prepgamedata(), clog.get())) testproc.start() def run(): @@ -735,6 +783,7 @@ def GUIinit(): global currentat global preview global GUIe + global clog GUIe = True container = tk.Tk() container.bind("", updatepreviewcam, add="+") @@ -780,6 +829,10 @@ def GUIinit(): filemenu.add_command(label=LH.string("open"), command=load) filemenu.add_command(label=LH.string("save"), command=save) filemenu.add_separator() + #create logs var + clog = tk.BooleanVar() + filemenu.add_checkbutton(label=LH.string("clog"), onvalue=1, offvalue=0, variable=clog) + filemenu.add_separator() filemenu.add_command(label=LH.string("export"), command=export) filemenu.add_command(label=LH.string("import"), command=lambda: load(False)) filemenu.add_separator() @@ -915,13 +968,15 @@ def aposy(old): return old return tempvar -def execgame(gametree): +def execgame(gametree, shouldlog=True): global GUIe global preview + global clog preview = hashengine.game(renderer=nullrend, sounddir="/") GUIe = False - for i in gametree: + for i in gametree[0]: importobj(i) + clog = shouldlog run() class rsound: diff --git a/tests/newmodeltest b/tests/newmodeltest new file mode 100644 index 0000000..79a0457 --- /dev/null +++ b/tests/newmodeltest @@ -0,0 +1 @@ +[[{'id': 'obj', 'name': 'Objekt', 'args': {'anchored': True, 'char': '#', 'collide': True, 'friction': 0, 'gravity': 0, 'acceleration': {'x': 0, 'y': 0, 'ARGID': 'vector2'}, 'bcolor': {'b': 255, 'g': 255, 'r': 255, 'ARGID': 'color3'}, 'fcolor': {'b': 0, 'g': 0, 'r': 0, 'ARGID': 'color3'}, 'position': {'x': 0, 'y': 0, 'ARGID': 'vector2'}, 'velocity': {'x': 0, 'y': 0, 'ARGID': 'vector2'}}}, {'id': 'obj', 'name': 'Objekt', 'args': {'anchored': True, 'char': '#', 'collide': True, 'friction': 0, 'gravity': 0, 'acceleration': {'x': 0, 'y': 0, 'ARGID': 'vector2'}, 'bcolor': {'b': 255, 'g': 255, 'r': 255, 'ARGID': 'color3'}, 'fcolor': {'b': 0, 'g': 0, 'r': 0, 'ARGID': 'color3'}, 'position': {'x': 1, 'y': 0, 'ARGID': 'vector2'}, 'velocity': {'x': 0, 'y': 0, 'ARGID': 'vector2'}}}, {'id': 'obj', 'name': 'Objekt', 'args': {'anchored': True, 'char': '#', 'collide': True, 'friction': 0, 'gravity': 0, 'acceleration': {'x': 0, 'y': 0, 'ARGID': 'vector2'}, 'bcolor': {'b': 255, 'g': 255, 'r': 255, 'ARGID': 'color3'}, 'fcolor': {'b': 0, 'g': 0, 'r': 0, 'ARGID': 'color3'}, 'position': {'x': 2, 'y': 0, 'ARGID': 'vector2'}, 'velocity': {'x': 0, 'y': 0, 'ARGID': 'vector2'}}}], {'test': [0, 1, 2]}] \ No newline at end of file