Files
ChunilENG/Assets/WorkSpace/Personal/JYM/ViewManager.cs
2025-04-09 14:41:40 +09:00

133 lines
4.0 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;
controller.SetViewMode(mode);
switch (mode)
{
case ViewMode.PerspectiveView:
SetPerPerspectiveView();
break;
case ViewMode.TopView:
SetTopView();
break;
case ViewMode.FirstPersonView:
SetFirstPersonView(preViewMode);
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)
{
if (building.currentFloor.isEmptyFloor)
{
controller.SetViewMode(preViewMode);
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);
}
}