private void Snapsnapable(ISnapPoint selected, ISnapPoint target) { Transform selectedSnapPoint = selected.GetTransform(); Transform selectedSnapable = selectedSnapPoint.parent; Transform selectedShapeContainer = selectedSnapable.parent; Transform targetSnapPoint = target.GetTransform(); Transform targetSnapable = targetSnapPoint.parent; Transform targetShapeContainer = targetSnapable.parent; float xOffset = selectedSnapPoint.position.x - selectedSnapable.position.x; float yOffset = selectedSnapPoint.position.y - selectedSnapable.position.y; Vector2 targetPosition = new Vector2(targetSnapPoint.position.x - xOffset, targetSnapPoint.position.y - yOffset); Vector2 startPos = selectedSnapable.position; float xOffsetTotal = startPos.x - targetPosition.x; float yOffsetTotal = startPos.y - targetPosition.y; //Move to target BlockContainer foreach (ISnapable snapable in selectedShapeContainer.GetComponentsInChildren <ISnapable>()) { Transform shape = snapable.Transform; shape.parent = targetShapeContainer; Vector3 position = shape.position; position = new Vector2(position.x - xOffsetTotal, position.y - yOffsetTotal); shape.position = position; } targetShapeContainer.GetComponent <IShapeContainer>().PrepareStart(); //Destroy old Container selectedShapeContainer.GetComponent <IShapeContainer>().Destroy(); _snapForest.Join( selected.GetTransform().parent.GetComponent <Snapable>(), target.GetTransform().parent.GetComponent <Snapable>() ); //Deactivates used Snapables selected.SetSnapped(); target.SetSnapped(); if (_snapSound == null) { PrepareSnapSound( ); } _snapSound.Play(); }
private void TrySnap(ISnapable snapable) { List <ISnapPoint> snapPoints = snapable.GetSnapPoints(); foreach (ISnapPoint snapPoint in snapPoints) { ISnapPoint targetSnapPoint = snapPoint.GetTriggeredSnapable(); if (targetSnapPoint != null && snapPoint.GetTransform().parent.parent != targetSnapPoint.GetTransform().parent.parent) { Snapsnapable(snapPoint, targetSnapPoint); return; } } }