// Returns unique identifier incase one wasn't provided
        public int AddInteractable(IInteractable a_interactable, InteractionEventType a_eventType = null,
                                   InteractableTypeReference a_identifier = null)
        {
            int finalIdentifier;

            if (a_identifier == null)
            {
                finalIdentifier = finalIdentifier = GenerateUniqueIdentifier();
            }
            else
            {
                finalIdentifier = a_identifier.GUID;
            }

    #if DEBUG
            if (m_interactables.ContainsKey(finalIdentifier))
            {
                throw new System.InvalidOperationException("identifier already registered: " + finalIdentifier);
            }
    #endif
            m_interactables.Add(finalIdentifier, a_interactable);
            m_registeredIdentifiers.Add(finalIdentifier);

            // add eventType filter
            if (a_eventType != null)
            {
                m_interactablesEventTypeFilter.Add(finalIdentifier, a_eventType);
            }
            return(finalIdentifier);
        }
        // Returns unique identifier incase one wasn't provided
        public int AddIntercepter(IInteractionIntercepter a_intercepter, InteractableTypeReference a_identifier = null)
        {
            int finalIdentifier;

            if (a_identifier == null)
            {
                finalIdentifier = finalIdentifier = GenerateUniqueIdentifier();
            }
            else
            {
                finalIdentifier = a_identifier.GUID;
            }

#if DEBUG
            if (m_interactables.ContainsKey(finalIdentifier))
            {
                throw new System.InvalidOperationException("identifier already registered: " + finalIdentifier);
            }
#endif

            m_interceptors.Add(finalIdentifier, a_intercepter);
            m_registeredIdentifiers.Add(finalIdentifier);
            return(finalIdentifier);
        }