コード例 #1
0
 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);
         }
     }
 }
コード例 #2
0
 public static void CallSaveToBase()
 {
     if (GlobalScheduler.InstanceExists() && Application.isPlaying)
     {
         GlobalScheduler.CallFunction(GlobalScheduler.Instance.gameObject, new Delegates.FunctionPointer(SaveToBase), 0.2f, false);
     }
     else
     {
         SaveToBase();
     }
 }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
 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);
 }
コード例 #5
0
    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);
    }
コード例 #6
0
    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();
        }
    }