/// <summary>
        /// Deactivates the association that is currently activated and all other known associations.
        /// </summary>
        /// <param name="associations">The associations to deactivate.</param>
        protected virtual void Deactivate(GameObjectsAssociationObservableList associations)
        {
            if (associations == null)
            {
                return;
            }

            foreach (GameObjectsAssociation association in associations.NonSubscribableElements)
            {
                if (association == null)
                {
                    continue;
                }

                foreach (GameObject associatedObject in association.GameObjects.NonSubscribableElements)
                {
                    associatedObject.SetActive(false);
                }
            }

            if (CurrentAssociation != null)
            {
                foreach (GameObject associatedObject in CurrentAssociation.GameObjects.NonSubscribableElements)
                {
                    associatedObject.SetActive(false);
                }

                CurrentAssociation = null;
            }
        }
        /// <summary>
        /// Activates the <see cref="GameObject"/>s that are part of the association if the association matches the currently expected state.
        /// </summary>
        public virtual void Activate()
        {
            if (Associations == null)
            {
                return;
            }

            GameObjectsAssociation desiredAssociation = null;

            foreach (GameObjectsAssociation association in Associations.NonSubscribableElements)
            {
                if (association == null)
                {
                    continue;
                }

                if (association.ShouldBeActive())
                {
                    desiredAssociation = association;
                    break;
                }
            }

            if (desiredAssociation == null || CurrentAssociation == desiredAssociation)
            {
                return;
            }

            CurrentAssociation = desiredAssociation;

            foreach (GameObjectsAssociation association in Associations.NonSubscribableElements)
            {
                if (association == desiredAssociation)
                {
                    continue;
                }

                foreach (GameObject associatedObject in association.GameObjects.NonSubscribableElements)
                {
                    if (associatedObject != null)
                    {
                        associatedObject.SetActive(false);
                    }
                }
            }

            foreach (GameObject associatedObject in desiredAssociation.GameObjects.NonSubscribableElements)
            {
                if (associatedObject != null)
                {
                    associatedObject.SetActive(true);
                }
            }
        }