111 lines
3.4 KiB
C#
111 lines
3.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using SHINT.UI;
|
|
using WI;
|
|
using UnityEngine.Rendering;
|
|
using System.Linq;
|
|
|
|
namespace SHINT
|
|
{
|
|
[DefaultExecutionOrder(int.MinValue+1)]
|
|
public class NameTagManager : MonoBehaviour, ISingle
|
|
{
|
|
UI_NameTag nameTag_Prefab;
|
|
public Camera cam;
|
|
|
|
List<UI_NameTag> nameTags = new();
|
|
List<Facility> facilities = new();
|
|
public float defaultNameHeight;
|
|
public float nameTagMaxScale;
|
|
public float nameTagMinScale;
|
|
|
|
public void GenerateNameTags(FacilityManager fm)
|
|
{
|
|
OrbitalController controller = FindSingle<OrbitalController>();
|
|
cam = controller.camera;
|
|
nameTag_Prefab = Resources.Load<UI_NameTag>("Prefabs/PRF_UI_NameTag");
|
|
|
|
facilities = fm.FacilityList();
|
|
|
|
foreach (Facility facility in facilities)
|
|
{
|
|
UI_NameTag newNameTag = Instantiate(nameTag_Prefab, transform);
|
|
nameTags.Add(newNameTag);
|
|
newNameTag.Initialize();
|
|
newNameTag.ShowData(facility);
|
|
newNameTag.isTagActivate = true;
|
|
facility.SetNameTag(newNameTag);
|
|
}
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
GraphicsSettings.transparencySortMode = TransparencySortMode.Perspective;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
SettingPos();
|
|
SettingScale();
|
|
SortbyCamera();
|
|
}
|
|
|
|
void SettingPos()
|
|
{
|
|
foreach (Facility facility in facilities)
|
|
{
|
|
Vector3 screenPos = cam.WorldToScreenPoint(new Vector3(facility.centerPos.x, facility.height + defaultNameHeight, facility.centerPos.z));
|
|
if (screenPos.z > 0)
|
|
{
|
|
facility.nameTag.transform.position = screenPos;
|
|
}
|
|
}
|
|
}
|
|
|
|
void SettingScale()
|
|
{
|
|
foreach (Facility facility in facilities)
|
|
{
|
|
float distance = Vector3.Distance(cam.transform.position, facility.centerPos);
|
|
float scale = Mathf.Clamp(6f / distance, nameTagMinScale, nameTagMaxScale);
|
|
facility.nameTag.myScale = scale;
|
|
if (facility.nameTag.isTagActivate)
|
|
{
|
|
facility.nameTag.transform.localScale = new Vector3(scale, scale, scale);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SortbyCamera()
|
|
{
|
|
//nameTags.Sort((a, b) => Vector3.Distance(a.transform.position, cam.transform.position)
|
|
// .CompareTo(Vector3.Distance(b.transform.position, cam.transform.position)));
|
|
|
|
//nameTags.Reverse();
|
|
|
|
nameTags = nameTags
|
|
.OrderByDescending(n => Vector3.Distance(n.transform.position, cam.transform.position)).ToList();
|
|
for (int i = 0; i < nameTags.Count; i++)
|
|
{
|
|
nameTags[i].transform.SetSiblingIndex(i);
|
|
}
|
|
}
|
|
|
|
public void ActiveNameTags_Animation()
|
|
{
|
|
foreach(UI_NameTag tags in nameTags)
|
|
{
|
|
tags.Activate_Animation();
|
|
}
|
|
}
|
|
public void ActiveNameTags_NonAnimation()
|
|
{
|
|
foreach (UI_NameTag tags in nameTags)
|
|
{
|
|
tags.Activate_NonAnimation();
|
|
}
|
|
}
|
|
}
|
|
}
|