public bool DeleteWallSegment(GameObject wall, Vector3 targetpoint) { if (TweakAction != TweakActionType.none) { return(false); } ChaperonePlaneProperties wallprops = wall.GetComponent <ChaperonePlaneProperties>(); TweakAction = TweakActionType.wRemove; if (WallCount > 3) { WallCount--; if (Vector3.Distance(wall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)), targetpoint) > Vector3.Distance(wall.transform.TransformPoint(new Vector3(0.5f, 0f, 0f)), targetpoint)) { wallprops = wallprops.RightWall; } if (FirstWall = wallprops) { FirstWall = wallprops.LeftWall; } wallprops.LeftWall.RightWall = wallprops.RightWall; wallprops.RightWall.LeftWall = wallprops.LeftWall; Vector3 leftcorner = wallprops.LeftWall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)); Vector3 rightcorner = wallprops.RightWall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)); wallprops.LeftWall.transform.position = Vector3.Lerp(leftcorner, rightcorner, 0.5f); wallprops.LeftWall.transform.localScale = new Vector3(Vector3.Distance(leftcorner, rightcorner), wallprops.LeftWall.transform.localScale.y, 1); wallprops.LeftWall.transform.rotation = Quaternion.LookRotation(leftcorner - rightcorner, Vector3.up) * Quaternion.Euler(0, 90, 0); Destroy(wallprops.gameObject); } return(true); }
public bool StartWallEdgeAdjust(Transform controller, GameObject wall, Vector3 grabpoint) { if (TweakAction != TweakActionType.none) { return(false); } ChaperonePlaneProperties wallprops = wall.GetComponent <ChaperonePlaneProperties>(); TweakAction = TweakActionType.wEdgePosition; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; if (Vector3.Distance(wall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)), grabpoint) < Vector3.Distance(wall.transform.TransformPoint(new Vector3(0.5f, 0f, 0f)), grabpoint)) { TweakLeftWall = wallprops.LeftWall.gameObject; TweakRightWall = wall; } else { TweakLeftWall = wall; TweakRightWall = wallprops.RightWall.gameObject; } TweakLeftPivotPoint = TweakLeftWall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)); TweakRightPivotPoint = TweakRightWall.transform.TransformPoint(new Vector3(0.5f, 0f, 0f)); TweakTargetInitPoint = TweakLeftWall.transform.TransformPoint(new Vector3(0.5f, 0f, 0f)); return(true); }
public bool SplitWallSegment(Transform controller, GameObject wall, Vector3 targetpoint) { if (TweakAction != TweakActionType.none) { return(false); } ChaperonePlaneProperties wallprops = wall.GetComponent <ChaperonePlaneProperties>(); TweakAction = TweakActionType.wAdd; WallCount++; Vector3 leftcorner = wall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)); Vector3 rightcorner = targetpoint; rightcorner.y = leftcorner.y; wall.transform.position = Vector3.Lerp(leftcorner, rightcorner, 0.5f); wall.transform.localScale = new Vector3(Vector3.Distance(leftcorner, rightcorner), wall.transform.localScale.y, 1); wall.transform.rotation = Quaternion.LookRotation(leftcorner - rightcorner, Vector3.up) * Quaternion.Euler(0, 90, 0); ChaperonePlaneProperties newwall = CreatePlane("newwall", true, WallMaterial); newwall.transform.parent = transform; leftcorner = rightcorner; rightcorner = wallprops.RightWall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f)); newwall.transform.position = Vector3.Lerp(leftcorner, rightcorner, 0.5f); newwall.transform.localScale = new Vector3(Vector3.Distance(leftcorner, rightcorner), wall.transform.localScale.y, 1); newwall.transform.rotation = Quaternion.LookRotation(leftcorner - rightcorner, Vector3.up) * Quaternion.Euler(0, 90, 0); newwall.RightWall = wallprops.RightWall; newwall.LeftWall = wallprops; newwall.LeftWall.RightWall = newwall; newwall.RightWall.LeftWall = newwall; TweakAction = TweakActionType.none; StartWallEdgeAdjust(controller, newwall.gameObject, targetpoint); return(true); }
public bool StartPlaySpaceCentrePivot(Transform controller, TweakActionArea area) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.psPivot; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; TweakPivotPoint = PlaySpace.transform.position; if (area == TweakActionArea.bottomLeft) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, -0.5f)); } else if (area == TweakActionArea.bottomRight) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, -0.5f)); } else if (area == TweakActionArea.topLeft) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, 0.5f)); } else if (area == TweakActionArea.topRight) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, 0.5f)); } TweakYawDelta = PlaySpace.transform.localEulerAngles.y - Quaternion.LookRotation(TweakTargetInitPoint - TweakPivotPoint, Vector3.up).eulerAngles.y; return(true); }
public void SaveChaperone() { TweakAction = TweakActionType.save; ChaperoneSaving = true; ChaperoneCalibrationState state = OpenVR.Chaperone.GetCalibrationState(); if (state != ChaperoneCalibrationState.OK) { Debug.Log("GetCalibrationState() = " + state.ToString()); return; } SteamVR_Utils.RigidTransform rt = new SteamVR_Utils.RigidTransform(); rt.pos = PlaySpace.transform.position; rt.rot = PlaySpace.transform.rotation; HmdMatrix34_t mat = rt.ToHmdMatrix34(); OpenVR.ChaperoneSetup.SetWorkingStandingZeroPoseToRawTrackingPose(ref mat); OpenVR.ChaperoneSetup.SetWorkingPlayAreaSize(PlaySpace.transform.localScale.x, PlaySpace.transform.localScale.z); HmdQuad_t[] pQuadsBuffer = new HmdQuad_t[WallCount]; ChaperonePlaneProperties wall = FirstWall; for (int index = 0; index < WallCount; index++) { Vector3 wallcorner = Vector3.Scale(PlaySpace.transform.InverseTransformPoint(wall.transform.TransformPoint(new Vector3(0.5f, 0f, 0f))), PlaySpace.transform.localScale); pQuadsBuffer[index].vCorners0.v0 = wallcorner.x; pQuadsBuffer[index].vCorners0.v1 = wallcorner.y; pQuadsBuffer[index].vCorners0.v2 = -wallcorner.z; wallcorner = Vector3.Scale(PlaySpace.transform.InverseTransformPoint(wall.transform.TransformPoint(new Vector3(0.5f, 1f, 0f))), PlaySpace.transform.localScale); pQuadsBuffer[index].vCorners1.v0 = wallcorner.x; pQuadsBuffer[index].vCorners1.v1 = wallcorner.y; pQuadsBuffer[index].vCorners1.v2 = -wallcorner.z; wallcorner = Vector3.Scale(PlaySpace.transform.InverseTransformPoint(wall.transform.TransformPoint(new Vector3(-0.5f, 1f, 0f))), PlaySpace.transform.localScale); pQuadsBuffer[index].vCorners2.v0 = wallcorner.x; pQuadsBuffer[index].vCorners2.v1 = wallcorner.y; pQuadsBuffer[index].vCorners2.v2 = -wallcorner.z; wallcorner = Vector3.Scale(PlaySpace.transform.InverseTransformPoint(wall.transform.TransformPoint(new Vector3(-0.5f, 0f, 0f))), PlaySpace.transform.localScale); pQuadsBuffer[index].vCorners3.v0 = wallcorner.x; pQuadsBuffer[index].vCorners3.v1 = wallcorner.y; pQuadsBuffer[index].vCorners3.v2 = -wallcorner.z; wall = wall.LeftWall; } OpenVR.ChaperoneSetup.SetWorkingCollisionBoundsInfo(pQuadsBuffer); OpenVR.ChaperoneSetup.CommitWorkingCopy(EChaperoneConfigFile.Live);// ReloadChaperone(); ChaperoneSaving = false; }
public bool StartWallHeightAdjust(Transform controller) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.wHeight; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; TweakInitScaleF = FirstWall.transform.localScale.y; return(true); }
public bool StartPlaySpaceHeightAdjust(Transform controller) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.psHeight; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; TweakTargetInitPoint = PlaySpace.transform.position; return(true); }
public bool StartPlaySpaceEdgeResize(Transform controller, TweakActionArea area) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.psEdgeResize; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; if ((area == TweakActionArea.bottom) || (area == TweakActionArea.top)) { TweakInitScaleF = PlaySpace.transform.localScale.z; } else { TweakInitScaleF = PlaySpace.transform.localScale.x; } TweakArea = area; TweakTargetInitPoint = PlaySpace.transform.position; return(true); }
public bool SetFront(TweakActionArea area) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.psSetFront; if (area == TweakActionArea.left) { PlaySpace.transform.localScale = new Vector3(PlaySpace.transform.localScale.z, PlaySpace.transform.localScale.y, PlaySpace.transform.localScale.x); PlaySpace.transform.Rotate(0, -90, 0); } else if (area == TweakActionArea.right) { PlaySpace.transform.localScale = new Vector3(PlaySpace.transform.localScale.z, PlaySpace.transform.localScale.y, PlaySpace.transform.localScale.x); PlaySpace.transform.Rotate(0, 90, 0); } else if (area == TweakActionArea.bottom) { PlaySpace.transform.Rotate(0, 180, 0); } return(true); }
public bool StartPlaySpaceCornerPivot(Transform controller, TweakActionArea area) { if (TweakAction != TweakActionType.none) { return(false); } TweakAction = TweakActionType.psPivotScale; TweakControllerInitPos = controller.position; TweakControllerTrans = controller; if (area == TweakActionArea.bottomLeft) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, -0.5f)); TweakPivotPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, 0.5f)); } else if (area == TweakActionArea.bottomRight) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, -0.5f)); TweakPivotPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, 0.5f)); } else if (area == TweakActionArea.topLeft) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, 0.5f)); TweakPivotPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, -0.5f)); } else if (area == TweakActionArea.topRight) { TweakTargetInitPoint = PlaySpace.transform.TransformPoint(new Vector3(0.5f, 0, 0.5f)); TweakPivotPoint = PlaySpace.transform.TransformPoint(new Vector3(-0.5f, 0, -0.5f)); } TweakMinScale = Mathf.Sqrt(Mathf.Pow(MinimumScale / Mathf.Min(PlaySpace.transform.localScale.x, PlaySpace.transform.localScale.z) * PlaySpace.transform.localScale.x, 2) + Mathf.Pow(MinimumScale / Mathf.Min(PlaySpace.transform.localScale.x, PlaySpace.transform.localScale.z) * PlaySpace.transform.localScale.z, 2)); TweakInitScaleV = PlaySpace.transform.localScale; TweakYawDelta = PlaySpace.transform.localEulerAngles.y - Quaternion.LookRotation(TweakTargetInitPoint - TweakPivotPoint, Vector3.up).eulerAngles.y; return(true); }
public void EndAction() { TweakAction = TweakActionType.none; }
public void ReloadChaperone() { TweakAction = TweakActionType.reload; Vector3 v0; Vector3 v1; Vector3 v3; float x = 0; float y = 0; HmdMatrix34_t mat = new HmdMatrix34_t(); HmdQuad_t[] quads; ChaperonePlaneProperties wall, prevwall; ChaperoneLoading = true; //make sure we can get all the necessary information ChaperoneCalibrationState state = OpenVR.Chaperone.GetCalibrationState(); if (state != ChaperoneCalibrationState.OK) { Debug.Log("GetCalibrationState() = " + state.ToString()); return; } OpenVR.ChaperoneSetup.RevertWorkingCopy(); if (!OpenVR.ChaperoneSetup.GetWorkingStandingZeroPoseToRawTrackingPose(ref mat)) { Debug.Log("GetWorkingStandingZeroPoseToRawTrackingPose failed"); return; } if (!OpenVR.ChaperoneSetup.GetWorkingPlayAreaSize(ref x, ref y)) { Debug.Log("GetWorkingPlayAreaSize() failed"); return; } if (!OpenVR.ChaperoneSetup.GetWorkingCollisionBoundsInfo(out quads)) { Debug.Log("GetWorkingCollisionBoundsInfo() failed"); return; } // Destroy walls/playspace if they already exist if (PlaySpace != null) { Destroy(PlaySpace.gameObject); PlaySpace = null; } if (FirstWall != null) { wall = FirstWall; for (int i = 0; i < WallCount; i++) { prevwall = wall.RightWall; Destroy(wall.gameObject); wall = prevwall; } FirstWall = null; WallCount = 0; } //this object will become the origin point SteamVR_Utils.RigidTransform rt = new SteamVR_Utils.RigidTransform(mat); transform.position = rt.pos; //+ new Vector3(0, 1, 0); transform.rotation = rt.rot; transform.localScale = Vector3.one; //create the rectangular playspace object PlaySpace = CreatePlane("ChapPlaySpace", false, PlaySpaceMaterial); PlaySpace.transform.parent = transform; //set the playspace transform PlaySpace.transform.localScale = new Vector3(x, 1, y); PlaySpace.transform.localPosition = Vector3.zero; PlaySpace.transform.localRotation = Quaternion.identity; //Create the wall objects WallCount = quads.Length; prevwall = null; foreach (HmdQuad_t quad in quads) { wall = CreatePlane("ChapWall", true, WallMaterial); wall.transform.parent = transform; // convert the necessary corners to a usable format v0 = new Vector3(quad.vCorners0.v0, quad.vCorners0.v1, -quad.vCorners0.v2); v1 = new Vector3(quad.vCorners1.v0, quad.vCorners1.v1, -quad.vCorners1.v2); v3 = new Vector3(quad.vCorners3.v0, quad.vCorners3.v1, -quad.vCorners3.v2); // set the walls transform wall.transform.localPosition = Vector3.Lerp(v0, v3, 0.5f); wall.transform.localScale = new Vector3(Vector3.Distance(v0, v3), Vector3.Distance(v0, v1), 1); wall.transform.localRotation = Quaternion.LookRotation(v3 - v0, Vector3.up) * Quaternion.Euler(0, 90, 0); //each wall has a properties script with a link to the left and right wall. Also save a reference to the 1st wall if (prevwall != null) { prevwall.LeftWall = wall; } else { FirstWall = wall; } wall.RightWall = prevwall; prevwall = wall; //Link first wall with last wall FirstWall.RightWall = wall; wall.LeftWall = FirstWall; } ChaperoneLoading = false; TweakAction = TweakActionType.none; }