Exemple #1
0
 private void OnMouseDown()
 {
     SFXEventHandler.SendClickPart();
     startPos = transform.position;
     if (snappedTo == null)
     {
         return;
     }
     startSnappedTo    = snappedTo;
     prevsnappingPoint = snappedTo.GetComponent <SnappingPoint>();
     prevsnappingPoint.UnSnap();
     snappedTo = null;
 }
Exemple #2
0
    private void OnMouseUp()
    {
        audioSource.Stop();

        SnappingPoint[] snaps = GameObject.FindObjectsOfType <SnappingPoint>();
        var             rslt  = GetDistanceToClosestSnappingPoint(snaps);

        if (rslt.distance < snappingDistance)
        {
            Debug.DrawLine(transform.position, rslt.target.transform.position, Color.green, 0, false);

            transform.position = rslt.target.transform.position;

            prevsnappingPoint = null;
            if (snappedTo != null)
            {
                prevsnappingPoint = snappedTo.GetComponent <SnappingPoint>();
            }


            snappedTo = rslt.target.gameObject;

            SnappingPoint snappingPoint = snappedTo.GetComponent <SnappingPoint>();

            if (snappingPoint != null)
            {
                SFXEventHandler.SendAttachPart(snappingPoint.gameObject);
                if (prevsnappingPoint != null)
                {
                    prevsnappingPoint.UnSnap();
                }
                snappingPoint.UnSnap();
                snappingPoint.AssignGameObject(gameObject);

                var bodyPartComp = GetComponent <BodyPartVisual>();
                if (bodyPartComp != null)
                {
                    bodyPartComp.ResetRotationsAndTranslations(snappingPoint.IsBody, snappedTo.transform);
                }
            }

            //this.transform.SetParent(snappedTo.transform);
        }
        else
        {
            transform.position = startPos;
            snappedTo          = startSnappedTo;
            SFXEventHandler.SendAttachPart(null);
        }
    }
Exemple #3
0
    private (SnappingPoint target, float distance) GetDistanceToClosestSnappingPoint(SnappingPoint[] enemies)
    {
        //BodyPartVisual partComponent = GetComponent<BodyPartVisual>();
        SnappingPoint bestTarget         = null;
        float         closestDistanceSqr = Mathf.Infinity;
        Vector3       currentPosition    = transform.position;

        foreach (SnappingPoint potentialTarget in enemies)
        {
            Vector3 directionToTarget = potentialTarget.transform.position - currentPosition;
            float   dSqrToTarget      = directionToTarget.sqrMagnitude;
            if (dSqrToTarget < closestDistanceSqr && potentialTarget.CanSnap(gameObject))
            {
                closestDistanceSqr = dSqrToTarget;
                bestTarget         = potentialTarget;
            }
        }

        return(bestTarget, closestDistanceSqr);
    }