using Cal.DataTable; using System; using System.Collections.Generic; namespace ET { public class ManulEquipMapAwakeSystem : AwakeSystem { public override void Awake(ManulEquipMap self) { ManulEquipMap.instance = self; } } public static class ManulEquipMapSystem { public static bool CanEnterMap(this ManulEquipMap self, PlayerData data, int targetMapId) { int layer = targetMapId % 100; if (layer != 1) { return data.currManulEquipMapLayer == layer; } return true; } public static async ETTask EnterMap(this ManulEquipMap self, PlayerData data, int targetMapId) { int layer = targetMapId % 100; if (layer == 1) { data.currManulEquipMapLayer = 1; UnitHelper.SaveComponenet(data).Coroutine(); } await GenerateMonster(self, data.Id, targetMapId / 100, layer); } private static async ETTask GenerateMonster(ManulEquipMap self, long uid, int sceneId, int layer) { try { int difficulty = sceneId switch { Sys_SceneId.Scene_ManulEquip1 => 1, Sys_SceneId.Scene_ManulEquip2 => 2, Sys_SceneId.Scene_ManulEquip3 => 3, _ => throw new Exception($"sceneId is invalid where id = {sceneId}") }; int id = difficulty * 1000 + layer * 100 + 1; MapMonsterConfig mapMonsterConfig =MapMonsterConfigCategory.Instance.Get( MapMonsterConfigCategory.Instance.GetManulEquipId(layer)); Unit unit = EntityFactory.CreateWithParent(self, UnitType.MapMonster); unit.AddComponent().configId = id; UnitScene unitScene = unit.AddComponent(); unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y); if (self.mapUnitDic.TryGetValue(uid, out var _unit)) { await Game.EventSystem.Publish(new ET.EventType.OnDisposeUnit { Actor_UnitId = uid, unitId = _unit.Id }); _unit.Dispose(); } self.mapUnitDic[uid] = unit; Game.EventSystem.Publish(new ET.EventType.OnCreateUnit { Actor_UnitId = uid, unit = unit, pos = unitScene.Position, configId = (int)mapMonsterConfig.Id, monsterType = ET.MapMonsterType.ManulEquip }).Coroutine(); } catch (Exception e) { Log.Error(e); } } public static void SetLayer(this ManulEquipMap self, PlayerData data, long configId) { try { int layer = (int)(configId % 1000 / 100); data.currManulEquipMapLayer = ++layer; UnitHelper.SaveComponenet(data).Coroutine(); } catch (Exception e) { Log.Error(e); } } public static void DestoryUnit(this ManulEquipMap self,long uid) { if (self.mapUnitDic.TryGetValue(uid, out var _unit)) { Game.EventSystem.Publish(new ET.EventType.OnDisposeUnit { Actor_UnitId = uid, unitId = _unit.Id }).Coroutine(); _unit.Dispose(); } self.mapUnitDic.Remove(uid); } } }