using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System.Threading; 
 | 
using System; 
 | 
  
 | 
public class LogicUpdate 
 | 
{ 
 | 
    public readonly float stepInterval = 0.033333f; 
 | 
  
 | 
    public bool destroyDirty { get; private set; } 
 | 
    float nextUpdateTime = 0f; 
 | 
    Action update; 
 | 
  
 | 
    public LogicUpdate(float stepInterval = 0.033333f) 
 | 
    { 
 | 
        this.stepInterval = Mathf.Clamp(stepInterval, 0.033333f, float.MaxValue); 
 | 
    } 
 | 
  
 | 
    public void Start(Action updateCallBack) 
 | 
    { 
 | 
        this.destroyDirty = false; 
 | 
        this.update = updateCallBack; 
 | 
        LogicEngine.Instance.Register(this); 
 | 
    } 
 | 
  
 | 
    public void Destroy() 
 | 
    { 
 | 
        this.update = null; 
 | 
        if (!this.destroyDirty) 
 | 
        { 
 | 
            this.destroyDirty = true; 
 | 
            OnDestroy(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public virtual void OnDestroy() 
 | 
    { 
 | 
  
 | 
    } 
 | 
  
 | 
    public void Update() 
 | 
    { 
 | 
        if (Time.time >= nextUpdateTime) 
 | 
        { 
 | 
            nextUpdateTime = Time.time + stepInterval; 
 | 
            if (update != null) 
 | 
            { 
 | 
                this.update(); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |