#pragma once #include "hitsound.h" #include struct Osu_Beatmap; struct Osu_Game; struct Osu_Graphics; // TODO: Read AR from beatmap file and use to calculate these values. static const Uint16 OSU_HITOBJECT_LEAD_IN = 500; static const Uint16 OSU_HITOBJECT_LEAD_OUT = 100; enum Osu_HitObjectType : Uint8 { OSU_HITOBJECT_TYPE_CIRCLE, OSU_HITOBJECT_TYPE_SLIDER, OSU_HITOBJECT_TYPE_SPINNER, }; struct Osu_HitObject { enum Osu_HitObjectType type; Osu_HitSounds hitSounds; // Which hit sounds should be played when the object is hit. float x, y; // Position in osu! pixels. Sint32 time; // Time in ticks (milliseconds) when the object should be hit. }; // A collection of hit objects. struct Osu_HitObjects { struct Osu_HitObject* objects; size_t len; size_t cursor; }; struct Osu_HitObjects* Osu_LoadHitObjectsFromBeatmap(struct Osu_Beatmap* beatmap); void Osu_DestroyHitObjects(struct Osu_HitObjects* hitObjects); void Osu_UpdateHitObjects(struct Osu_HitObjects* hitObjects, struct Osu_Game* game); void Osu_RenderHitObjects(struct Osu_HitObjects* hitObjects, struct Osu_Graphics* graphics, Sint32 tick);