1.去掉交叉检测,这可能导致整个编队停主无法继续组队,前面飞机没到位后面就没法飞,如果后面要加,需要多测试解决前序飞机可靠到达和记录日志确认是这里导致任务暂定

2.修改悬停任务时不能下一步的bug
This commit is contained in:
pxzleo 2017-09-17 12:50:17 +08:00
parent f09fadd475
commit a5271518e5
2 changed files with 65 additions and 15 deletions

View File

@ -11,7 +11,8 @@ namespace Plane.FormationCreator.Formation
{ {
public partial class FlightTask public partial class FlightTask
{ {
private bool _StaggerRoutes = true; //默认不开这个功能
private bool _StaggerRoutes = false;
//是否有交错 //是否有交错
public bool StaggerRoutes public bool StaggerRoutes
@ -55,6 +56,18 @@ namespace Plane.FormationCreator.Formation
var tasks = new Task[infos.Count]; var tasks = new Task[infos.Count];
for (int i = 0; i < infos.Count; i++) for (int i = 0; i < infos.Count; i++)
{ {
var info = infos[i];
tasks[i] = await Task.Factory.StartNew(async () =>
{
var internalInfo = info;
await FlyToTaskFlySingleCopterAsync(internalInfo);
});
/*
//检测交叉可能导致整个编队停主无法继续组队,前面飞机没到位后面就没法飞
//如果后面要加,需要多测试解决前序飞机可靠到达和记录日志确认是这里导致任务暂定
var info = infos[i]; var info = infos[i];
var copter = info.Copter; var copter = info.Copter;
var i1 = i; var i1 = i;
@ -72,6 +85,7 @@ namespace Plane.FormationCreator.Formation
} }
await FlyToTaskFlySingleCopterAsync(info); await FlyToTaskFlySingleCopterAsync(info);
}); });
*/
} }
await Task.WhenAll(tasks).ConfigureAwait(false); await Task.WhenAll(tasks).ConfigureAwait(false);

View File

@ -27,9 +27,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand5 ?? (_NumberCommand5 = new RelayCommand<double>(async => return _NumberCommand5 ?? (_NumberCommand5 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numberfive); await LEDNumberAsync(numberfive);
})); }));
} }
} }
@ -39,9 +39,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand4 ?? (_NumberCommand4 = new RelayCommand<double>(async => return _NumberCommand4 ?? (_NumberCommand4 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numberFour); await LEDNumberAsync(numberFour);
})); }));
} }
} }
@ -50,9 +50,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand3 ?? (_NumberCommand3 = new RelayCommand<double>(async => return _NumberCommand3 ?? (_NumberCommand3 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numberthree); await LEDNumberAsync(numberthree);
})); }));
} }
} }
@ -61,9 +61,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand2 ?? (_NumberCommand2 = new RelayCommand<double>(async => return _NumberCommand2 ?? (_NumberCommand2 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numbertwo); await LEDNumberAsync(numbertwo);
})); }));
} }
} }
@ -72,9 +72,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand1 ?? (_NumberCommand1 = new RelayCommand<double>(async => return _NumberCommand1 ?? (_NumberCommand1 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numberone); await LEDNumberAsync(numberone);
})); }));
} }
} }
@ -83,9 +83,17 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommand0 ?? (_NumberCommand0 = new RelayCommand<double>(async => return _NumberCommand0 ?? (_NumberCommand0 = new RelayCommand<double>(async param =>
{ {
LEDNumberAsync(numberzero); await LEDNumberAsync(numberzero);
await Task.Delay(200).ConfigureAwait(false);
await LEDNumberFlashAsync(false);
await Task.Delay(200).ConfigureAwait(false);
await LEDNumberAsync(numberzero);
await Task.Delay(200).ConfigureAwait(false);
await LEDNumberFlashAsync(false);
await Task.Delay(200).ConfigureAwait(false);
await LEDNumberAsync(numberzero);
})); }));
} }
} }
@ -96,8 +104,9 @@ namespace Plane.FormationCreator.Formation
{ {
get get
{ {
return _NumberCommandok ?? (_NumberCommandok = new RelayCommand<double>(async => return _NumberCommandok ?? (_NumberCommandok = new RelayCommand<double>(async param =>
{ {
await LEDNumberFlashAsync(true);
numberisend = true; numberisend = true;
})); }));
} }
@ -398,7 +407,29 @@ namespace Plane.FormationCreator.Formation
// LED灯全亮 // LED灯全亮
await Task.WhenAll(SingleCopterInfos.Select(info => LEDFlashTaskFlySingleCopterAsync(info, true))); await Task.WhenAll(SingleCopterInfos.Select(info => LEDFlashTaskFlySingleCopterAsync(info, true)));
//延时等待 //延时等待
await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false);
//判断是否下一步
DateTime start = DateTime.Now;
while (true)
{
if (_flightTaskManager.IsPaused == true)
{
await Task.WhenAll(SingleCopterInfos.Select(info => (info.Copter.HoverAsync())));
return;
}
DateTime end = DateTime.Now;
TimeSpan ts = end - start;
//等待指定时间
if (ts.TotalMilliseconds> LoiterTimeAttr* 1000)
return;
await Task.Delay(20).ConfigureAwait(false);
}
} }
else if (numberShow) // LED数字倒计时目前固定需要13架飞机并且在跑马灯\数字顺序里设置13架飞机的顺序 else if (numberShow) // LED数字倒计时目前固定需要13架飞机并且在跑马灯\数字顺序里设置13架飞机的顺序
@ -420,6 +451,11 @@ namespace Plane.FormationCreator.Formation
//判断是否下一步 //判断是否下一步
while (! numberisend) while (! numberisend)
{ {
if (_flightTaskManager.IsPaused == true)
{
await Task.WhenAll(SingleCopterInfos.Select(info => (info.Copter.HoverAsync())));
return;
}
await Task.Delay(25).ConfigureAwait(false); //判断是否下一步20hz await Task.Delay(25).ConfigureAwait(false); //判断是否下一步20hz
} }