コード例 #1
0
    public bool RemoveCoroutine(int nMonoKey, Updater Routine)
    {
        IEnumerator   Key = Routine.m_Iterator;
        CoroutineList RoutineList;

        ///해당 객체가 없다면
        if (!m_ObjectList.ContainsKey(nMonoKey))
        {
            return(false);
        }

        RoutineList = m_ObjectList[nMonoKey];

        if (!RoutineList.m_CoroutineList.ContainsKey(Key))
        {
            //Debugs.Log("[실패] Remove New Coroutine ", m_CoroutineList[Key].GetHashCode());
            return(false);
        }

        //Debugs.Log("[성공] Remove New Coroutine ", m_CoroutineList[Key].GetHashCode());
        Updater Target = Routine;

        ExitRoutine(Target);
        RoutineList.m_CoroutineList.Remove(Key);

#if UNITY_EDITOR
        SimpleObjectInfo Info = g_ObjectList.Find(x => x.m_nMonoKey == nMonoKey);
        Info.m_CoroutineList.Remove(Routine);
        g_nCoroutineCount--;
#endif
        RemoveUpdater(Target);
        if (RoutineList.m_CoroutineList.Count <= 0)
        {
            m_ObjectList.Remove(nMonoKey);
#if UNITY_EDITOR
            g_ObjectList.RemoveAll(x => x.m_nMonoKey == nMonoKey);
            g_nObjectCount--;
#endif
        }
#if UNITY_EDITOR
        // if (g_bPrintLog)
        //Debugs.Log("[코루틴매니저-코루틴제거] 성공! 카운트[", RoutineList.m_CoroutineList.Count, "]", nMonoKey.ToString(), " ", Routine.m_Iterator.GetHashCode());
#endif
        return(true);
    }
コード例 #2
0
    public void AddCoroutine(MonoBehaviour Mono, Updater Routine, float fDelay, bool bFirstUpdate = true)
    {
        //IEnumerator Key = Routine.m_Iterator;
        int           nMonoKey = Mono.GetInstanceID();
        CoroutineList RoutineList;

        ///해당 객체가 없다면
        if (!m_ObjectList.ContainsKey(nMonoKey))
        {
            CoroutineList NewList = new CoroutineList();
            m_ObjectList.Add(nMonoKey, NewList);
#if UNITY_EDITOR
            g_ObjectList.Add(new SimpleObjectInfo(nMonoKey, Mono));
            g_nObjectCount++;
#endif
        }

        RoutineList = m_ObjectList[nMonoKey];

        ///중복 방지
        if (RoutineList.m_CoroutineList.ContainsKey(Routine.m_Iterator))
        {
            //Debugs.Log("[실패] Add New Coroutine ", Routine.GetHashCode());
            return;
        }

        RoutineList.m_CoroutineList.Add(Routine.m_Iterator, Routine);
#if UNITY_EDITOR
        SimpleObjectInfo Info = g_ObjectList.Find(x => x.m_nMonoKey == nMonoKey);
        Info.m_CoroutineList.Add(Routine);
        g_nCoroutineCount++;
        //if (g_bPrintLog)
        //    Debugs.Log("[코루틴매니저-코루틴추가] 성공! 카운트[", RoutineList.m_CoroutineList.Count, "]", nMonoKey.ToString(), " ", Routine.m_Iterator.GetHashCode());
        if (RoutineList.m_CoroutineList.Count >= 5)
        {
            //if (g_bPrintLog)
            //Debugs.LogError("[코루틴매니저-코루틴추가] 이 객체가 활성화 중인 코루틴이 너무 많습니다! 카운트[전체 객체 수", m_ObjectList.Count, "][이 객체의 활성화 코루틴 수", RoutineList.m_CoroutineList.Count, "]");
        }
#endif
        m_LastRoutine = Routine.m_Iterator;
        InitRoutine(Routine, nMonoKey, fDelay, bFirstUpdate);
    }