implementation of SEQSID

main
Justus Jan Nico Wolff 2024-05-25 18:45:59 +02:00
parent 06fbfa4051
commit d8b2a9f69d
3 changed files with 41 additions and 1 deletions

View File

@ -200,6 +200,14 @@ class camera(obj):
if self.mode == cammode.follow and self.subject: if self.mode == cammode.follow and self.subject:
self.position = self.subject.position self.position = self.subject.position
class seqobj:
def __init__(self, objects):
self._objects = objects
def moveby(self, pos):
for i in self._objects:
i.position + pos
class game: class game:
def __init__(self, size=[10, 10], renderer=stdrend, sounddir=""): def __init__(self, size=[10, 10], renderer=stdrend, sounddir=""):
if renderer == None: raise TypeError("Renderer class needed!") if renderer == None: raise TypeError("Renderer class needed!")
@ -212,6 +220,7 @@ class game:
self._size = size self._size = size
self._objects = {} self._objects = {}
self._SIDS = {} self._SIDS = {}
self._SEQSIDS = {}
self.camera = camera() self.camera = camera()
self._renderer = renderer(size, self.camera) self._renderer = renderer(size, self.camera)
self._threads = [] self._threads = []
@ -219,6 +228,12 @@ class game:
def getobjbySID(self, target): def getobjbySID(self, target):
return self._objects[self._SIDS[target]] return self._objects[self._SIDS[target]]
def getobjseqbySID(self, target):
out = []
for i in self._SEQSIDS[target]:
out.append(self._objects[i])
return seqobj(out)
def isdown(self, key): def isdown(self, key):
temp = self._renderer.getkeys() temp = self._renderer.getkeys()
if key in temp: if key in temp:

20
main.py
View File

@ -1,5 +1,5 @@
import sys import sys
# Justus Jan Nico Wolff last updated on 24.05.2024 at 1AM bruh # Justus Jan Nico Wolff
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
@ -339,6 +339,13 @@ def changemodelpos(event):
atritree.delete(*atritree.get_children()) atritree.delete(*atritree.get_children())
atritree.insert("", index=tk.END, text="x", tags=("OA",)) atritree.insert("", index=tk.END, text="x", tags=("OA",))
atritree.insert("", index=tk.END, text="y", tags=("OA",)) atritree.insert("", index=tk.END, text="y", tags=("OA",))
atritree.insert("", index=tk.END, text="SEQSID", values=(calcseqsid(objtree.focus())), tags=("SID",))
def calcseqsid(target):
out = ""
for f in objtree.get_children(target):
out = out + gamedata[f]["SID"][:5]
return out
def rpopup(event): def rpopup(event):
try: try:
@ -610,11 +617,22 @@ def run():
i = gamedata[i] i = gamedata[i]
if i["id"] != "sound" and i["id"] != "rawsound": continue if i["id"] != "sound" and i["id"] != "rawsound": continue
maingame.sounds[i["args"]["spath"]] = i["args"]["sdata"] maingame.sounds[i["args"]["spath"]] = i["args"]["sdata"]
skip = []
for i in gamedata: for i in gamedata:
GID = i
i = gamedata[i] i = gamedata[i]
if i["id"] != "obj": continue if i["id"] != "obj": continue
objid = i["args"]["ID"] objid = i["args"]["ID"]
maingame._SIDS[i["SID"]] = objid maingame._SIDS[i["SID"]] = objid
if objtree.parent(GID) != "" and not objtree.parent(GID) in skip:
skip.append(objtree.parent(GID))
out = ""
out2 = []
for f in objtree.get_children(objtree.parent(GID)):
out = out + gamedata[f]["SID"][:5]
out2.append(f)
maingame._SEQSIDS[out] = out2
maingame._objects = copy.deepcopy(preview._objects) maingame._objects = copy.deepcopy(preview._objects)
""" """
objects = copy.deepcopy(preview._objects) objects = copy.deepcopy(preview._objects)

View File

@ -44,6 +44,13 @@ to safely access an Object (no failsafes tho) you can use HASHGAME.getobjbyid(\<
SID's are ID's of objects that always stay the same. You can view the SID of an object under the HASHENGINE editor under an object's attributes. Double click on the SID attribute to copy the SID to your clipboard. SID's are ID's of objects that always stay the same. You can view the SID of an object under the HASHENGINE editor under an object's attributes. Double click on the SID attribute to copy the SID to your clipboard.
Now to access an object trough it's SID use HASHGAME.getobjbySID(\<SID>) this will return the object class. Now to access an object trough it's SID use HASHGAME.getobjbySID(\<SID>) this will return the object class.
#### SEQSID's
SEQSID's are ID's of an "model" that was created in the HASHENGINE editor, it is calculated by putting every 1-5 fifth character of every object in the model into one string. Double click on the SEQSID attribute to copy the SID to your clipboard.
To access object's trough an SEQSID use HASHGAME.getobjseqbySID(\<SEQSID>), this will return an seqobj class.
the seqobj class can do one single thing: move objects by an specified offset. that means, use \<SEQOBJ>.moveby(\<POS>).
this will move every object of that SEQSID by that offset.
to add an Object to the running game use HASHGAME.addobj(\<target object>). to add an Object to the running game use HASHGAME.addobj(\<target object>).
to remove an object from the running game use HASHGAME.removeobj(\<target object class>) or HASHGAME.removeobjbyid(\<ID>). to remove an object from the running game use HASHGAME.removeobj(\<target object class>) or HASHGAME.removeobjbyid(\<ID>).