Esempio n. 1
0
    void LateUpdate()
    {
        if(!isSet && snappingOn && SnapHits.Count!=0)
        {
            float bestAngle = 360;
            Quaternion snapRotate = transform.rotation;
            SnapCollision bestHit = new SnapCollision(null, null, -1);
            foreach(SnapCollision snapHit in SnapHits)
            {
                if(snapHit.Priority >= bestHit.Priority)
                {
                    if(snapHit.Priority == 0)//Ground
                    {
                        snapRotate = transform.rotation; //Hit the ground, don't snap any rotation
                        bestHit = snapHit;
                    }
                    else
                    {
                        float angle = Quaternion.Angle(transform.rotation, snapHit.SnapCorner.transform.parent.transform.rotation);
                        if(angle < bestAngle) //if this Structure piece has a more similar angle to ours than what we've seen
                        {
                            bestAngle = angle;
                            if(angle < 27) //if the angle is less than 20, we will snap to it
                            {
                                snapRotate = snapHit.SnapCorner.transform.rotation;
                            }
                            else
                            {
                                snapRotate = transform.rotation;
                            }

                            bestHit = snapHit;
                        }
                    }
                }
            }

            transform.rotation = snapRotate;
        //			Debug.Log(bestHit.Corner.transform.position.ToString() +" snap to " + bestHit.SnapCorner.transform.position.ToString() +
        //							" movement= " + (bestHit.SnapCorner.transform.position-bestHit.Corner.transform.position).ToString());
            if(bestHit.Priority == 0)
            {
                transform.Translate(new Vector3(0f,-.08f,0f),  Space.World);
            }
            else
            {
                transform.Translate(bestHit.SnapCorner.transform.position-bestHit.Corner.transform.position,  Space.World);
            }
            isSet = true;
        }
    }
    //SNAP PREVIEWS
    void LateUpdate()
    {
        Renderer newSnapRenderer= null;
        if(snappingOn && SnapHits.Count!=0 && !showingSnapRenderer)
        {
            float bestAngle = 360;
            Quaternion snapRotate = transform.rotation;
            SnapCollision bestHit = new SnapCollision(null, null, -1);
            foreach(SnapCollision snapHit in SnapHits)
            {
                if(snapHit.Priority >= bestHit.Priority && snapHit.SnapCorner != null)
                {
                    if(snapHit.Priority == 0)//Ground
                    {
                        snapRotate = transform.rotation; //Hit the ground, don't snap any rotation
                        bestHit = snapHit;
                    }
                    else
                    {
                        float angle = Quaternion.Angle(transform.rotation, snapHit.SnapCorner.transform.parent.transform.rotation);
                        if(angle < bestAngle) //if this Structure piece has a more similar angle to ours than what we've seen
                        {
                            bestAngle = angle;
                            if(angle < 25) //if the angle is less than 20, we will snap to it
                            {
                                snapRotate = snapHit.SnapCorner.transform.rotation;
                            }
                            else
                            {
                                snapRotate = transform.rotation;
                            }

                            bestHit = snapHit;
                        }
                    }
                }
            }

            if(bestHit.Priority ==1)
            {
                newSnapRenderer = (bestHit.SnapCorner.GetComponent("MeshRenderer") as Renderer);;
                if(snapRenderer != null && snapRenderer != newSnapRenderer)
                {
                    //Debug.Log("DISABLED NEW HIT");
                    snapRenderer.enabled = false;
                }
                snapRenderer = newSnapRenderer;
                showingSnapRenderer=true;
                //Debug.Log("ENABLED");
                snapRenderer.enabled = true;
                StartCoroutine(COSnapRenderer());
            }
        }

        if(snapRenderer != null && snapRenderer!= newSnapRenderer && !showingSnapRenderer && snapRenderer.enabled)
        {
            //Debug.Log("DISABLED RECUR");
            snapRenderer.enabled = false;
        }
    }