| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System.Collections.Generic;
- using System.Threading;
- using UnityEngine;
- namespace ET
- {
- public class UnitPathComponent : Entity
- {
- public List<Vector3> Path = new List<Vector3>();
- public Vector3 ServerPos;
- public CancellationTokenSource CancellationTokenSource;
-
- public async ETTask StartMove(CancellationToken cancellationToken)
- {
- for (int i = 0; i < this.Path.Count; ++i)
- {
- Vector3 v = this.Path[i];
- float speed = 5;
- if (i == 0)
- {
- // 矫正移动速度
- Vector3 clientPos = this.GetParent<Unit>().Position;
- float serverf = (ServerPos - v).magnitude;
- if (serverf > 0.1f)
- {
- float clientf = (clientPos - v).magnitude;
- speed = clientf / serverf * speed;
- }
- }
- this.Parent.GetComponent<TurnComponent>().Turn(v);
- await this.Parent.GetComponent<MoveComponent>().MoveToAsync(v, speed, cancellationToken);
- }
- }
- public async ETVoid StartMove(M2C_PathfindingResult message)
- {
- // 取消之前的移动协程
- this.CancellationTokenSource?.Cancel();
- this.CancellationTokenSource = new CancellationTokenSource();
- this.Path.Clear();
- for (int i = 0; i < message.Xs.Count; ++i)
- {
- this.Path.Add(new Vector3(message.Xs[i], message.Ys[i], message.Zs[i]));
- }
- ServerPos = new Vector3(message.X, message.Y, message.Z);
-
- await StartMove(this.CancellationTokenSource.Token);
- this.CancellationTokenSource.Dispose();
- this.CancellationTokenSource = null;
- }
- }
- }
|