Files
plugin-library/Assets/Main/Script/Runtime/HotUpdate/ZoneController.cs
2025-05-23 18:26:47 +08:00

124 lines
3.9 KiB
C#

using System;
using Stary.Evo;
using UnityEngine;
using UnityEngine.UI;
using YooAsset;
namespace Main
{
public class ZoneController : MonoBehaviour, IController
{
public ZoneType zoneType;
public BoxCollider ZoneCollider { get; set; }
public PointController[] PointControllerEntities { get; set; }
private IUnRegister _onTriggerEnterUnRegister;
private Image _image;
public async void Init(ZoneData zoneData)
{
name = zoneData.name;
zoneType = Enum.Parse<ZoneType>(name);
_image=transform.Find("Canvas/Image").GetComponent<Image>();
//根据数据设置zone 碰撞盒
transform.localPosition = zoneData.position;
transform.localRotation = Quaternion.Euler(zoneData.rotation);
transform.localScale = zoneData.scale;
ZoneCollider = this.transform.GetOrAddComponent<BoxCollider>();
_onTriggerEnterUnRegister = this.OnTriggerEnterEvent(OnZoneTriggerEnterEvent);
PointControllerEntities = new PointController[zoneData.pointDatas.Count];
var package = YooAssets.TryGetPackage("Main");
var spriteHandle = package.LoadAssetAsync<Sprite>($"Sprites_{zoneData.spriteName}" );
await spriteHandle.Task;
_image.sprite = spriteHandle.GetAssetObject<Sprite>();
_image.SetNativeSize();
var pointHandle = package.LoadAssetAsync<GameObject>(R.Res.Main.prefabs.guideball_point_prefab);
await pointHandle.Task;
for (int i = 0; i < zoneData.pointDatas.Count; i++)
{
PointData currentPointData = zoneData.pointDatas[i];
var pointGo = pointHandle.InstantiateSync(this.transform);
PointController pointController = pointGo.GetOrAddComponent<PointController>();
PointControllerEntities[i] = pointController;
pointController.Init(this, currentPointData);
this.GetSystem<IDigitalHuman>().AddPointData(new DigitalHumanPointData()
{
Name = zoneData.pointDatas[i].name,
pointTransform = pointGo.transform
});
}
// this.RegisterEvent(zoneType, OpenPoint);
}
public void OnZoneTriggerEnterEvent(Collider collider)
{
Debug.Log("OnZoneTriggerEnterEvent");
if (collider.gameObject.CompareTag("MainCamera"))
{
_onTriggerEnterUnRegister.UnRegister();
OpenPoint();
this.GetSystem<IZoneSystem>().OpenCurrentZone(this);
}
}
public void OpenPoint()
{
foreach (var controller in PointControllerEntities)
{
controller.gameObject.SetActive(true);
}
}
public void OpenPoint(PointController controller)
{
foreach (var controllerEntity in PointControllerEntities)
{
if (controllerEntity == controller)
{
controller.gameObject.SetActive(true);
}
else
{
controllerEntity.gameObject.SetActive(false);
}
}
}
public void ColsePoint()
{
foreach (var controller in PointControllerEntities)
{
controller.gameObject.SetActive(false);
}
}
public void OnZoneTriggerExitEvent(Collider collider)
{
}
public void OnPointTriggerEnterEvent(Collider collider)
{
}
public void OnPointTriggerExitEvent(Collider collider)
{
}
public IArchitecture GetArchitecture()
{
return MainArchitecture.Interface;
}
}
}