diff --git a/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs b/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs index 43c88fc..c8dcdf4 100644 --- a/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs +++ b/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs @@ -153,5 +153,9 @@ namespace Plane.Copters Task DoCommandAckAsync(ushort command, byte result); + + //强制刷新位置 + void RefreashLoc(); + } } diff --git a/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs b/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs index ef68b6e..3c52310 100644 --- a/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs +++ b/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs @@ -723,7 +723,11 @@ namespace Plane.Copters public string LEDColor { get { return _LEDColor; } - set { Set(nameof(LEDColor), ref _LEDColor, value); } + set { + if (Set(nameof(LEDColor), ref _LEDColor, value)) + //强制刷新颜色--在刷新位置时才刷新颜色 + RefreashLoc(); + } } #if PRIVATE @@ -1131,14 +1135,33 @@ namespace Plane.Copters protected void RaiseLocationChanged() => LocationChanged?.Invoke(this, EventArgs.Empty); - protected void RaiseLocationChangedIfNeeded() + public void RefreashLoc() { - if (_lastChangedLocation == null || this.CalcDistance(_lastChangedLocation) >= 0.5 || DateTime.Now.AddMilliseconds(-500) >= _lastRaiseLocationChangedTime) + RaiseLocationChangedIfNeeded(true); + } + + protected void RaiseLocationChangedIfNeeded(bool forcemk=false) + { + //强制刷新位置 + if (forcemk) + { + RaiseLocationChanged(); + return; + } + //减少计算量,在模拟飞机很多时花时间 + bool EnRaise = true; + if (_lastChangedLocation != null) + EnRaise = (Altitude != _lastChangedLocation.Altitude) || + (Latitude != _lastChangedLocation.Latitude) || + (Longitude != _lastChangedLocation.Longitude); + //if (_lastChangedLocation == null || this.CalcDistance(_lastChangedLocation) >= 0.5 || DateTime.Now.AddMilliseconds(-500) >= _lastRaiseLocationChangedTime) + if (EnRaise) { RaiseLocationChanged(); _lastChangedLocation = new PLLocation(this); _lastRaiseLocationChangedTime = DateTime.Now; } + } protected void RaiseMissionItemReceived(MissionItemReceivedEventArgs e) diff --git a/PlaneGcsSdk_Shared/Copters/FakeCopter.cs b/PlaneGcsSdk_Shared/Copters/FakeCopter.cs index f953a14..63f853c 100644 --- a/PlaneGcsSdk_Shared/Copters/FakeCopter.cs +++ b/PlaneGcsSdk_Shared/Copters/FakeCopter.cs @@ -32,7 +32,7 @@ namespace Plane.Copters /// /// 更新虚拟飞行器状态的时间间隔,单位为毫秒。 /// - private const int UPDATE_INTERVAL = 150; //150可以跑1000架 100可以跑500架 + private const int UPDATE_INTERVAL = 50; //150可以跑1000架 100可以跑500架 /// /// 对飞行器的模拟是否正在运行。