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; } }