2727#include < Audio/PCM.hpp>
2828
2929#include < memory>
30+ #include < set>
3031#include < string>
3132#include < vector>
3233
@@ -41,6 +42,10 @@ class ShaderCache;
4142class TransitionShaderManager ;
4243} // namespace Renderer
4344
45+ namespace UserSprites {
46+ class SpriteManager ;
47+ } // namespace UserSprites
48+
4449class Preset ;
4550class PresetFactoryManager ;
4651class TimeKeeper ;
@@ -192,6 +197,51 @@ class PROJECTM_EXPORT ProjectM
192197
193198 auto WindowHeight () -> int;
194199
200+ /* *
201+ * @brief Creates a new user sprite.
202+ * @param type The type of the sprite to create.
203+ * @param spriteData The type-dependent sprite data.
204+ * @return A unique, non-zero sprite identifier if the sprite was created successfully,
205+ * or zero if any error occurred or the sprite limit was reached.
206+ */
207+ auto AddUserSprite (const std::string& type, const std::string& spriteData) -> uint32_t;
208+
209+ /* *
210+ * @brief Destroys a single sprite using its identifier.
211+ * @param spriteIdentifier The identifier of the sprite to destroy.
212+ */
213+ void DestroyUserSprite (uint32_t spriteIdentifier);
214+
215+ /* *
216+ * @brief Destroys all active user sprites.
217+ */
218+ void DestroyAllUserSprites ();
219+
220+ /* *
221+ * @brief Returns the current user sprite count.
222+ * @return The number of currently active user sprites.
223+ */
224+ auto UserSpriteCount () const -> uint32_t;
225+
226+ /* *
227+ * @brief Sets a new limit for user sprites.
228+ * Any sprites above the new limit will be removed in order, oldest first.
229+ * @param maxSprites The new sprite limit. 0 disables sprites, 16 is the default.
230+ */
231+ void SetUserSpriteLimit (uint32_t maxSprites);
232+
233+ /* *
234+ * @brief Returns the current user sprite display limit.
235+ * @return The current user sprite limit.
236+ */
237+ auto UserSpriteLimit () const -> uint32_t;
238+
239+ /* *
240+ * @brief Returns a list of identifiers for all active user sprites.
241+ * @return A list of all active user sprite identifiers, ordered by age (oldest first).
242+ */
243+ auto UserSpriteIdentifiers () const -> std::vector<uint32_t>;
244+
195245private:
196246 void Initialize ();
197247
@@ -235,6 +285,7 @@ class PROJECTM_EXPORT ProjectM
235285 std::unique_ptr<Preset> m_transitioningPreset; // !< Destination preset when smooth preset switching.
236286 std::unique_ptr<Renderer::PresetTransition> m_transition; // !< Transition effect used for blending.
237287 std::unique_ptr<TimeKeeper> m_timeKeeper; // !< Keeps the different timers used to render and switch presets.
288+ std::unique_ptr<UserSprites::SpriteManager> m_spriteManager; // !< Manages all types of user sprites.
238289};
239290
240291} // namespace libprojectM
0 commit comments