106 lines
3.8 KiB
C#
106 lines
3.8 KiB
C#
using Cal.DataTable;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ET
|
|
{
|
|
public class ManulEquipMapAwakeSystem : AwakeSystem<ManulEquipMap>
|
|
{
|
|
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<Unit, UnitType>(self, UnitType.MapMonster);
|
|
unit.AddComponent<ConfigIdComponent>().configId = id;
|
|
UnitScene unitScene = unit.AddComponent<UnitScene>();
|
|
unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y);
|
|
if (self.mapUnitDic.TryGetValue(uid, out Unit _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 Unit _unit))
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.OnDisposeUnit
|
|
{
|
|
Actor_UnitId = uid,
|
|
unitId = _unit.Id
|
|
}).Coroutine();
|
|
_unit.Dispose();
|
|
}
|
|
self.mapUnitDic.Remove(uid);
|
|
}
|
|
}
|
|
}
|