Development Info
Base
See also Building Blocks
Base contains a few item classes
TimedBpmNoteHitHold
These are different from the item list classes
TimedListBpmListNoteListHitListHoldList
The reason for separating them is so that we can custom implement list methods that Python list class does not provide.
Each Item uses a pd.Series. Each List uses a pd.DataFrame.
Item.data will yield a pd.Series.
ItemList.df will yield a pd.DataFrame.
We use pd because it helps in optimization and provides abundant functionalities to extend from.
Item Structure
Bolded elements are new properties introduced in the child class.
Timed
Props: offset
Note(Timed)
Props: column, offset
Hit(Note)
Props: column, offset
Hold(Note)
Props: length, column, offset
Bpm(Timed)
Props: bpm, metronome, offset
Item List Structure
For each corresponding Item, there is its list part, which provides additional functionality
TimedListNoteList(TimedList)HitList(NoteList)HoldList(NoteList)BpmList(TimedList)
Map Structure
Every map is a @dataclass.
For each map, it has an objs dictionary of TimedList children. This is the default.
In other words, it always initializes with these classes, but inheriting classes can override objs.
Overriding updates the classes, where it should opt for OsuHoldList instead of HoldList.
MapSet Structure
A MapSet is simply a list of Map s.