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 onClickFacility; //public event Action onEnterFacility; //public event Action onStayFacility; //public event Action onExitFacility; //public event Action onDoubleClickFacility; public float assemblyDistance; public float injectionDistance; Facility[] facilities; OrbitalController orbitalController; public override void AfterAwake() { facilities = FindObjectsOfType(); var raycaster = FindSingle(); 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(); } 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().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(); } } } } }