去掉飞行时间,飞行距离,姿态计算和更新,提高效率

碰撞检测改为异步提示
修改任务无法停止的bug
This commit is contained in:
xu 2020-01-28 22:45:08 +08:00
parent 1308b31717
commit d1a0283dad
2 changed files with 24 additions and 14 deletions

View File

@ -179,6 +179,7 @@ namespace Plane.Copters
public CopterImplSharedPart(SynchronizationContext uiSyncContext) : base(uiSyncContext) public CopterImplSharedPart(SynchronizationContext uiSyncContext) : base(uiSyncContext)
{ {
PropertyChanged += CopterImplSharedPart_PropertyChanged; PropertyChanged += CopterImplSharedPart_PropertyChanged;
/*
Task.Run(async () => Task.Run(async () =>
{ {
while (true) while (true)
@ -230,7 +231,9 @@ namespace Plane.Copters
await Task.Delay(5000).ConfigureAwait(false); await Task.Delay(5000).ConfigureAwait(false);
} }
} }
}); });
*/
} }
public event EventHandler AltitudeChanged; public event EventHandler AltitudeChanged;

View File

@ -137,16 +137,13 @@ namespace Plane.Copters
_scaledFastMaxMoveInInterval = MAX_MOVE_IN_INTERVAL_FAST * _speedScale; _scaledFastMaxMoveInInterval = MAX_MOVE_IN_INTERVAL_FAST * _speedScale;
this.Connection = connection ?? EmptyConnection.Instance; this.Connection = connection ?? EmptyConnection.Instance;
_isRunning = true;
// 持续计算并更新虚拟飞行器的状态。 // 持续计算并更新虚拟飞行器的状态。
Task.Run(async () => Task.Run(async () =>
{ {
while (true) while (_isRunning)
{ {
if (_isRunning) Update();
{
Update();
}
await TaskUtils.Delay(UPDATE_INTERVAL).ConfigureAwait(false); await TaskUtils.Delay(UPDATE_INTERVAL).ConfigureAwait(false);
} }
}); });
@ -424,11 +421,15 @@ namespace Plane.Copters
protected override void UpdateFlightDataIfNeeded() protected override void UpdateFlightDataIfNeeded()
{ {
//计算飞机距离,没必要
/*
if (!TakeOffPoint.IsNullOrEmpty()) if (!TakeOffPoint.IsNullOrEmpty())
{ {
FlightDistance = TakeOffPoint.CalcDistance(this); FlightDistance = TakeOffPoint.CalcDistance(this);
FlightDistance2D = TakeOffPoint.CalcDistance2D(this); FlightDistance2D = TakeOffPoint.CalcDistance2D(this);
} }
if (FlightTimeSpan.TotalSeconds > 0) if (FlightTimeSpan.TotalSeconds > 0)
{ {
if (_lastCalcSpeedPoint.IsNullOrEmpty()) if (_lastCalcSpeedPoint.IsNullOrEmpty())
@ -457,6 +458,7 @@ namespace Plane.Copters
} }
} }
} }
*/
} }
private void MoveToPointImmediately(double lat, double lng, float alt) private void MoveToPointImmediately(double lat, double lng, float alt)
@ -520,7 +522,8 @@ namespace Plane.Copters
case FlightMode.GUIDED: case FlightMode.GUIDED:
// 林俊清, 20160317, 指点时也能体感控制若干通道。 // 林俊清, 20160317, 指点时也能体感控制若干通道。
UpdateWithChannels(); //考虑不更新这个,好像没必要-xu
//UpdateWithChannels();
UpdateWithDestination(_targetLat, _targetLng, _targetAlt); UpdateWithDestination(_targetLat, _targetLng, _targetAlt);
break; break;
@ -590,11 +593,14 @@ namespace Plane.Copters
} }
_uiSyncContext.Post(() => _uiSyncContext.Post(() =>
{ {
//位置变化需要在UI刷新
RaiseLocationChangedIfNeeded(); RaiseLocationChangedIfNeeded();
RaiseAltitudeChangedIfNeeded(); //高度变化需要在UI刷新
// RaiseAltitudeChangedIfNeeded();
RaiseDataStreamReceived(PDataStreamType.GPS_RAW_INT); //GPS数据用于显示
RaiseAttitudeChanged(); // RaiseDataStreamReceived(PDataStreamType.GPS_RAW_INT);
//不考虑姿态
// RaiseAttitudeChanged();
}); });
} }
@ -690,9 +696,10 @@ namespace Plane.Copters
} }
else else
{ {
var directionDelta = direction - Heading.DegToRad(); //不用更新姿态-xu
Roll = MAX_TILT_IN_FLIGHT * (float)Math.Sin(directionDelta); //var directionDelta = direction - Heading.DegToRad();
Pitch = MAX_TILT_IN_FLIGHT * (float)Math.Cos(directionDelta); // Roll = MAX_TILT_IN_FLIGHT * (float)Math.Sin(directionDelta);
// Pitch = MAX_TILT_IN_FLIGHT * (float)Math.Cos(directionDelta);
} }
// 水平面上的移动距离。 // 水平面上的移动距离。