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(name); _image=transform.Find("Canvas/Image").GetComponent(); //根据数据设置zone 碰撞盒 transform.localPosition = zoneData.position; transform.localRotation = Quaternion.Euler(zoneData.rotation); transform.localScale = zoneData.scale; ZoneCollider = this.transform.GetOrAddComponent(); _onTriggerEnterUnRegister = this.OnTriggerEnterEvent(OnZoneTriggerEnterEvent); PointControllerEntities = new PointController[zoneData.pointDatas.Count]; var package = YooAssets.TryGetPackage("Main"); var spriteHandle = package.LoadAssetAsync($"Sprites_{zoneData.spriteName}" ); await spriteHandle.Task; _image.sprite = spriteHandle.GetAssetObject(); _image.SetNativeSize(); var pointHandle = package.LoadAssetAsync(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(); PointControllerEntities[i] = pointController; pointController.Init(this, currentPointData); this.GetSystem().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().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; } } }