GhostTarget GetTarget() { // Debug.Log("getting target:"); GhostTarget newTarget = new GhostTarget(); if (moveObj) { return(new GhostTarget(moveObj.GetComponent <UserEditableObject>(), moveObj.transform.position)); } if (copyObj) { return(new GhostTarget(copyObj.GetComponent <UserEditableObject>(), copyObj.transform.position)); } if (Utils.IntervalElapsed(0.5f) || GetUserInputThisFrame()) { float closest = Mathf.Infinity; // RaycastHit hit = new RaycastHit(); float maxDist = copyObj || moveObj ? 160f : 80f; float radius = copyObj || moveObj ? 10f : 2f; activeObj.Text = ""; activeTarget = null; foreach (RaycastHit hit in Physics.SphereCastAll(new Ray(transform.position, transform.forward), radius, maxDist)) { UserEditableObject ueo = hit.collider.transform.root.GetComponent <UserEditableObject>(); if (ueo && hit.distance < closest) { closest = hit.distance; newTarget.ueo = ueo; newTarget.p = hit.point; activeObj.Text = newTarget.ueo.myName; } } } return(newTarget); }
void LateUpdate() { if (!LevelBuilder.inst.levelBuilderIsShowing) { return; } float fadeSpeed = 3f; Color newc = Color.Lerp(lr.material.color, Color.clear, Time.unscaledDeltaTime * fadeSpeed); lr.material.SetColor("_Color", newc); lineTimer -= Time.unscaledDeltaTime; destroyTimer -= Time.unscaledDeltaTime; if (lineTimer < 0) { lr.SetVertexCount(0); } else { } // if (Input.GetMouseButtonDown(0)){ // JsonLevelSaver.inst.LevelBuilderUndo(); // } activeTarget = GetTarget(); if (activeTarget == null) { return; } UserEditableObject ueo = activeTarget.ueo; if (!ueo) { moveObj = null; copyObj = null; return; } if (Input.GetKey(KeyCode.Backspace) && destroyTimer < 0) { if (LevelBuilder.inst.levelBuilderIsShowing) { if (activeTarget.ueo) { destroyTimer = 0.5f; LevelBuilder.inst.DeleteObject(activeTarget.ueo.gameObject); DrawTargetLine(Color.red, activeTarget.p); } } } float wd = Input.mouseScrollDelta.y; // could be 0.1, 0.5, or 4, 5 agt high speeds if (wd != 0) { wd = wd > 0 ? Mathf.Max(wd, 0.5f) : Mathf.Min(-0.5f, wd); ueo.transform.position += Vector3.up * Mathf.RoundToInt((wd * 0.5f) * 4) * 0.5f; DrawTargetLine(Color.blue, activeTarget.p); } float moveFactor = 0.5f; if (Input.GetKey(KeyCode.RightBracket)) { ueo.transform.position += Vector3.up * moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKey(KeyCode.LeftBracket)) { ueo.transform.position += Vector3.down * moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKey(KeyCode.F)) { ueo.transform.position += Utils.FlattenVector(transform.forward).normalized *moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKey(KeyCode.B)) { ueo.transform.position += Utils.FlattenVector(-transform.forward).normalized *moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKey(KeyCode.R)) { ueo.transform.position += Utils.FlattenVector(transform.right).normalized *moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKey(KeyCode.L)) { ueo.transform.position += Utils.FlattenVector(-transform.right).normalized *moveFactor; DrawTargetLine(Color.green, activeTarget.p); } else if (Input.GetKeyDown(KeyCode.Equals)) { UEO_ScaleManipulator scale = ueo.GetComponentInChildren <UEO_ScaleManipulator>(); if (scale) { scale.transform.localScale += scale.scaleFactor * Vector3.one; DrawTargetLine(Color.magenta, activeTarget.p); } } else if (Input.GetKeyDown(KeyCode.Minus)) { UEO_ScaleManipulator scale = ueo.GetComponentInChildren <UEO_ScaleManipulator>(); if (scale) { scale.transform.localScale -= scale.scaleFactor * Vector3.one; DrawTargetLine(Color.magenta, activeTarget.p); } } if (Input.GetKeyDown(KeyCode.C)) { carryingCopyObjecty = true; copyObj = LevelBuilder.inst.DuplicateObject(ueo.transform.position, ueo.gameObject); copyObjDist = Vector3.Distance(copyObj.transform.position, transform.position); } if (copyObj) { copyObj.transform.position = transform.position + transform.forward * copyObjDist; DrawTargetLine(Color.yellow, copyObj.transform.position); } if (Input.GetKeyUp(KeyCode.C)) { copyObj = null; carryingCopyObjecty = false; } int shift = Input.GetKey(KeyCode.LeftShift) ? 9 : 1; // if hold shift, rotate 45 degrees instead of 5 if (Input.GetMouseButtonDown(1)) { ueo.transform.Rotate(Vector3.up, 5 * shift); DrawTargetLine(Color.green, ueo.transform.position); } if (Input.GetMouseButtonDown(2)) { ueo.transform.Rotate(Vector3.up, -5 * shift); DrawTargetLine(Color.green, ueo.transform.position); } if (Input.GetMouseButtonDown(0)) { // hold right mouse to begin moving // Debug.Log("mousdown got:"+moveObj); moveObj = ueo.gameObject; moveObjOffset = transform.InverseTransformVector(moveObj.transform.position - transform.position); // moveObjDist = Vector3.Distance(moveObj.transform.position,transform.position); } if (moveObj) { moveObj.transform.position = transform.position + transform.TransformVector(moveObjOffset); // moveObj.transform.position = transform.position + transform.forward * moveObjDist + moveObjOffset; DrawTargetLine(Color.blue, transform.position + transform.forward * 10f); } if (Input.GetMouseButtonUp(0)) { moveObj = null; } }