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); }
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); }