public static void CallFunction(GameObject p_owner, System.Delegate p_functionPointer, List <object> p_params, float p_time, bool p_canCreateNewOne = true) { if (p_owner != null) { GlobalScheduler v_instance = GlobalScheduler.GetInstance(p_canCreateNewOne); if (v_instance != null && Application.isPlaying) { FunctionCallerScheduler v_scheduler = v_instance.RegisterScheduler <FunctionCallerScheduler>(p_owner); if (v_scheduler != null) { v_scheduler.DestroyOptionWhenStop = WhenStopDestroyEnum.DestroyScript; v_scheduler.FunctionToCall = p_functionPointer; v_scheduler.Parameters = p_params; v_scheduler.MaxTime = p_time; v_scheduler.Owner = p_owner; v_scheduler.StartTimer(); } } else { FunctionAndParameters v_newStruct = new FunctionAndParameters(); v_newStruct.DelegatePointer = p_functionPointer; v_newStruct.Params = p_params; v_newStruct.Target = p_owner; RegisterInCallerOverTime(v_newStruct, p_time); } } }
public static void CallSaveToBase() { if (GlobalScheduler.InstanceExists() && Application.isPlaying) { GlobalScheduler.CallFunction(GlobalScheduler.Instance.gameObject, new Delegates.FunctionPointer(SaveToBase), 0.2f, false); } else { SaveToBase(); } }
protected virtual void OnPanelStateChanged(PanelStateEnum p_panelState) { if (p_panelState == PanelStateEnum.Opening || p_panelState == PanelStateEnum.Opened || p_panelState == PanelStateEnum.Closing) { CheckFocus(p_panelState); } else { List <object> v_parameters = new List <object>(); v_parameters.Add(p_panelState); GlobalScheduler.CallFunction(this.gameObject, new Delegates.FunctionPointer <PanelStateEnum>(CheckFocus), v_parameters, 0.1f, true); } }
protected virtual void InitialRecalcCorrector() { //Prevent Bugs when other objects mass change after this late update cycle //When not paused if (GlobalScheduler.InstanceExists()) { GlobalScheduler.CallFunction(this.gameObject, new Delegates.FunctionPointer(RecalcSelfMass), 0.7f, false); GlobalScheduler.CallFunction(this.gameObject, new Delegates.FunctionPointer(RecalcOthersMass), 0.7f, false); GlobalScheduler.CallFunction(this.gameObject, new Delegates.FunctionPointer(RecalcRopesMass), 0.7f, false); } //and after Pause Invoke("RecalcSelfMass", 0.05f); Invoke("RecalcOthersMass", 0.05f); }
public static GlobalScheduler GetInstance(bool p_canCreateANewOne = false) { GlobalScheduler v_instance = null; if (p_canCreateANewOne) { v_instance = Instance; } else { if (m_instance == null) { m_instance = GameObject.FindObjectOfType(typeof(GlobalScheduler)) as GlobalScheduler; } v_instance = m_instance; } return(v_instance); }
public void ForceSetPanelStateValue(PanelStateEnum p_value, bool p_updateEffect, bool p_underDisableOrEnable = false) { if (Scheduler == null || !EnableScheduler) { if (p_value == PanelStateEnum.Opening) { p_value = PanelStateEnum.Opened; } if (p_value == PanelStateEnum.Closing) { p_value = PanelStateEnum.Closed; } } bool p_changed = CheckIfStateWillChange(p_value); m_panelState = p_value; _panelState = m_panelState; if (p_changed) { if (CloseSpecialAction != CloseSpecialActionEnum.Deactivate || m_panelState != PanelStateEnum.Closed) { if (!p_underDisableOrEnable) { SetActiveAndEnable(true, true); } if (Application.isPlaying) { gameObject.SendMessage("OnPanelStateChanged", m_panelState, SendMessageOptions.DontRequireReceiver); } } } if (Application.isPlaying && (CloseSpecialAction != CloseSpecialActionEnum.Deactivate || m_panelState != PanelStateEnum.Closed)) { gameObject.SendMessage("CallEventsInternal", m_panelState, SendMessageOptions.DontRequireReceiver); } else { CallEventsInternal(m_panelState); } if (p_updateEffect) { UpdateEffect(); } //Used to Prevent Bugs while activating if (p_underDisableOrEnable) { if (Application.isPlaying && (CloseSpecialAction != CloseSpecialActionEnum.Deactivate || m_panelState != PanelStateEnum.Closed)) { gameObject.SendMessage("CallControlSpecialAction", SendMessageOptions.DontRequireReceiver); gameObject.SendMessage("UpdateObjectsToShowOrHideByState", SendMessageOptions.DontRequireReceiver); } else { CallControlSpecialAction(); UpdateObjectsToShowOrHideByState(); } } else { CallControlSpecialAction(); UpdateObjectsToShowOrHideByState(); if (!gameObject.activeSelf) { if (Application.isPlaying) { GlobalScheduler.CallFunction(this.gameObject, new Delegates.FunctionPointer(CheckNeedActivate), 0.01f, true); } } } if (!Application.isPlaying) { ControlSpecialAction(); CheckNeedActivate(); } }