106 lines
3.3 KiB
C#
106 lines
3.3 KiB
C#
using SHINT.UI;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using WI;
|
|
|
|
namespace SHINT
|
|
{
|
|
public class InteractionManager : MonoBehaviour, ISingle
|
|
{
|
|
//public event Action<Facility> onClickFacility;
|
|
//public event Action<Facility> onEnterFacility;
|
|
//public event Action<Facility> onStayFacility;
|
|
//public event Action<Facility> onExitFacility;
|
|
//public event Action<Facility> onDoubleClickFacility;
|
|
|
|
public float assemblyDistance;
|
|
public float injectionDistance;
|
|
|
|
Facility[] facilities;
|
|
OrbitalController orbitalController;
|
|
|
|
public override void AfterAwake()
|
|
{
|
|
facilities = FindObjectsOfType<Facility>();
|
|
var raycaster = FindSingle<Raycaster>();
|
|
var facilityType = typeof(Facility);
|
|
raycaster.AddTypeLayer(facilityType);
|
|
raycaster.AddFirstEnter(facilityType, (h, c) => OnEnterFacility(c as Facility));
|
|
//raycaster.AddFirstClick(facilityType, (h, c) => onClickFacility.Invoke(c as Facility));
|
|
raycaster.AddFirstExit(facilityType, (h, c) => OnExitFacility(c as Facility));
|
|
//raycaster.AddFirstStay(facilityType, (h, c) => onStayFacility.Invoke(c as Facility));
|
|
raycaster.AddDoubleClickEvent(facilityType, (h, c) => FacilityFocusing(c as Facility));
|
|
|
|
orbitalController = FindSingle<OrbitalController>();
|
|
}
|
|
|
|
public void OnEnterFacility(Facility f)
|
|
{
|
|
if (f.so == null)
|
|
return;
|
|
f.so.Upscale();
|
|
}
|
|
|
|
public void OnExitFacility(Facility f)
|
|
{
|
|
if (f.so == null)
|
|
return;
|
|
f.so.DownScale();
|
|
}
|
|
|
|
public void FacilityFocusing(Facility f)
|
|
{
|
|
if (f.info == null)
|
|
return;
|
|
|
|
switch (f.info.buildingType)
|
|
{
|
|
case BuildingType.Injection:
|
|
InjectionCameraMove(f.centerPos + f.adjustCameraTargetPos);
|
|
break;
|
|
|
|
case BuildingType.Assembly:
|
|
AssemblyCameraMove(f.centerPos + f.adjustCameraTargetPos);
|
|
break;
|
|
}
|
|
FindSingle<UI_Topbar>().FacilityListChange(f);
|
|
OnNameTag(f);
|
|
}
|
|
|
|
void InjectionCameraMove(Vector3 facilityPos)
|
|
{
|
|
var pos = new Vector3(facilityPos.x, 0, facilityPos.z);
|
|
var distance = injectionDistance + facilityPos.y;
|
|
var elevation = 45f;
|
|
var azimuth = 60f;
|
|
|
|
orbitalController.SmoothMove(pos, distance, elevation, azimuth);
|
|
}
|
|
|
|
void AssemblyCameraMove(Vector3 facilityPos)
|
|
{
|
|
var pos = new Vector3(facilityPos.x, 0, facilityPos.z);
|
|
var distance = assemblyDistance + facilityPos.y;
|
|
var elevation = 45f;
|
|
var azimuth = 330f;
|
|
orbitalController.SmoothMove(pos,distance,elevation,azimuth);
|
|
}
|
|
void OnNameTag(Facility facility)
|
|
{
|
|
foreach (var f in facilities)
|
|
{
|
|
f.nameTag.Deactivate();
|
|
|
|
if (facility.Equals(f))
|
|
{
|
|
f.nameTag.Activate_Animation();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|