@@ -161,8 +161,35 @@ public class EventTimelineQueue : EventTimelinePoolsManager
161161 /// </remarks>
162162 public T Schedule < T > ( Action < T > configure , float delay = 0 ) where T : TimelineEvent < T > , new ( )
163163 {
164- var evt = Schedule < T > ( delay ) ;
164+ #if __EVENTTIMELINE_DEBUG_VERBOSE
165+ AsyncLogger . LogFormat ( "[EventTimelineQueue] Scheduling event of type {0} with delay {1}s" , typeof ( T ) . Name , delay ) ;
166+ #endif
167+
168+ var evt = GetFromPool < T > ( ) ;
169+
165170 configure . Invoke ( evt ) ;
171+
172+ if ( IsMainThread )
173+ {
174+ evt . ScheduledTime = Time . time + delay / timeScale ;
175+ }
176+ else
177+ {
178+ RunOnMainThread ( ( ) => evt . ScheduledTime = Time . time + delay / timeScale ) ;
179+
180+ #if __EVENTTIMELINE_DEBUG
181+ AsyncLogger . LogWarningFormat ( "[EventTimelineQueue] Background event schedule detected. Posting {0} to main thread." , typeof ( T ) ) ;
182+ #endif
183+ }
184+
185+ evt . IsCancelled = false ;
186+
187+ _eventQueue . Enqueue ( evt ) ;
188+
189+ #if __EVENTTIMELINE_DEBUG_VERBOSE
190+ AsyncLogger . LogFormat ( "[EventTimelineQueue] Successfully scheduled event of type {0} for time {1:F3}s" , typeof ( T ) . Name , evt . ScheduledTime ) ;
191+ #endif
192+
166193 return evt ;
167194 }
168195
@@ -214,35 +241,57 @@ public Result<T> Reschedule<T>(T evt, float delay) where T : TimelineEvent
214241 }
215242
216243 /// <summary>
217- /// Clears all scheduled events and event pools.
244+ /// Clears all scheduled events, disposes them properly, and cleans up all event pools.
218245 /// </summary>
219246 /// <remarks>
220- /// Thread-safe operation protected by a lock.
221- /// Trims excess capacity from event pools after clearing.
247+ /// This operation is thread-safe and performs complete cleanup by:
248+ /// <list type="bullet">
249+ /// <item>Removing and disposing all events from the main queue</item>
250+ /// <item>Processing any cancelled events awaiting cleanup</item>
251+ /// <item>Clearing and disposing all pooled events</item>
252+ /// <item>Resetting internal state</item>
253+ /// </list>
222254 /// </remarks>
223255 public void Clear ( )
224256 {
225257#if __EVENTTIMELINE_DEBUG_VERBOSE
226- AsyncLogger . LogFormat ( "[EventTimelineQueue] Clearing all events . Current queue size: {0}" , _eventQueue . Count ) ;
258+ AsyncLogger . LogFormat ( "[EventTimelineQueue] Beginning full queue cleanup . Current queue size: {0}" , _eventQueue . Count ) ;
227259#endif
228260
261+ // Process all events in the main queue
262+ var remainingEvents = _eventQueue . DequeueRange ( _eventQueue . Count ) ;
263+ foreach ( var evt in remainingEvents )
264+ {
265+ evt . Dispose ( ) ;
266+ }
267+
229268 _eventQueue . Clear ( ) ;
230269
231270 lock ( _cancelledEventsLock )
232271 {
233- // Return cancelled events to pool before clearing
272+ // Process any pending cancelled events
234273 foreach ( var evt in _cancelledEvents )
235274 {
236- ReturnToPool ( evt ) ;
275+ evt . Dispose ( ) ;
237276 }
238277
239278 _cancelledEvents . Clear ( ) ;
240279 }
241280
281+ // Clear all event pools and reset counters
242282 ClearEventPools ( ) ;
283+ _framesSinceCleanup = 0 ;
284+
285+ // Clear temporary storage
286+ foreach ( var evt in _futureEvents )
287+ {
288+ evt . Dispose ( ) ;
289+ }
290+
291+ _futureEvents . Clear ( ) ;
243292
244293#if __EVENTTIMELINE_DEBUG_VERBOSE
245- AsyncLogger . Log ( "[EventTimelineQueue] Successfully cleared all events and pools " ) ;
294+ AsyncLogger . Log ( "[EventTimelineQueue] Queue cleanup completed successfully " ) ;
246295#endif
247296 }
248297
0 commit comments