public bool CanInteract(InteractionEvent interactionEvent)
        {
            if (RangeCheck && !InteractionExtensions.RangeCheck(interactionEvent))
            {
                return(false);
            }

            var provider = interactionEvent.Source as IGameObjectProvider;

            if (provider == null)
            {
                return(false);
            }

            SubstanceContainer container = provider.GameObject.GetComponent <SubstanceContainer>();

            if (container == null)
            {
                return(false);
            }

            // You cannot dispense to a container that is already full.
            if (container.RemainingVolume < 0.01f)
            {
                return(false);
            }

            return(CanInteractCallback.Invoke(interactionEvent));
        }
        public bool Start(InteractionEvent interactionEvent, InteractionReference reference)
        {
            if (interactionEvent.Source is IGameObjectProvider provider)
            {
                SubstanceContainer container = provider.GameObject.GetComponent <SubstanceContainer>();
                if (container != null)
                {
                    container.AddSubstance(Substance.Substance, Substance.Moles);
                    container.MarkDirty();
                }
            }

            return(false);
        }
        public bool Start(InteractionEvent interactionEvent, InteractionReference reference)
        {
            if (interactionEvent.Source is IGameObjectProvider provider)
            {
                SubstanceContainer container = provider.GameObject.GetComponent <SubstanceContainer>();
                if (container != null)
                {
                    var targetContainer = interactionEvent.Target.GetComponent <SubstanceContainer>();
                    container.TransferVolume(targetContainer, 25);
                    container.MarkDirty();
                    targetContainer.MarkDirty();
                }
            }

            return(false);
        }