Files
ChunilENG/Assets/Scripts/Building.cs

119 lines
3.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using UnityEngine;
using WI;
namespace CHN
{
public class Building : MonoBehaviour, ISingle
{
OrbitalController controller;
public List<Floor> floors = new List<Floor>();
public Floor currentFloor;
public Action<int> onSettingBuildingComplete;
public override void AfterAwake()
{
controller = FindSingle<OrbitalController>();
FindAllFloors();
var topFloorIndex = floors.Count - 1;
currentFloor = floors[topFloorIndex];
onSettingBuildingComplete?.Invoke(topFloorIndex);
SetAllFloorExternalState();
}
void FindAllFloors()
{
var childCount = transform.childCount;
for (int i = 0; i < childCount; ++i)
{
var child = transform.GetChild(i);
if (child.TryGetComponent<Floor>(out var floor))
{
floors.Add(floor);
floor.floorIndex = i;
}
}
}
public void UnderCeilingControl(Vector3 value)
{
currentFloor.UnderCeilingControl(value);
}
public void SetTopFloor(int index)
{
for (int i = 0; i < floors.Count; ++i)
{
bool bottom = i <= index;
floors[i].gameObject.SetActive(bottom);
}
currentFloor = floors[index];
var pos = controller.option.target.position;
pos.y = currentFloor.StartPoint.position.y;
controller.SetTargetPos(pos);
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.SetViewMode(ViewMode.PerspectiveView);
}
}
}
SetAllFloorExternalState();
if (!controller.option.isFirstPersonView)
return;
currentFloor.SetInternalState();
}
public Floor GetFloor(int index)
{
currentFloor = floors[index];
return floors[index];
}
public void SetCurrentFloorInternalState()
{
SetAllFloorExternalState();
currentFloor.SetInternalState();
}
public void SetAllFloorExternalState()
{
foreach (Floor floor in floors)
{
floor.SetExternalState();
}
currentFloor.TopSurfaces.SetActive(true);
}
}
}