85 lines
3.0 KiB
C#
Executable File
85 lines
3.0 KiB
C#
Executable File
using Cal.DataTable;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace ET
|
|
{
|
|
public class BackHomeEvent: AEvent<EventType.BackMainCity>
|
|
{
|
|
public override async ETTask Run(EventType.BackMainCity args)
|
|
{
|
|
Unit unit = args.unit;
|
|
if (!unit.IsTeamLeader)
|
|
{
|
|
MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "您不是队长,无法回城" });
|
|
return;
|
|
}
|
|
|
|
bool isInCity = unit.GetComponent<UnitScene>().MapId / 100 == Sys_SceneId.Scene_MainCity;
|
|
if (isInCity)
|
|
return;
|
|
Sys_Scene targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(Sys_SceneId.Scene_MainCity);
|
|
Sys_Scene.PlayerPos position = targetSceneInfo.PlayerPosArr[0];
|
|
|
|
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
|
|
if (team == null)
|
|
{
|
|
Log.Error(" team == null");
|
|
return;
|
|
}
|
|
|
|
if (!args.isForce)
|
|
{
|
|
PlayerData data = unit.GetComponent<PlayerData>();
|
|
if (team.TeamState == TeamState.Fight || data.IsBattleIdle)
|
|
{
|
|
MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "战斗中,无法回城" });
|
|
return;
|
|
}
|
|
}
|
|
|
|
team.ChangeState(TeamState.Transfer);
|
|
using ListComponent<ETTask> listComponent = ListComponent<ETTask>.Create();
|
|
LinkedList<Unit> teamList = team.GetUnits();
|
|
foreach (Unit item in teamList)
|
|
{
|
|
listComponent.List.Add(Transfer(item, new UnityEngine.Vector2(position.PlayerPos_x, position.PlayerPos_y),
|
|
Sys_SceneId.Scene_MainCity * 100 + 1, isInCity));
|
|
}
|
|
|
|
static async ETTask Transfer(Unit item, UnityEngine.Vector2 pos, int mapId, bool isInCity)
|
|
{
|
|
try
|
|
{
|
|
item.IsTransfer = true;
|
|
//!停止移动
|
|
item.Stop();
|
|
long itemInsatnceId = item.InstanceId;
|
|
await TimerComponent.Instance.WaitAsync(100);
|
|
if (item.InstanceId != itemInsatnceId)
|
|
return;
|
|
UnitScene unitScene = item.GetComponent<UnitScene>();
|
|
unitScene.Position = pos;
|
|
if (isInCity) return;
|
|
|
|
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 (Unit u in teamList)
|
|
{
|
|
u.IsTransfer = false;
|
|
}
|
|
|
|
TeamHelper.SendTeamMember(team);
|
|
}
|
|
}
|
|
} |