/// <summary> /// Attempts to snap a given <see cref="GameObject"/> to the snap zone. /// </summary> /// <param name="objectToSnap">The object to attempt to snap.</param> public virtual void Snap(GameObject objectToSnap) { if (!AllValidRules.Accepts(objectToSnap)) { return; } InteractableFacade snappableInteractable = objectToSnap.TryGetComponent <InteractableFacade>(true, true); if (snappableInteractable == null || SnappedInteractable != null) { return; } foreach (GameObject collidingWith in snappableInteractable.Configuration.ActiveCollisions.SubscribableElements) { SnapZoneActivator activatingZone = collidingWith.GetComponent <SnapZoneActivator>(); if (activatingZone == null) { continue; } activatingZone.Facade.Unsnap(); break; } if (objectToSnap.transform.position.ApproxEquals(DestinationLocation.transform.position)) { objectToSnap.transform.position += Vector3.forward * InitialOffset; } SnapDroppedInteractableProcess.Receive(objectToSnap); }
/// <summary> /// Attempts to snap a given <see cref="GameObject"/> to the snap zone. /// </summary> /// <param name="objectToSnap">The object to attempt to snap.</param> public virtual void Snap(GameObject objectToSnap) { if (SnappedInteractable != null) { return; } SnapDroppedInteractableProcess.Receive(objectToSnap); }