Example #1
0
        public void ExtractInactiveComponent()
        {
            UnityEventListenerMock extractedMock = new UnityEventListenerMock();

            subject.Extracted.AddListener(extractedMock.Listen);

            GameObject forwardSource = new GameObject();

            CollisionNotifier.EventData notifier = new CollisionNotifier.EventData();
            notifier.ForwardSource = forwardSource.GetComponent <Component>();

            Assert.IsNull(subject.Result);
            Assert.IsFalse(extractedMock.Received);

            subject.enabled = false;
            subject.Extract(notifier);

            Assert.IsNull(subject.Result);
            Assert.IsFalse(extractedMock.Received);

            Object.DestroyImmediate(forwardSource);
        }
        public void InvalidRemove()
        {
            UnityEventListenerMock firstStartedMock    = new UnityEventListenerMock();
            UnityEventListenerMock countChangedMock    = new UnityEventListenerMock();
            UnityEventListenerMock contentsChangedMock = new UnityEventListenerMock();
            UnityEventListenerMock allStoppedMock      = new UnityEventListenerMock();

            subject.FirstStarted.AddListener(firstStartedMock.Listen);
            subject.CountChanged.AddListener(countChangedMock.Listen);
            subject.ContentsChanged.AddListener(contentsChangedMock.Listen);
            subject.AllStopped.AddListener(allStoppedMock.Listen);

            GameObject oneContainer;

            CollisionNotifier.EventData oneData = CollisionNotifierHelper.GetEventData(out oneContainer);

            Assert.IsFalse(firstStartedMock.Received);
            Assert.IsFalse(countChangedMock.Received);
            Assert.IsFalse(contentsChangedMock.Received);
            Assert.IsFalse(allStoppedMock.Received);

            firstStartedMock.Reset();
            countChangedMock.Reset();
            contentsChangedMock.Reset();
            allStoppedMock.Reset();

            Assert.AreEqual(0, subject.Elements.Count);

            subject.Remove(oneData);

            Assert.AreEqual(0, subject.Elements.Count);

            Assert.IsFalse(firstStartedMock.Received);
            Assert.IsFalse(countChangedMock.Received);
            Assert.IsFalse(contentsChangedMock.Received);
            Assert.IsFalse(allStoppedMock.Received);

            Object.DestroyImmediate(oneContainer);
        }
        public void Reverse()
        {
            UnityEventListenerMock reversedMock = new UnityEventListenerMock();

            subject.Reversed.AddListener(reversedMock.Listen);

            List <CollisionNotifier.EventData> collisionList = new List <CollisionNotifier.EventData>();
            GameObject oneContainer;

            CollisionNotifier.EventData oneData = CollisionNotifierHelper.GetEventData(out oneContainer);
            oneContainer.name = "one";
            collisionList.Add(oneData);

            GameObject twoContainer;

            CollisionNotifier.EventData twoData = CollisionNotifierHelper.GetEventData(out twoContainer);
            twoContainer.name = "two";
            collisionList.Add(twoData);

            GameObject threeContainer;

            CollisionNotifier.EventData threeData = CollisionNotifierHelper.GetEventData(out threeContainer);
            threeContainer.name = "three";
            collisionList.Add(threeData);

            ActiveCollisionsContainer.EventData eventData = new ActiveCollisionsContainer.EventData().Set(collisionList);

            Assert.AreEqual("one,two,three", ActiveCollisionsHelper.GetNamesOfActiveCollisions(eventData));
            Assert.IsFalse(reversedMock.Received);

            ActiveCollisionsContainer.EventData reversedList = subject.Reverse(eventData);

            Assert.IsTrue(reversedMock.Received);
            Assert.AreEqual("three,two,one", ActiveCollisionsHelper.GetNamesOfActiveCollisions(reversedList));

            Object.DestroyImmediate(oneContainer);
            Object.DestroyImmediate(twoContainer);
            Object.DestroyImmediate(threeContainer);
        }
        public void Extract()
        {
            UnityEventListenerMock extractedMock = new UnityEventListenerMock();

            subject.Extracted.AddListener(extractedMock.Listen);

            Collider collider = new GameObject().AddComponent <BoxCollider>();

            CollisionNotifier.EventData eventData = new CollisionNotifier.EventData
            {
                ColliderData = collider
            };

            Assert.IsNull(subject.Result);
            Assert.IsFalse(extractedMock.Received);

            subject.Extract(eventData);

            Assert.AreEqual(collider.gameObject, subject.Result);
            Assert.IsTrue(extractedMock.Received);

            Object.DestroyImmediate(collider.gameObject);
        }
        public void Receive()
        {
            GameObject forwardSource   = new GameObject();
            GameObject collisionSource = new GameObject();
            Collider   collider        = collisionSource.AddComponent <BoxCollider>();

            UnityEventListenerMock emittedMock = new UnityEventListenerMock();

            subject.Emitted.AddListener(emittedMock.Listen);

            CollisionNotifier.EventData digest = new CollisionNotifier.EventData();
            digest.Set(forwardSource.GetComponent <Component>(), true, null, collider);

            Assert.IsNull(subject.Payload);
            Assert.IsFalse(emittedMock.Received);

            subject.Receive(digest);

            Assert.AreEqual(digest, subject.Payload);
            Assert.IsTrue(emittedMock.Received);

            Object.DestroyImmediate(forwardSource);
            Object.DestroyImmediate(collisionSource);
        }
 public EventData Set(ActiveCollisionPublisher.PayloadData publisher, CollisionNotifier.EventData currentCollision)
 {
     Publisher        = publisher;
     CurrentCollision = currentCollision;
     return(this);
 }
 /// <summary>
 /// Extracts the <see cref="GameObject"/> of the <see cref="Collider"/> from the given <see cref="CollisionNotifier.EventData"/>.
 /// </summary>
 /// <param name="notifier">The notifier event data to extract from.</param>
 public virtual void DoExtract(CollisionNotifier.EventData notifier)
 {
     Extract(notifier);
 }
        /// <summary>
        /// Determines if the current collision is valid.
        /// </summary>
        /// <param name="collisionData">The collision to check.</param>
        /// <returns>The validity result of the collision.</returns>
        protected virtual bool IsValidCollision(CollisionNotifier.EventData collisionData)
        {
            Transform containingTransform = collisionData.ColliderData.GetContainingTransform();

            return(containingTransform != null && CollisionValidity.Accepts(containingTransform.gameObject));
        }
 /// <summary>
 /// Determines an object is being ungrabbed.
 /// </summary>
 /// <param name="data">The collision data.</param>
 public virtual void Ungrab(CollisionNotifier.EventData data)
 {
     facade?.Ungrabbed?.Invoke(data);
 }
