using CHN; using UnityEngine; using WI; public class ViewManager : MonoBehaviour, ISingle { private Building building; private OrbitalController controller; private ViewMode preViewMode; public override void AfterAwake() { building = FindSingle(); controller = FindSingle(); } public void ChangeViewWithButtonClick(ViewMode mode) { preViewMode = controller.viewMode; var preViewModeData = new CameraEntity(); preViewModeData.distance = controller.option.currentDistance; preViewModeData.azimuth = controller.option.currentAzimuth; preViewModeData.elevation = controller.option.currentElevation; controller.SetViewMode(mode); switch (mode) { case ViewMode.PerspectiveView: SetPerPerspectiveView(); break; case ViewMode.TopView: SetTopView(); break; case ViewMode.FirstPersonView: SetFirstPersonView(preViewMode, preViewModeData); break; } controller.LastPositioning(true); } private void SetPerPerspectiveView() { if(controller.saveTargetPositions[ViewMode.PerspectiveView] == null) { var perspectivePos = controller.option.target.position; var floorStartPos = building.currentFloor.StartPoint.position; var newPos = new Vector3(perspectivePos.x, floorStartPos.y, perspectivePos.z); controller.nextPosition = newPos; building.SetAllFloorExternalState(); } else { building.SetAllFloorExternalState(); var floorIndex = controller.saveTargetPositions[ViewMode.PerspectiveView].floorIndex; var slider = FindSingle().panel_floorcontrol; slider.ChangeValueFromOutside(floorIndex); } } private void SetTopView() { if (controller.saveTargetPositions[ViewMode.TopView] == null) { building.SetAllFloorExternalState(); } else { building.SetAllFloorExternalState(); var floorIndex = controller.saveTargetPositions[ViewMode.TopView].floorIndex; var slider = FindSingle().panel_floorcontrol; slider.ChangeValueFromOutside(floorIndex); } } private void SetFirstPersonView(ViewMode preViewMode, CameraEntity preViewModeData) { if (building.currentFloor.isEmptyFloor) { controller.SetViewMode(preViewMode); controller.option.currentDistance = preViewModeData.distance; controller.option.currentAzimuth = preViewModeData.azimuth; controller.option.currentElevation = preViewModeData.elevation; return; } if (controller.saveTargetPositions[ViewMode.FirstPersonView] == null) { building.SetCurrentFloorInternalState(); var pos = controller.option.target.position; var startPos = building.currentFloor.StartPoint.position; if (building.currentFloor.FloorContainsPoint(pos)) { var tourModePos = new Vector3(pos.x, startPos.y, pos.z); startPos = tourModePos; } controller.nextPosition = startPos; } else { building.SetCurrentFloorInternalState(); var floorIndex = controller.saveTargetPositions[ViewMode.FirstPersonView].floorIndex; var slider = FindSingle().panel_floorcontrol; slider.ChangeValueFromOutside(floorIndex); } } public void ChangeViewWithFloorControl(Floor currentFloor, Vector3 pos) { var startPos = building.currentFloor.StartPoint.position; if (currentFloor.isEmptyFloor) { if (controller.viewMode.Equals(ViewMode.FirstPersonView)) { controller.SetViewMode(ViewMode.PerspectiveView); } } else { if (!currentFloor.FloorContainsPoint(controller.option.target.position)) { if (controller.viewMode.Equals(ViewMode.FirstPersonView)) { controller.nextPosition = startPos; } } } building.SetAllFloorExternalState(); if (!controller.option.isFirstPersonView) return; currentFloor.SetInternalState(); controller.LastPositioning(true); } }