Bunny83

ObjectTracker.cs

Sep 14th, 2017
209
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3.  
  4. public class ObjectTracker
  5. {
  6.     private class TrackedObject
  7.     {
  8.         private object m_Obj;
  9.         private bool m_Initialized = false;
  10.         private List<System.Action<object>> m_References = new List<System.Action<object>>();
  11.         public void AddReference(System.Action<object> aRef)
  12.         {
  13.             if (!m_Initialized)
  14.                 m_References.Add(aRef);
  15.             else
  16.                 aRef(m_Obj);
  17.         }
  18.         public void Initialize(object aObj)
  19.         {
  20.             if (!m_Initialized)
  21.             {
  22.                 m_Initialized = true;
  23.                 m_Obj = aObj;
  24.                 foreach(var r in m_References)
  25.                 {
  26.                     r(m_Obj);
  27.                 }
  28.                 m_References = null;
  29.             }
  30.         }
  31.     }
  32.  
  33.     // singleton
  34.     private static ObjectTracker m_Inst;
  35.     public static ObjectTracker Instance
  36.     {
  37.         get
  38.         {
  39.             if (m_Inst == null)
  40.                 m_Inst = new ObjectTracker();
  41.             return m_Inst;
  42.         }
  43.     }
  44.  
  45.     private Dictionary<string, TrackedObject> m_Objs = new Dictionary<string, TrackedObject>();
  46.     private TrackedObject GetTrackedObject(string aID)
  47.     {
  48.         TrackedObject to;
  49.         if (!m_Objs.TryGetValue(aID, out to))
  50.         {
  51.             to = new TrackedObject();
  52.             m_Objs.Add(aID, to);
  53.         }
  54.         return to;
  55.     }
  56.  
  57.     public void AddObject(string aID, object aObj)
  58.     {
  59.         GetTrackedObject(aID).Initialize(aObj);
  60.     }
  61.     public void GetObject(string aID, System.Action<object> aRef)
  62.     {
  63.         GetTrackedObject(aID).AddReference(aRef);
  64.     }
  65. }
RAW Paste Data