void Start() { try { cam = Camera.main; state = CameraState.zoomedOut_Exterior; dm = gameObject.GetComponent <DispensaryManager>(); db = GameObject.Find("Database").GetComponent <Database>(); uiManager = GameObject.Find("UIManager").GetComponent <UIManager_v5>(); zoomedOut_ExteriorState = new PreviousCameraState(state, cam.transform.position, cam.transform.eulerAngles, dm.dispensary.gameObject.transform.position); zoomedOut_InteriorState = new PreviousCameraState(); zoomedInState = new PreviousCameraState(); preFocusState = new PreviousCameraState(); } catch (NullReferenceException) { // Main menu } }
public void ChangeState(bool in_, string component) { if (!camMoving) { if (in_) { mouseLockedToCamera = false; } switch (state) // current camera state, before change { case CameraState.zoomedOut_Exterior: if (in_) { zoomedOut_ExteriorState = new PreviousCameraState(state, cam.transform.position, cam.transform.eulerAngles, dm.dispensary.grid.transform.position); state = CameraState.zoomedOut_Interior; dm.actionManager.SetSelectorToComponentsOnly(); } else { // create camera animation to move slightly backward then bounce off invisible wall // to symbolize being zoomed out to maximum } break; case CameraState.zoomedOut_Interior: if (in_) { state = CameraState.zoomedIn; GameObject compGO = dm.dispensary.GetComponentGO(component); // Possible zoom positions 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; } } // Previous position zoomedOut_InteriorState = new PreviousCameraState(CameraState.zoomedOut_Interior, cam.transform.position, cam.transform.eulerAngles, dm.dispensary.grid.transform.position); 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; MoveCamera(toSend_, eulerToSend, compGO.transform.position, false, false); dm.actionManager.SetSelectorToAllSelectables(); } else { MoveCamera(zoomedOut_ExteriorState.position, zoomedOut_ExteriorState.rotation, zoomedOut_ExteriorState.lookAt, true, false); state = zoomedOut_ExteriorState.state; zoomedOut_ExteriorState = new PreviousCameraState(); dm.actionManager.SetSelectorToNothing(); } break; case CameraState.zoomedIn: if (in_) { } else { if (preFocusState.Valid()) { MoveCamera(preFocusState.position, preFocusState.rotation, preFocusState.lookAt, true, false); state = preFocusState.state; preFocusState = new PreviousCameraState(); dm.actionManager.SetSelectorToAllSelectables(); } else { MoveCamera(zoomedOut_InteriorState.position, zoomedOut_InteriorState.rotation, zoomedOut_InteriorState.lookAt, true, false); state = zoomedOut_InteriorState.state; preFocusState = new PreviousCameraState(); dm.actionManager.SetSelectorToComponentsOnly(); } } break; } } }