public void RepositionOverheadCamera() { if (carSpawner == null) { return; } if (GlobalState.overheadCamera) { GameObject OHCamGo = carSpawner.cameras[0]; OverHeadCamera overheadCamera = OHCamGo.GetComponent <OverHeadCamera>(); overheadCamera.Init(); } }
public void AddSplitScreenCam(int index) { if (cameras.Count < GlobalState.maxSplitScreen && !GlobalState.raceCameras) { if (index == 0 && GlobalState.overheadCamera) { GameObject splitScreenOHCamGo = Instantiate(splitScreenOHCamPrefab); OverHeadCamera OHCam = splitScreenOHCamGo.GetComponent <OverHeadCamera>(); OHCam.pathManager = pathManager; OHCam.Init(); cameras.Add(splitScreenOHCamGo); } else { GameObject splitScreenCamGo = Instantiate(splitScreenCamPrefab); cameras.Add(splitScreenCamGo); } } }
public void UpdateSplitScreenCams() { if (GlobalState.raceCameras) { if (mainCamera != null) { mainCamera.SetActive(false); } return; } int num_cameras = cars.Count; if (GlobalState.overheadCamera) { num_cameras += 1; } if (num_cameras > GlobalState.maxSplitScreen) { num_cameras = GlobalState.maxSplitScreen; } // check if the number of cameras match the number of cars if ((cameras.Count != num_cameras)) { // remove all cameras in there foreach (GameObject splitScreenCamGo in cameras) { GameObject.Destroy(splitScreenCamGo); } cameras.Clear(); // and recreate some new ones for (int i = 0; i < num_cameras; i++) { AddSplitScreenCam(i); } } // for each camera, update the rect for (int i = 0; i < num_cameras; i++) { if (i > 0 || !GlobalState.overheadCamera) // if the camera isn't overhead, assign a car to it { GameObject splitScreenCamGo = cameras[i]; GameObject car; if (GlobalState.overheadCamera) { car = cars[i - 1]; } else { car = cars[i]; } // set target to the corresponding car Camera splitScreenCam = splitScreenCamGo.GetComponent <Camera>(); DrawLidar dLidar = splitScreenCamGo.GetComponent <DrawLidar>(); dLidar.car = car; CameraFollow cameraFollow = splitScreenCam.GetComponent <CameraFollow>(); cameraFollow.target = getChildGameObject(car, "CameraFollowTm").transform; } int x_index = i % SplitScreenWidth; int y_index = i / SplitScreenWidth; int number_in_row = Math.Min((cameras.Count - y_index * SplitScreenWidth), SplitScreenWidth); int number_of_row = 1 + ((cameras.Count - 1) / SplitScreenWidth); float w = 1 / (float)(number_in_row); float h = 1 / (float)(number_of_row); float x = (x_index) / (float)number_in_row; float y = (y_index) / (float)number_of_row; GameObject go = cameras[i]; Camera camera = go.GetComponent <Camera>(); camera.rect = new Rect(x, y, w, h); if (GlobalState.overheadCamera && i == 0) { OverHeadCamera ohcam = go.GetComponent <OverHeadCamera>(); ohcam.Init(); } } if (cameras.Count == 0 && mainCamera != null && !GlobalState.raceCameras) { mainCamera.SetActive(true); } else if (mainCamera != null) { mainCamera.SetActive(false); // make sure we are disabling main camera to avoid background rendering } }