//------------- This function will disable the Orbit function used for the rotate feature of the camera when object is selected --------- public void DisableTBOrbit(GameObject selectedObject,CabinetScript.TypeOfCabinet objectType) { script.enabled = false; CancelInvoke("EnableTBOrbitScript"); }
//=========== Function to calculate camera rotation on selecting different cabinet types =============== Vector3 RotateCamera(GameObject selectedObject,CabinetScript.TypeOfCabinet objectType) { Vector3 rotation = new Vector3(); //----- Switch will help choose which values to use for camera rotation when an object is selected ------ switch(objectType){ //------------------- BASE CABINETS--------------- case CabinetScript.TypeOfCabinet.BaseCabinet:{ rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + baseCabinet.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + baseCabinet.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } //------------------- WALL CABINETS --------------- case CabinetScript.TypeOfCabinet.WallCabinets: { rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + wallCabinet.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + wallCabinet.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } //------------------- CORNER CABINETS ------------ case CabinetScript.TypeOfCabinet.CornerCabinet: { rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + cornerCabinet.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + cornerCabinet.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } //------------------- TALL CABINETS --------------- case CabinetScript.TypeOfCabinet.TallCabinet: { rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + oilPullout.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + oilPullout.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } //-------------------- HOB ----------------------- case CabinetScript.TypeOfCabinet.Hob: { rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + hob.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + hob.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } //-------------------- INTERNALS ------------------------ //-------------------- HOB ----------------------- case CabinetScript.TypeOfCabinet.MidSizeCabinet: { rotation = new Vector3(selectedObject.transform.rotation.eulerAngles.x + drawers.verticalViewAngleOnObjectSelection, selectedObject.transform.rotation.eulerAngles.y + drawers.horizontalViewAngleOnObjectSelection,selectedObject.transform.rotation.eulerAngles.z); break; } } return rotation; }
//===== Used for direct call or focusing the camera on objects ===== public void FocusCameraOnObject(GameObject selectedObject,CabinetScript.TypeOfCabinet objectType) { //-------------- Saving camera position --------------- //StoreOriginalPosition(animationCamera.transform.position); //-------------- Saving camera rotation --------------- //StoreOriginalRotation(); //---------- Calculate new camera position ---------- Vector3 position = PositionCamera(selectedObject,objectType); //----------- Tween to new position ----------- iTween.MoveTo(animationCamera,position,cameraFocusOnObjectSpeed); //----------- Calculate new camera rotation ------------------- Vector3 rotation = RotateCamera(selectedObject,objectType); //------------- Tween new rotation ------------ iTween.RotateTo(animationCamera,rotation,cameraFocusOnObjectSpeed); //----Change Camera status to Edit Mode----It is used as check before re-enabling tb orbit script---- camStatus = cameraStatus.EditMode; }
//=========== Function to calculate camera position on selecting different cabinet types =============== Vector3 PositionCamera(GameObject selectedObject,CabinetScript.TypeOfCabinet type) { Vector3 position = new Vector3(); //-------------- Switch will help choose what position values should be used when object is selected ---------- switch(type){ //-------------- BASE CABINET ----------------- case CabinetScript.TypeOfCabinet.BaseCabinet:{ if(baseCabinet.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the fron of the cabinet ----- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * baseCabinet.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f; //-------- Set the height of the camera ------ position = position + new Vector3(0f,baseCabinet.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * baseCabinet.distanceFromObjectOnZoom; position = position + new Vector3(0f,baseCabinet.cameraHeightWithObjectOnZoom,0f); } break; } //-------------- WALL CABINET ----------------- case CabinetScript.TypeOfCabinet.WallCabinets:{ //---- IF Auto Fit ----------------- if(wallCabinet.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the fron of the object ------- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * wallCabinet.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f; //-------- Set the height of the camera ------ position = position + new Vector3(0f,wallCabinet.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * wallCabinet.distanceFromObjectOnZoom; position = position + new Vector3(0f,wallCabinet.cameraHeightWithObjectOnZoom,0f); } break; } //-------------- CORNER CABINET ----------------- case CabinetScript.TypeOfCabinet.CornerCabinet:{ //---- IF Auto Fit ----------------- if(cornerCabinet.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the front of the object ------- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * cornerCabinet.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f - selectedObject.transform.right * distance * 1.8f; //-------- Set the height of the camera -------- position = position + new Vector3(0f,cornerCabinet.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * cornerCabinet.distanceFromObjectOnZoom - selectedObject.transform.right * cornerCabinet.distanceFromObjectOnZoom; position = position + new Vector3(0f,cornerCabinet.cameraHeightWithObjectOnZoom,0f); } break; } //-------------- TALL CABINET ----------------- case CabinetScript.TypeOfCabinet.TallCabinet:{ //---- IF Auto Fit ----------------- if(oilPullout.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the front of the cabinet ----- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * oilPullout.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f; //-------- Set the height of the camera ------ position = position + new Vector3(0f,oilPullout.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * oilPullout.distanceFromObjectOnZoom + selectedObject.transform.right * oilPullout.distanceFromObjectOnZoom; position = position + new Vector3(0f,oilPullout.cameraHeightWithObjectOnZoom,0f); } break; } //-------------- HOB ----------------- case CabinetScript.TypeOfCabinet.Hob:{ //---- IF Auto Fit ----------------- if(hob.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the fron of the cabinet ----- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * hob.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f; //-------- Set the height of the camera ------ position = position + new Vector3(0f,hob.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * hob.distanceFromObjectOnZoom; position = position + new Vector3(0f,hob.cameraHeightWithObjectOnZoom,0f); } break; } //---------------------------------------------------------- INTERNALS ------------------------------------------------------- //-------------- DRAWS ----------------- case CabinetScript.TypeOfCabinet.MidSizeCabinet:{ //---- IF Auto Fit ----------------- if(drawers.autoFitCameraToBaseCabinetSize){ //----------- Set distance from the fron of the cabinet ----- float sizeOfObject = Mathf.Max(selectedObject.GetComponent<Collider>().bounds.extents.x,selectedObject.GetComponent<Collider>().bounds.extents.y * drawers.maxZoomLimitOnObject); float distance = sizeOfObject / cameraFOVBasedValue; Debug.Log("Distance Z:" + distance); Debug.Log("Object Z:" + selectedObject.transform.position.z); position = selectedObject.transform.position + selectedObject.transform.forward * distance * 1.8f; //-------- Set the height of the camera ------ position = position + new Vector3(0f,drawers.cameraHeightWithObjectOnZoom,0f); Debug.Log("Position Z:" + position.z); } //--------- Else use manual fit ----------- else{ position = selectedObject.transform.position + selectedObject.transform.forward * drawers.distanceFromObjectOnZoom; position = position + new Vector3(0f,drawers.cameraHeightWithObjectOnZoom,0f); } break; } } return position; }
//=========== Called when any object in the scene is selected --- All objects will call this function when any kind of selection event occus. ============ public void UnSelected(GameObject selectedObject,CabinetScript.TypeOfCabinet objectType) { //---------- Set this object to unselected only if this is not the selected object and it was selected before ------- if(gameObject != selectedObject && objectSelectionStatus.interaction == Interactions.interactionTypes.Selected){ objectSelectionStatus.SetUnSelected(); //------ To be executed only for non internals -------- Internals colliders are controlled by parent cabinet -------- if(!internals){ SwitchOnSelfColliders(); DeactivateCollidersInChildren(); } } }