142 lines
4.5 KiB
C#
142 lines
4.5 KiB
C#
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<Building>();
|
|
controller = FindSingle<OrbitalController>();
|
|
}
|
|
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<Canvas_Right>().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<Canvas_Right>().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<Canvas_Right>().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);
|
|
}
|
|
}
|