public bool belowRoof = false; // true if changed walls transparency public void ChangeState(bool in_, string component_) { if (!camMoving) { if (in_) { freeMouse = false; } switch (state) { case CameraState.Focused: if (!in_) { state = CameraState.SingleComponent; MoveCamera(preFocusPosition, preFocusRotation, preFocusLookAt, true, true); } break; case CameraState.SingleComponent: if (!in_) { if (pm.selectingProducts) { pm.StopSelectingProducts(true); /*if (pm.hoveringOver != null) * { * pm.hoveringOver.HighlightOff(); * pm.hoveringOver = null; * }*/ } state = CameraState.Dispensary; dm.dispensary.ResetSelectedComponents(); component = string.Empty; MoveCamera(preZoomPosition, preZoomRotation, dm.dispensary.grid.transform.position, true, false); } else { /*if (hoveringOver != null) * { * if (hoveringOver.cameraPosition != null) * { * FocusCameraOnObject(hoveringOver.cameraPosition); * MoveCamera(preZoomPosition, dm.dispensary.grid.transform.position, false, true, false); * } * }*/ } break; case CameraState.Dispensary: if (in_) { if (component_ != string.Empty) { state = CameraState.SingleComponent; component = component_; Dispensary dispensary = dm.dispensary; dispensary.SelectComponent(component); List <Vector3> possibleCameraPositions = dm.dispensary.GetPossibleCameraPositions(component); float dist = 1000; Vector3 targetCamPos = Vector3.zero; foreach (Vector3 pos in possibleCameraPositions) { float newDist = Vector3.Distance(Camera.main.transform.position, pos); if (newDist < dist) { dist = newDist; targetCamPos = pos; } } preZoomPosition = Camera.main.transform.position; preZoomRotation = Camera.main.transform.eulerAngles; preZoomRotateAround = rotateAround; Vector3 toSend_ = new Vector3(targetCamPos.x, targetCamPos.y, targetCamPos.z); Vector3 eulerToSend = Camera.main.transform.eulerAngles; yaw = Camera.main.transform.eulerAngles.y; pitch = Camera.main.transform.eulerAngles.x; GameObject compGO = dispensary.GetComponentGO(component); MoveCamera(toSend_, eulerToSend, compGO.transform.position, false, false); } } else { state = CameraState.Exterior; component = string.Empty; } break; case CameraState.Exterior: if (in_) { state = CameraState.Dispensary; component = string.Empty; } break; } } }