Example #10
0
        public void LengthIsZero()
        {
            UnityEventListenerMock slicedMock = new UnityEventListenerMock();

            subject.Sliced.AddListener(slicedMock.Listen);
            UnityEventListenerMock remainedMock = new UnityEventListenerMock();

            subject.Remained.AddListener(remainedMock.Listen);

            List <CollisionNotifier.EventData> collisionList = new List <CollisionNotifier.EventData>();
            GameObject oneContainer;

            CollisionNotifier.EventData oneData = CollisionNotifierHelper.GetEventData(out oneContainer);
            oneContainer.name = "one";
            collisionList.Add(oneData);

            GameObject twoContainer;

            CollisionNotifier.EventData twoData = CollisionNotifierHelper.GetEventData(out twoContainer);
            twoContainer.name = "two";
            collisionList.Add(twoData);

            GameObject threeContainer;

            CollisionNotifier.EventData threeData = CollisionNotifierHelper.GetEventData(out threeContainer);
            threeContainer.name = "three";
            collisionList.Add(threeData);

            GameObject fourContainer;

            CollisionNotifier.EventData fourData = CollisionNotifierHelper.GetEventData(out fourContainer);
            fourContainer.name = "four";
            collisionList.Add(fourData);

            GameObject fiveContainer;

            CollisionNotifier.EventData fiveData = CollisionNotifierHelper.GetEventData(out fiveContainer);
            fiveContainer.name = "five";
            collisionList.Add(fiveData);

            GameObject sixContainer;

            CollisionNotifier.EventData sixData = CollisionNotifierHelper.GetEventData(out sixContainer);
            sixContainer.name = "six";
            collisionList.Add(sixData);

            ActiveCollisionsContainer.EventData eventData = new ActiveCollisionsContainer.EventData().Set(collisionList);

            subject.StartIndex = 0;
            subject.Length     = 0;

            ActiveCollisionsContainer.EventData remainedList;
            ActiveCollisionsContainer.EventData slicedList = subject.Slice(eventData, out remainedList);

            Assert.IsTrue(slicedMock.Received);
            Assert.IsTrue(remainedMock.Received);

            Assert.AreEqual("", ActiveCollisionsHelper.GetNamesOfActiveCollisions(slicedList));
            Assert.AreEqual("one,two,three,four,five,six", ActiveCollisionsHelper.GetNamesOfActiveCollisions(remainedList));

            Object.DestroyImmediate(oneContainer);
            Object.DestroyImmediate(twoContainer);
            Object.DestroyImmediate(threeContainer);
            Object.DestroyImmediate(fourContainer);
            Object.DestroyImmediate(fiveContainer);
            Object.DestroyImmediate(sixContainer);
        }
