92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using Cysharp.Threading.Tasks;
|
||
using Main;
|
||
using Stary.Evo;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
|
||
namespace Main
|
||
{
|
||
public class PointController : MonoBehaviour
|
||
{
|
||
public string pointType;
|
||
public bool isTigger;
|
||
public ZoneController ZoneController;
|
||
private MeshCollider collider;
|
||
private IUnRegister _onTriggerEnterUnRegister;
|
||
|
||
public Action<Collider> OnColliderEnter;
|
||
|
||
public async void Init(ZoneController ZoneController, PointData pointData)
|
||
{
|
||
this.gameObject.SetActive(false);
|
||
this.ZoneController = ZoneController;
|
||
var titleMesh = this.transform.Find("Title").GetComponent<TextMeshPro>();
|
||
titleMesh.text = pointData.name;
|
||
var numMesh = titleMesh.transform.Find("Num").GetComponent<TextMeshPro>();
|
||
numMesh.text = ConvertToCircledNumber(pointData.order);
|
||
name = pointData.id;
|
||
isTigger = pointData.isTigger;
|
||
pointType = pointData.id;
|
||
//根据数据设置zone 碰撞盒
|
||
transform.localPosition = pointData.colliderData.position;
|
||
transform.localRotation = Quaternion.Euler(pointData.colliderData.rotation);
|
||
transform.localScale = pointData.colliderData.scale;
|
||
collider = transform.Find("collisionbox").GetComponent<MeshCollider>();
|
||
collider.transform.localPosition = pointData.colliderData.colPosition;
|
||
collider.transform.localRotation = Quaternion.Euler(pointData.colliderData.colRotation);
|
||
collider.transform.localScale = pointData.colliderData.colScale;
|
||
if (PointCloudService.GetService<IZoneData>().IsGizmo())
|
||
{
|
||
collider.GetOrAddComponent<MeshColliderGizmo>();
|
||
}
|
||
|
||
_onTriggerEnterUnRegister = collider.OnTriggerEnterEvent(OnPointTriggerEnterEvent);
|
||
}
|
||
|
||
|
||
public void OnPointTriggerEnterEvent(Collider collider)
|
||
{
|
||
if (!isTigger)
|
||
return;
|
||
if (PointCloudService.GetService<IZoneSystem>().CurrentPointType == pointType)
|
||
return;
|
||
|
||
if (collider.gameObject.CompareTag("GameController"))
|
||
{
|
||
if (ZoneController != null)
|
||
{
|
||
//隐藏当前点,显示其余点
|
||
ZoneController.CurrentPointActiveHideOrShow(this, false);
|
||
}
|
||
else
|
||
{
|
||
this.gameObject.SetActive(false);
|
||
}
|
||
|
||
|
||
PointCloudService.GetService<IZoneSystem>().OpenDomain(this.name);
|
||
|
||
OnColliderEnter?.Invoke(collider);
|
||
|
||
PointCloudService.GetService<IZoneSystem>().CurrentPointType = pointType;
|
||
Debug.Log($"【{name}】OnPointTriggerEnterEvent");
|
||
}
|
||
}
|
||
|
||
|
||
private static string ConvertToCircledNumber(int number)
|
||
{
|
||
// 检查数字是否在1-20范围内
|
||
if (number < 1 || number > 20)
|
||
{
|
||
return number.ToString(); // 超出范围则返回原数字
|
||
}
|
||
|
||
// Unicode中①对应的编码是0x2460,依次递增
|
||
char circledChar = (char)(0x2460 + number - 1);
|
||
return circledChar.ToString();
|
||
}
|
||
}
|
||
} |