@@ -379,12 +379,17 @@ public void UsingFunc<T1, T2, T3, T4, TResult>()
379379#endif
380380 }
381381
382+ public Action TickHandler ;
383+
382384 public void Tick ( )
383385 {
384386#if THREAD_SAFE
385387 lock ( this ) {
386388#endif
387- // TODO
389+ cleanupPendingKillScriptObjects ( ) ;
390+ PuertsDLL . InspectorTick ( isolate ) ;
391+ PuertsDLL . LogicTick ( isolate ) ;
392+ if ( TickHandler != null ) TickHandler ( ) ;
388393#if THREAD_SAFE
389394 }
390395#endif
@@ -447,11 +452,12 @@ public static void LogErrorCallback(string msg)
447452
448453 List < IntPtr > pendingKillScriptObjectRefs = new List < IntPtr > ( ) ;
449454
450- internal void addPendingKillScriptObjects ( IntPtr envRef )
455+ internal void addPendingKillScriptObjects ( IntPtr objRef )
451456 {
452457 lock ( pendingKillScriptObjectRefs )
453458 {
454- pendingKillScriptObjectRefs . Add ( envRef ) ;
459+ pendingKillScriptObjectRefs . Add ( objRef ) ;
460+ //UnityEngine.Debug.Log($"addPendingKillScriptObjects {objRef}");
455461 }
456462 }
457463
@@ -470,6 +476,26 @@ internal void cleanupPendingKillScriptObjects()
470476 var objRef = pendingKillScriptObjectRefs [ lastIndex ] ;
471477 pendingKillScriptObjectRefs . RemoveAt ( lastIndex ) ;
472478
479+ uint internal_field_count = 0 ;
480+ IntPtr weakHandlePtr = apis . get_ref_internal_fields ( objRef , out internal_field_count ) ;
481+ if ( internal_field_count != 1 )
482+ {
483+ throw new InvalidProgramException ( $ "invalud internal fields count { internal_field_count } !") ;
484+ }
485+
486+ IntPtr weakHandle = Marshal . PtrToStructure < IntPtr > ( weakHandlePtr ) ;
487+
488+ if ( weakHandle != IntPtr . Zero )
489+ {
490+ var handle = GCHandle . FromIntPtr ( weakHandle ) ;
491+ if ( handle . Target == null )
492+ {
493+ var obj = apis . get_value_from_ref ( env , objRef ) ;
494+ apis . set_private ( env , obj , IntPtr . Zero ) ;
495+ //UnityEngine.Debug.Log($"cleanupPendingKillScriptObjects {objRef}");
496+ apis . release_value_ref ( objRef ) ;
497+ }
498+ }
473499 }
474500 }
475501 finally
0 commit comments