void Start() { //----------- Retrieving selected cabinet type to pass along with object selected event ---------- selectedObjectType = GetComponent <CabinetScript>()._typeOfCabinet; //---------- Retrieving child colliders of internals ------------- if (!internals) { childColliders = GetComponentsInChildren <Collider>(); selfCollider = gameObject.GetComponent <BoxCollider>(); } }
//=========== 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); }
//=========== 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(); } } }
//===== 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); }
void Start() { //----------- Retrieving selected cabinet type to pass along with object selected event ---------- selectedObjectType = GetComponent<CabinetScript>()._typeOfCabinet; //---------- Retrieving child colliders of internals ------------- if(!internals){ childColliders = GetComponentsInChildren<Collider>(); selfCollider = gameObject.GetComponent<BoxCollider>(); } }
//------------- 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"); }