This repository has been archived on 2026-01-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
SH-INT/Assets/Scripts/InteractionManager.cs
정영민 f4cf556cde update
2025-02-20 10:30:18 +09:00

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();
}
}
}
}
}