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