base system
parent
2d17887635
commit
6329f77d3b
|
@ -1,27 +0,0 @@
|
||||||
class main():
|
|
||||||
def IND(self, index):
|
|
||||||
print("Indexing is not supported with this instruction")
|
|
||||||
return (1)
|
|
||||||
def EXEC(self, params):
|
|
||||||
end = "\n"
|
|
||||||
flush = False
|
|
||||||
text = ""
|
|
||||||
if len(params) > 0:
|
|
||||||
text = params[0]
|
|
||||||
if len(params) > 1:
|
|
||||||
end = params[1]
|
|
||||||
if len(params) > 2:
|
|
||||||
flush = bool(params[2])
|
|
||||||
if len(params) > 3:
|
|
||||||
return (1)
|
|
||||||
print(text, end=end, flush=flush)
|
|
||||||
return (0, None)
|
|
||||||
def ATR(self, target):
|
|
||||||
print("Getting an attribute is not supported with this instruction")
|
|
||||||
return (1)
|
|
||||||
def STAT(self, params):
|
|
||||||
print("Statements are not supported with this instruction")
|
|
||||||
return (1)
|
|
||||||
def OP(self, arg1, arg2):
|
|
||||||
print("Operations are not supported with this instruction")
|
|
||||||
return (1)
|
|
|
@ -169,6 +169,9 @@ class game:
|
||||||
if min < target < max: return True
|
if min < target < max: return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def getobjbyid(self, id):
|
||||||
|
return self._objects[id]
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
for i in list(self._objects.values()):
|
for i in list(self._objects.values()):
|
||||||
pos = i.position + self.camera.position
|
pos = i.position + self.camera.position
|
||||||
|
|
|
@ -10,4 +10,13 @@
|
||||||
"rename": "Umbenennen",
|
"rename": "Umbenennen",
|
||||||
"delete": "Loeschen",
|
"delete": "Loeschen",
|
||||||
"NN": "Neuer Name:",
|
"NN": "Neuer Name:",
|
||||||
|
"save": "Speichern",
|
||||||
|
"attribute": "Attribut",
|
||||||
|
"attribute-val": "Wert",
|
||||||
|
"newval": "Neuen Wert eingeben",
|
||||||
|
"error": "Fehler",
|
||||||
|
"SCE": "Länge des neuen Wertes muss 1 sein!",
|
||||||
|
"true": "Wahr",
|
||||||
|
"false": "Falsch",
|
||||||
|
"objs": "Objekte",
|
||||||
}
|
}
|
|
@ -10,4 +10,13 @@
|
||||||
"rename": "Rename",
|
"rename": "Rename",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"NN": "New name:",
|
"NN": "New name:",
|
||||||
|
"save": "Save",
|
||||||
|
"attribute": "Attribute",
|
||||||
|
"attribute-val": "Value",
|
||||||
|
"newval": "Enter new value",
|
||||||
|
"error": "Error",
|
||||||
|
"SCE": "Length of the new value must be 1!",
|
||||||
|
"true": "True",
|
||||||
|
"false": "False",
|
||||||
|
"objs": "Objects"
|
||||||
}
|
}
|
142
main.py
142
main.py
|
@ -3,6 +3,7 @@ import sys
|
||||||
sys.dont_write_bytecode = True
|
sys.dont_write_bytecode = True
|
||||||
import mtTkinter as tk
|
import mtTkinter as tk
|
||||||
from tkinter import ttk as tkk
|
from tkinter import ttk as tkk
|
||||||
|
from tkinter import messagebox
|
||||||
import PCPL
|
import PCPL
|
||||||
import langsys
|
import langsys
|
||||||
import time
|
import time
|
||||||
|
@ -34,7 +35,7 @@ class script:
|
||||||
PCPL.LIS("HASHBASE")
|
PCPL.LIS("HASHBASE")
|
||||||
PCPL.run(self.code)
|
PCPL.run(self.code)
|
||||||
|
|
||||||
class preview:
|
class previewrend:
|
||||||
def __init__(self, size, container, offset):
|
def __init__(self, size, container, offset):
|
||||||
self._size = size
|
self._size = size
|
||||||
self._grid = {}
|
self._grid = {}
|
||||||
|
@ -70,14 +71,23 @@ def selectlang(new):
|
||||||
|
|
||||||
def add(objtype):
|
def add(objtype):
|
||||||
global objtree
|
global objtree
|
||||||
|
crucial = ["obj"]
|
||||||
obj = getattr(types, objtype)()
|
obj = getattr(types, objtype)()
|
||||||
temp = {"id": objtype, "args": dir(obj), "name": LH.string(objtype)}
|
args = {}
|
||||||
|
for i in dir(obj):
|
||||||
|
if i.startswith("_"): continue
|
||||||
|
args[i] = getattr(obj, i)
|
||||||
|
temp = {"id": objtype, "args": args, "name": LH.string(objtype)}
|
||||||
id = ""
|
id = ""
|
||||||
chars = list(string.ascii_letters)
|
chars = list(string.ascii_letters)
|
||||||
for i in range(255):
|
for i in range(255):
|
||||||
id = id + random.choice(chars)
|
id = id + random.choice(chars)
|
||||||
objtree.insert("", tk.END, text=LH.string(objtype), image=icons[objtype], iid=id)
|
objtree.insert("", tk.END, text=LH.string(objtype), image=icons[objtype], iid=id, tags=("objsel"))
|
||||||
gamedata[id] = temp
|
gamedata[id] = temp
|
||||||
|
if objtype in crucial:
|
||||||
|
preview.addobj(obj)
|
||||||
|
gamedata[id]["args"]["ID"] = obj.ID
|
||||||
|
preview.render()
|
||||||
|
|
||||||
def renameobj():
|
def renameobj():
|
||||||
target = objtree.focus()
|
target = objtree.focus()
|
||||||
|
@ -90,6 +100,7 @@ def renameobj():
|
||||||
def delobj():
|
def delobj():
|
||||||
target = objtree.focus()
|
target = objtree.focus()
|
||||||
if target == "": return
|
if target == "": return
|
||||||
|
atritree.delete(*atritree.get_children())
|
||||||
objtree.delete(target)
|
objtree.delete(target)
|
||||||
gamedata.pop(target)
|
gamedata.pop(target)
|
||||||
|
|
||||||
|
@ -99,10 +110,56 @@ def rpopup(event):
|
||||||
finally:
|
finally:
|
||||||
rmenu.grab_release()
|
rmenu.grab_release()
|
||||||
|
|
||||||
|
def getattributes(target):
|
||||||
|
out = {}
|
||||||
|
for i in dir(target):
|
||||||
|
if i.startswith("_"): continue
|
||||||
|
out[i] = getattr(target, i)
|
||||||
|
return out
|
||||||
|
|
||||||
|
def updatribute(event):
|
||||||
|
global currentat
|
||||||
|
target = objtree.focus()
|
||||||
|
currentat = target
|
||||||
|
atritree.delete(*atritree.get_children())
|
||||||
|
for i in gamedata[target]["args"]:
|
||||||
|
if i in ignoreat: continue
|
||||||
|
|
||||||
|
if i in valtypes:
|
||||||
|
val = gamedata[target]["args"][i]
|
||||||
|
atritree.insert("", tk.END, text=i, values=(val))
|
||||||
|
else:
|
||||||
|
root = atritree.insert("", tk.END, text=i)
|
||||||
|
temp = getattributes(gamedata[target]["args"][i])
|
||||||
|
for f in temp:
|
||||||
|
atritree.insert(root, tk.END, text=f, values=(temp[f]))
|
||||||
|
|
||||||
|
def halatribute(event):
|
||||||
|
target = atritree.focus()
|
||||||
|
name = atritree.item(target, "text")
|
||||||
|
parent = atritree.parent(target)
|
||||||
|
if name in valtypes:
|
||||||
|
if parent == "":
|
||||||
|
new = valtypes[name](gamedata[currentat]["args"][name])
|
||||||
|
gamedata[currentat]["args"][name] = new
|
||||||
|
if "ID" in gamedata[currentat]["args"]:
|
||||||
|
temp = preview.getobjbyid(gamedata[currentat]["args"]["ID"])
|
||||||
|
setattr(temp, name, new)
|
||||||
|
atritree.item(target, values=(new))
|
||||||
|
else:
|
||||||
|
parent = atritree.item(parent, "text")
|
||||||
|
new = valtypes[name](getattr(gamedata[currentat]["args"][parent], name))
|
||||||
|
setattr(gamedata[currentat]["args"][parent], name, new)
|
||||||
|
atritree.item(target, values=(new))
|
||||||
|
preview.render()
|
||||||
|
|
||||||
def GUIinit():
|
def GUIinit():
|
||||||
global container
|
global container
|
||||||
global objtree
|
global objtree
|
||||||
global rmenu
|
global rmenu
|
||||||
|
global atritree
|
||||||
|
global currentat
|
||||||
|
global preview
|
||||||
container = tk.Tk()
|
container = tk.Tk()
|
||||||
|
|
||||||
global icons
|
global icons
|
||||||
|
@ -111,9 +168,22 @@ def GUIinit():
|
||||||
for i in os.listdir("icons"):
|
for i in os.listdir("icons"):
|
||||||
icons[i.split(".")[0]] = tk.PhotoImage(file=f"icons/{i}")
|
icons[i.split(".")[0]] = tk.PhotoImage(file=f"icons/{i}")
|
||||||
|
|
||||||
|
#preview init
|
||||||
|
preview = hashengine.game(renderer=lambda size: previewrend(size, container=container, offset=[0, 0]))
|
||||||
|
|
||||||
#tree init
|
#tree init
|
||||||
objtree = tkk.Treeview(container)
|
objtree = tkk.Treeview(container, selectmode="browse")
|
||||||
objtree.grid()
|
objtree.heading("#0", text=LH.string("objs"))
|
||||||
|
objtree.tag_bind("objsel", "<<TreeviewSelect>>", updatribute)
|
||||||
|
objtree.grid(row=10, column=11)
|
||||||
|
|
||||||
|
#attribute tree init
|
||||||
|
currentat = "temp"
|
||||||
|
atritree = tkk.Treeview(container, columns=("#1"), selectmode="browse")
|
||||||
|
atritree.heading("#0", text=LH.string("attribute"))
|
||||||
|
atritree.heading("#1", text=LH.string("attribute-val"))
|
||||||
|
atritree.bind("<Double-1>", halatribute)
|
||||||
|
atritree.grid(row=11, column=11)
|
||||||
|
|
||||||
#right click menu
|
#right click menu
|
||||||
rmenu = tk.Menu(container, tearoff=0)
|
rmenu = tk.Menu(container, tearoff=0)
|
||||||
|
@ -129,6 +199,7 @@ def GUIinit():
|
||||||
menu.add_cascade(label=LH.string("file"), menu=filemenu)
|
menu.add_cascade(label=LH.string("file"), menu=filemenu)
|
||||||
filemenu.add_command(label=LH.string("new"))
|
filemenu.add_command(label=LH.string("new"))
|
||||||
filemenu.add_command(label=LH.string("open"))
|
filemenu.add_command(label=LH.string("open"))
|
||||||
|
filemenu.add_command(label=LH.string("save"))
|
||||||
filemenu.add_separator()
|
filemenu.add_separator()
|
||||||
filemenu.add_command(label=LH.string("exit"), command=container.quit)
|
filemenu.add_command(label=LH.string("exit"), command=container.quit)
|
||||||
|
|
||||||
|
@ -144,8 +215,69 @@ def GUIinit():
|
||||||
|
|
||||||
container.mainloop()
|
container.mainloop()
|
||||||
|
|
||||||
|
def ats(mode, old):
|
||||||
|
#mode 0 = string
|
||||||
|
#mode 1 = single character
|
||||||
|
out = easygui.enterbox(LH.string("newval"), LH.string("newval"))
|
||||||
|
if out:
|
||||||
|
if mode == 1 and len(out) != 1:
|
||||||
|
messagebox.showerror(LH.string("error"), LH.string("SCE"))
|
||||||
|
return "N"
|
||||||
|
return out
|
||||||
|
else:
|
||||||
|
return "N"
|
||||||
|
|
||||||
|
def anum(old):
|
||||||
|
out = easygui.integerbox(LH.string("newval"), LH.string("newval"), lowerbound=-9999999999, upperbound=9999999999)
|
||||||
|
if out:
|
||||||
|
return out
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def abool(old):
|
||||||
|
out = easygui.boolbox(LH.string("newval"), LH.string("newval"), (LH.string("true"), LH.string("false")))
|
||||||
|
return out
|
||||||
|
|
||||||
|
def acode(old):
|
||||||
|
out = easygui.textbox(LH.string("newval"), LH.string("newval"), old)
|
||||||
|
if out:
|
||||||
|
return out
|
||||||
|
else:
|
||||||
|
return "NULL"
|
||||||
|
|
||||||
global types
|
global types
|
||||||
|
global icon
|
||||||
|
global ignoreat
|
||||||
|
global valtypes
|
||||||
types = hashengine.enum({"obj": hashengine.obj, "script": script})
|
types = hashengine.enum({"obj": hashengine.obj, "script": script})
|
||||||
icon = hashengine.enum({"obj": "icons/object.png", "script": "icons/script.pngg"})
|
icon = hashengine.enum({"obj": "icons/object.png", "script": "icons/script.pngg"})
|
||||||
|
ignoreat = ["ID", "execute"]
|
||||||
|
"""self.position = vector2()
|
||||||
|
self.char = " "
|
||||||
|
self.ID = 0
|
||||||
|
self.gravity = 0
|
||||||
|
self.acceleration = vector2()
|
||||||
|
self.velocity = vector2()
|
||||||
|
self.friction = 0
|
||||||
|
self.collide = True
|
||||||
|
self.touch = True
|
||||||
|
self.anchored = False
|
||||||
|
self.bcolor = color3(255, 255, 255)
|
||||||
|
self.fcolor = color3()"""
|
||||||
|
valtypes = {
|
||||||
|
"char": lambda old: ats(1, old),
|
||||||
|
"gravity": anum,
|
||||||
|
"x": anum,
|
||||||
|
"y": anum,
|
||||||
|
"z": anum,
|
||||||
|
"r": anum,
|
||||||
|
"g": anum,
|
||||||
|
"b": anum,
|
||||||
|
"friction": anum,
|
||||||
|
"collide": abool,
|
||||||
|
"touch": abool,
|
||||||
|
"anchored": abool,
|
||||||
|
"code": acode,
|
||||||
|
}
|
||||||
|
|
||||||
GUIinit()
|
GUIinit()
|
Loading…
Reference in New Issue