private void Remove(ObservableEventTypes eventType, ObservableTransform o)
 {
     if (subscriptions.ContainsKey(eventType))
     {
         foreach (var action in subscriptions[eventType])
         {
             o.RemoveAction(eventType, action);
         }
     }
 }
        /// <summary>
        /// Remove observable and unsubscribe from all its events.
        /// </summary>
        /// <param name="o"></param>
        public bool RemoveObservable(ObservableTransform o)
        {
            if (observables.ContainsKey(o.GetHash()))
            {
                foreach (ObservableEventTypes type in observableEventTypesArray)
                {
                    Remove(type, o);
                }

                o.RemoveAction(ObservableEventTypes.OnDestroyed, ObservableDestroyed);
                return(observables.Remove(o.GetHash()));
            }
            return(false);
        }
        /// <summary>
        /// Add an observable and subscribe all pre existing actions to the relevant events.
        /// </summary>
        /// <param name="o"></param>
        public bool AddObservable(ObservableTransform o)
        {
            if (o != null && !observables.ContainsKey(o.GetHash()))
            {
                foreach (ObservableEventTypes type in observableEventTypesArray)
                {
                    Add(type, o);
                }

                o.AddAction(ObservableEventTypes.OnDestroyed, ObservableDestroyed);
                observables.Add(o.GetHash(), o);
                return(true);
            }
            return(false);
        }