27
27
#include < Audio/PCM.hpp>
28
28
29
29
#include < memory>
30
+ #include < set>
30
31
#include < string>
31
32
#include < vector>
32
33
@@ -41,6 +42,10 @@ class ShaderCache;
41
42
class TransitionShaderManager ;
42
43
} // namespace Renderer
43
44
45
+ namespace UserSprites {
46
+ class SpriteManager ;
47
+ } // namespace UserSprites
48
+
44
49
class Preset ;
45
50
class PresetFactoryManager ;
46
51
class TimeKeeper ;
@@ -192,6 +197,51 @@ class PROJECTM_EXPORT ProjectM
192
197
193
198
auto WindowHeight () -> int;
194
199
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
+
195
245
private:
196
246
void Initialize ();
197
247
@@ -235,6 +285,7 @@ class PROJECTM_EXPORT ProjectM
235
285
std::unique_ptr<Preset> m_transitioningPreset; // !< Destination preset when smooth preset switching.
236
286
std::unique_ptr<Renderer::PresetTransition> m_transition; // !< Transition effect used for blending.
237
287
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.
238
289
};
239
290
240
291
} // namespace libprojectM
0 commit comments