diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..418d0ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.csv +.venv diff --git a/posu.py b/posu.py new file mode 100644 index 0000000..01f4e9c --- /dev/null +++ b/posu.py @@ -0,0 +1,53 @@ +""" +HITOBJECTS SYNTAX: + x,y,type,hitSound,objectParams,hitSample +""" + + +class SliderParams(): + def __init__(self, curvePoints, curveType="B", slides=1, length=100): + self.curveType = curveType # B=bézier, L=linear, P=perfect circle + self.curvePoints = curvePoints # '|x1:y1|x2:y2,' + self.slides: int = slides + self.length: float = length #visual length in osu px + def __str__(self): + curvePoints = [f"{x}:{y}" for x, y in self.curvePoints] + curvePoints = "|".join(curvePoints) + return f"{self.curveType}|{curvePoints},{self.slides},{self.length},," + +class HitObject(): + """ + Base class for hit objects. + (x, y) int*int: position tuple + time: int: time in ms where the object is placed. + type: int + hitsound: assumed to be the default (0) + objectParams: awa (comma separated list) + hitSample: don't write anything + """ + def __init__(self, pos=(0, 0), time=0, objectType=0, newCombo=False, objectParams=""): + self.pos = pos + self.time = time + self.objectType = objectType + self.newCombo = newCombo*2 + self.objectParams = objectParams + def __str__(self): + return (f"{self.pos[0]},{self.pos[1]},{self.time},{self.objectType+self.newCombo},0,{self.objectParams},") + + + +def import_hitobjects(filename: str): + with open(filename, 'r') as file: + lines = f.readlines() + for line in lines: + params = line.split(",") + if params[3] == + + + + + +""" +circle = HitObject((120, 120),250,0,1) +slider = HitObject((120, 120), 250, 1, False, SliderParams(((130, 130), (110, 110)))) +"""