CTT/Server/Hotfix/Game/System/Map/ManulEquipMapSystem.cs

106 lines
3.8 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
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 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);
}
}
}