Example #11
0
 /// <summary>
 /// Notifies that the Interactor is no longer touching the object.
 /// </summary>
 /// <param name="data">The collision data.</param>
 public virtual void NotifyUntouch(CollisionNotifier.EventData data)
 {
     facade?.Untouched?.Invoke(data);
 }
        public void SetOnlyOnce()
        {
            UnityEventListenerMock createdMock = new UnityEventListenerMock();
            UnityEventListenerMock clearedMock = new UnityEventListenerMock();

            subject.PointSet.AddListener(createdMock.Listen);
            subject.PointUnset.AddListener(clearedMock.Listen);

            GameObject publisherObject = new GameObject();

            ActiveCollisionPublisher.PayloadData publisher = new ActiveCollisionPublisher.PayloadData();
            publisher.SourceContainer          = publisherObject;
            publisherObject.transform.position = Vector3.one;

            CollisionNotifier.EventData collisionNotifierEventData = CollisionNotifierHelper.GetEventData(out GameObject collisionNotifierContainer);
            collisionNotifierContainer.transform.position = Vector3.one * 2f;
            collisionNotifierContainer.transform.rotation = Quaternion.Euler(Vector3.forward * 90f);

            ActiveCollisionConsumer.EventData eventData = new ActiveCollisionConsumer.EventData();
            eventData.Set(publisher, collisionNotifierEventData);

            GameObject publisherObjectAlt = new GameObject();

            ActiveCollisionPublisher.PayloadData publisherAlt = new ActiveCollisionPublisher.PayloadData();
            publisherAlt.SourceContainer          = publisherObjectAlt;
            publisherObjectAlt.transform.position = Vector3.one;

            CollisionNotifier.EventData collisionNotifierEventDataAlt = CollisionNotifierHelper.GetEventData(out GameObject collisionNotifierContainerAlt);
            collisionNotifierContainerAlt.transform.position = Vector3.one * 4f;
            collisionNotifierContainerAlt.transform.rotation = Quaternion.Euler(Vector3.up * 90f);

            ActiveCollisionConsumer.EventData eventDataAlt = new ActiveCollisionConsumer.EventData();
            eventDataAlt.Set(publisherAlt, collisionNotifierEventDataAlt);

            Assert.IsFalse(createdMock.Received);
            Assert.IsFalse(clearedMock.Received);
            Assert.IsNull(subject.Container);

            subject.Set(eventData);

            Assert.IsTrue(createdMock.Received);
            Assert.IsFalse(clearedMock.Received);
            Assert.IsNotNull(subject.Container);

            Assert.AreEqual(publisherObject.transform.position.ToString(), subject.Container.transform.position.ToString());
            Assert.AreEqual(publisherObject.transform.rotation.ToString(), subject.Container.transform.rotation.ToString());
            Assert.AreEqual(Vector3.one, subject.Container.transform.localScale);

            createdMock.Reset();
            clearedMock.Reset();

            subject.Set(eventDataAlt);

            Assert.IsFalse(createdMock.Received);
            Assert.IsFalse(clearedMock.Received);
            Assert.IsNotNull(subject.Container);

            Assert.AreEqual(publisherObject.transform.position.ToString(), subject.Container.transform.position.ToString());
            Assert.AreEqual(publisherObject.transform.rotation.ToString(), subject.Container.transform.rotation.ToString());
            Assert.AreEqual(Vector3.one, subject.Container.transform.localScale);

            Object.DestroyImmediate(publisherObject);
            Object.DestroyImmediate(publisherObjectAlt);
            Object.DestroyImmediate(collisionNotifierContainer);
            Object.DestroyImmediate(collisionNotifierContainerAlt);
        }
 /// <summary>
 /// Handles any change of collision contents.
 /// </summary>
 /// <param name="data">The changed collision data.</param>
 protected virtual void ProcessPotentialInteractorContentChange(CollisionNotifier.EventData data)
 {
     PotentialInteractors.ProcessContentsChanged();
 }
 /// <summary>
 /// Extracts the forward source container from the given notifier event data.
 /// </summary>
 /// <param name="eventData">The notifier event data to extract from.</param>
 public virtual void DoExtract(CollisionNotifier.EventData eventData)
 {
     Extract(eventData);
 }
Example #15
0
 public EventData Set(ActiveCollisionPublisher publisher, CollisionNotifier.EventData currentCollision)
 {
     this.publisher        = publisher;
     this.currentCollision = currentCollision;
     return(this);
 }
 /// <summary>
 /// Clones the given event data.
 /// </summary>
 /// <param name="input">The data to clone.</param>
 /// <returns>The cloned data.</returns>
 protected virtual CollisionNotifier.EventData CloneEventData(CollisionNotifier.EventData input)
 {
     return(new CollisionNotifier.EventData().Set(input));
 }
 /// <summary>
 /// Determines if the current collision is valid.
 /// </summary>
 /// <param name="collisionData">The collision to check.</param>
 /// <returns>The validity result of the collision.</returns>
 protected virtual bool IsValidCollision(CollisionNotifier.EventData collisionData)
 {
     return(collisionData.collider != null && collisionValidity.Accepts(collisionData.collider.gameObject));
 }