private void ApplyRotation(bool instantRotation) { currentRotation = newWorldTileSurface.SurfaceRotation; Vector3 rotationEuler = PlayerSurfaceRotationConverter. SurfaceRotationToWorldRotation(newWorldTileSurface.SurfaceRotation); playerRotationHelper.transform.rotation = Quaternion.identity; playerRotationHelper.Rotate(rotationEuler, Space.Self); if (instantRotation) { player.transform.localRotation = playerRotationHelper.transform.localRotation; } else { transform.DOLocalRotateQuaternion(playerRotationHelper.transform.localRotation, smoothRotationTime).SetEase(Ease.OutBack); } Log("Applied rotation on surface: " + newWorldTileSurface.SurfaceRotation); Log("And the local rotation is: " + playerRotationHelper.transform.localEulerAngles); }
/// <summary> /// The given value is based on local rotation. /// </summary> /// <param name="surfaceRotation"></param> /// <returns></returns> public static Vector3 SurfaceRotationToWorldRotation(SurfaceRotation surfaceRotation) { // Start rotation, as if standing on top of a world Vector3 rotation = Vector3.zero; switch (surfaceRotation) { case SurfaceRotation.Left: rotation.z += 90f; break; case SurfaceRotation.Right: rotation.z -= 90f; break; case SurfaceRotation.Bottom: rotation.z += 180f; break; case SurfaceRotation.Top: break; case SurfaceRotation.Front: rotation.x -= 90f; break; case SurfaceRotation.Rear: rotation.x += 90f; break; } return(rotation); }
public void Add(SurfaceRotation surfaceRotation) { if (surfaceRotations.Contains(surfaceRotation)) { return; } surfaceRotations.Add(surfaceRotation); }
public MinicapAdapter(DeviceAdapter device, MinicapClient client) { Device = device; Client = client; _Rotation = SurfaceRotation.Rotation0; _ExecutableDirectory = AppDomain.CurrentDomain.BaseDirectory; }
public void Setup(SurfaceRotation walkableSide, float offset) { this.surfaceRotation = walkableSide; Vector3 position = transform.parent.position; Vector3 rotation = transform.parent.localRotation.eulerAngles; switch (walkableSide) { case SurfaceRotation.Left: position.x -= offset; rotation.y += 90f; break; case SurfaceRotation.Right: position.x += offset; rotation.y -= 90f; break; case SurfaceRotation.Bottom: position.y -= offset; rotation.x -= 90f; break; case SurfaceRotation.Top: position.y += offset; rotation.x += 90f; break; case SurfaceRotation.Front: position.z -= offset; break; case SurfaceRotation.Rear: position.z += offset; rotation.y += 180f; break; } transform.position = position; transform.localRotation = Quaternion.Euler(rotation); }
private void CreateWalkablePlanes() { // First destroy old walkable planes DestroyWalkablePlanes(); for (int i = 0; i < surfaceRotations.SurfaceRotationList.Count; i++) { float worldTileHalfSize = GetComponent <Renderer>().bounds.size.x / 2f; float offset = worldTileHalfSize + walkablePlaneDistance; SurfaceRotation surfaceRotation = surfaceRotations.SurfaceRotationList[i]; WorldTileSurface walkablePlane = Instantiate(GetWorldTileSurfacePrefab()); walkablePlane.transform.parent = transform; walkablePlane.Setup(surfaceRotation, offset); surfaces.Add(walkablePlane); } }