using System; using System.Collections; using System.Collections.Generic; using ET; using UnityEngine; namespace ET { public class TransPointComponentAwakeSystem : AwakeSystem { public override void Awake(TransPointComponent self) { self.Awake(); } } public class TransPointComponentDestroySystem : DestroySystem { public override void Destroy(TransPointComponent self) { self.Destroy(); } } public class TransPointComponent : Entity { public HashSet hash; public void Awake() { hash = new HashSet(); } public async ETTask Create(Scene zoneScene, int transIndex, int currSceneId, Vector2 pos) { long id = IdGenerater.Instance.GenerateId(); Unit unit = await UnitFactory.CreateTransPoint(zoneScene, id); unit.Position = new Vector3(pos.x, pos.y, 99); unit.AddComponent(transIndex, currSceneId); hash.Add(unit); } public async ETTask OnEnterTransPoint(Scene zoneScene, Collider2D collider, long Id) { if (collider.CompareTag("Player")) { if (!(collider.gameObject.GetComponent().Component is UnitView unitView) || !(unitView.Parent is Unit unit) || unit.Id != zoneScene.GetComponent().MyId || !unit.IsLeader) return; unit = zoneScene.GetComponent().MyUnit; switch (unit.state) { case Unit.State.Idle: break; case Unit.State.Move: MoveComponent moveComponent = unit.GetComponent(); moveComponent.Stop(); unit.state = Unit.State.Trans; break; case Unit.State.Battle: return; case Unit.State.Trans: return; } foreach (Unit item in hash) { if (item.GetComponent().Id == Id) { await item.GetComponent().OnEnter(zoneScene, collider); } } } } public void RemoveAll() { var zoneScene = this.ZoneScene(); foreach (Unit unit in hash) { zoneScene.GetComponent().Remove(unit); } hash.Clear(); } public void Destroy() { RemoveAll(); hash = null; } } }