Files
TEngine/Assets/GameScripts/DotNet/Hotfix/Server/Demo/Map/Move/MoveHelper.cs
ALEXTANG 336d4b2eb9 [+] 接入ET8服务端
[+] 接入ET8服务端
2023-07-13 12:23:48 +08:00

58 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using Unity.Mathematics;
namespace ET.Server
{
public static partial class MoveHelper
{
// 可以多次调用,多次调用的话会取消上一次的协程
public static async ETTask FindPathMoveToAsync(this Unit unit, float3 target)
{
float speed = unit.GetComponent<NumericComponent>().GetAsFloat(NumericType.Speed);
if (speed < 0.01)
{
unit.SendStop(2);
return;
}
M2C_PathfindingResult m2CPathfindingResult = new();
unit.GetComponent<PathfindingComponent>().Find(unit.Position, target, m2CPathfindingResult.Points);
if (m2CPathfindingResult.Points.Count < 2)
{
unit.SendStop(3);
return;
}
// 广播寻路路径
m2CPathfindingResult.Id = unit.Id;
MessageHelper.Broadcast(unit, m2CPathfindingResult);
MoveComponent moveComponent = unit.GetComponent<MoveComponent>();
bool ret = await moveComponent.MoveToAsync(m2CPathfindingResult.Points, speed);
if (ret) // 如果返回false说明被其它移动取消了这时候不需要通知客户端stop
{
unit.SendStop(0);
}
}
public static void Stop(this Unit unit, int error)
{
unit.GetComponent<MoveComponent>().Stop(error == 0);
unit.SendStop(error);
}
// error: 0表示协程走完正常停止
public static void SendStop(this Unit unit, int error)
{
MessageHelper.Broadcast(unit, new M2C_Stop()
{
Error = error,
Id = unit.Id,
Position = unit.Position,
Rotation = unit.Rotation,
});
}
}
}