zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Hotfix/Game/Event/ChangeMapEvent.cs

78 lines
2.6 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using Cal.DataTable;
using System;
using System.Collections.Generic;
using System.Text;
namespace ET
{
public class ChangeMapEvent : AEvent<EventType.ChangeMap>
{
public override async ETTask Run(EventType.ChangeMap args)
{
try
{
Unit unit = args.unit;
int mapId = args.mapId;
if (!unit.IsTeamLeader)
{
MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "您不是队长,无法传送" });
return;
}
UnitScene _unitScene = unit.GetComponent<UnitScene>();
var targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(mapId / 100);
var position = targetSceneInfo.PlayerPosArr[0];
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
if (team == null)
{
Log.Error(" team == null");
return;
}
team.ChangeState(TeamState.Transfer);
using var listComponent = ListComponent<ETTask>.Create();
var teamList = team.GetUnits();
foreach (var item in teamList)
{
listComponent.List.Add( Transfer(item,new UnityEngine.Vector2(position.PlayerPos_x, position.PlayerPos_y),mapId));
}
static async ETTask Transfer(Unit item,UnityEngine.Vector2 pos,int mapId)
{
try
{
item.IsTransfer = true;
UnitScene unitScene = item.GetComponent<UnitScene>();
unitScene.enterTime = TimeHelper.ClientNow();
//!停止移动
item.Stop();
await TimerComponent.Instance.WaitAsync(500);
unitScene.Position = pos;
await MapSceneComponent.Instance.ChangeMap(unitScene, mapId);
}
catch (Exception e)
{
Log.Error(e);
}
}
await ETTaskHelper.WaitAll(listComponent.List);
await TimerComponent.Instance.WaitAsync(1000);
team.ChangeState(TeamState.None);
foreach (var u in teamList)
{
u.IsTransfer = false;
}
TeamHelper.SendTeamMember(team);
}
catch (Exception e)
{
Log.Error(e);
}
}
}
}