悬停任务加入倒计时功能,必须有13架以上飞机,排好8字按从左到右从上到下的顺序设定好顺序

修改内部顺序号多了两个数的bug
This commit is contained in:
pxzleo 2017-09-15 11:14:10 +08:00
parent 412d0436bb
commit 5dc074fc0b
3 changed files with 278 additions and 15 deletions

View File

@ -471,7 +471,7 @@ namespace Plane.FormationCreator.Formation
// added by ZJF
private void RestoreLoiterTimeTask(float LoiteTimeTmp, bool flashCheck, float flashCheckPeriod,
bool oneByOneCheck, float oneByOneCheckPeriod, string flashNameArray, string flashIndexArray,
bool ChangeYaw, float HeadYaw,
bool ChangeYaw, float HeadYaw,bool numberShow,
dynamic singleCopterInfos)
{
var copters = _copterManager.Copters;
@ -491,6 +491,8 @@ namespace Plane.FormationCreator.Formation
loiterTimeTask.flashCopterIndexArray = flashIndexArray;
loiterTimeTask.ChangeYaw = ChangeYaw;
loiterTimeTask.HeadYaw = HeadYaw;
loiterTimeTask.numberShow = numberShow;
// foreach (var copter in copters)
for (int i=0; i < copters.Count && i < singleCopterInfos.Count; i++)
@ -655,6 +657,7 @@ namespace Plane.FormationCreator.Formation
flashIndexArray = task.flashCopterIndexArray,
ChangeYaw = task.ChangeYaw,
HeadYaw = task.HeadYaw,
numberShow= task.numberShow,
singleCopterInfos = task.SingleCopterInfos.Select(info =>
@ -754,7 +757,7 @@ namespace Plane.FormationCreator.Formation
case FlightTaskType.Loiter:
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, task.singleCopterInfos);
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw , (bool)task.numberShow, task.singleCopterInfos);
break;
case FlightTaskType.SimpleCircle:
@ -795,7 +798,7 @@ namespace Plane.FormationCreator.Formation
case FlightTaskType.Loiter:
RestoreLoiterTimeTask( (float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, task.singleCopterInfos);
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, (bool)task.numberShow, task.singleCopterInfos);
break;
case FlightTaskType.SimpleCircle:
@ -815,7 +818,7 @@ namespace Plane.FormationCreator.Formation
// 在悬停任务时左键waypoint为选中
// 在悬停任务模式且LED控制被选中时
if ((this.SelectedTask.TaskType == FlightTaskType.Loiter) && (this.SelectedTask.flashAttr || this.SelectedTask.oneByOneAttr))
if ((this.SelectedTask.TaskType == FlightTaskType.Loiter) && (this.SelectedTask.flashAttr || this.SelectedTask.oneByOneAttr|| this.SelectedTask.numberShow))
{
string copterNameStr = this.SelectedTask.flashCopterNameArray;
@ -836,12 +839,12 @@ namespace Plane.FormationCreator.Formation
if (copterArray[0].Equals(""))
{
this.SelectedTask.flashCopterNameArray += copter.Name;
SelectedTask.flashCopterIndexArray += Name2Index(copter.Name);
// SelectedTask.flashCopterIndexArray += Name2Index(copter.Name);
}
else
{
this.SelectedTask.flashCopterNameArray += "," + copter.Name;
SelectedTask.flashCopterIndexArray += "," + Name2Index(copter.Name);
// SelectedTask.flashCopterIndexArray += "," + Name2Index(copter.Name);
}
}

View File

@ -1,14 +1,18 @@
using System;
using GalaSoft.MvvmLight.Command;
using Plane.Windows.Messages;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace Plane.FormationCreator.Formation
{
public partial class FlightTask
{
private float _LoiterTimeAttr = 0.0f;
private bool numberisend = false;
public float LoiterTimeAttr
{
get { return _LoiterTimeAttr; }
@ -18,6 +22,86 @@ namespace Plane.FormationCreator.Formation
}
}
private ICommand _NumberCommand5;
public ICommand NumberCommand5
{
get
{
return _NumberCommand5 ?? (_NumberCommand5 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberfive);
}));
}
}
private ICommand _NumberCommand4;
public ICommand NumberCommand4
{
get
{
return _NumberCommand4 ?? (_NumberCommand4 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberFour);
}));
}
}
private ICommand _NumberCommand3;
public ICommand NumberCommand3
{
get
{
return _NumberCommand3 ?? (_NumberCommand3 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberthree);
}));
}
}
private ICommand _NumberCommand2;
public ICommand NumberCommand2
{
get
{
return _NumberCommand2 ?? (_NumberCommand2 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numbertwo);
}));
}
}
private ICommand _NumberCommand1;
public ICommand NumberCommand1
{
get
{
return _NumberCommand1 ?? (_NumberCommand1 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberone);
}));
}
}
private ICommand _NumberCommand0;
public ICommand NumberCommand0
{
get
{
return _NumberCommand0 ?? (_NumberCommand0 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberzero);
}));
}
}
private ICommand _NumberCommandok;
public ICommand NumberCommandok
{
get
{
return _NumberCommandok ?? (_NumberCommandok = new RelayCommand<double>(async =>
{
numberisend = true;
}));
}
}
@ -32,6 +116,20 @@ namespace Plane.FormationCreator.Formation
}
}
// 数字倒计时 要设定13架飞机
private bool _numberShow = false;
public bool numberShow
{
get { return _numberShow; }
set
{
Set(nameof(numberShow), ref _numberShow, value);
}
}
// 机头方向0为北顺时针360
private float _HeadYaw = 1.0f;
public float HeadYaw
@ -94,7 +192,10 @@ namespace Plane.FormationCreator.Formation
for (int i = 0; i < copterArray.Length; i++)
{
flashCopterIndexArray += Name2Index(copterArray[i])+',';
flashCopterIndexArray += Name2Index(copterArray[i]);
//最后一个编号不要加","
if (i!= (copterArray.Length-1))
flashCopterIndexArray += ',';
}
}
}
@ -167,9 +268,22 @@ namespace Plane.FormationCreator.Formation
private int[] lineNine = { 20, 26 };
private int[] lineTen = { 25 };
private int[] numberfive = { 0, 1, 2, 3, 5, 6, 7, 9,10,11, 12 };
private int[] numberFour = { 0, 2, 3, 4, 5, 6, 7, 9, 12 };
private int[] numberthree = { 0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12 };
private int[] numbertwo = { 0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12 };
private int[] numberone = { 2, 4, 7, 9, 12 };
private int[] numberzero = { 0, 1, 2, 3, 4,5, 7, 8,9, 10, 11, 12 };
public async Task RunLoiterTimeTaskAsync()
{
numberisend = false;
if (ChangeYaw)
{
await Task.WhenAll(SingleCopterInfos.Select(info => SetCopterYawAsync(info,HeadYaw)));
@ -200,8 +314,6 @@ namespace Plane.FormationCreator.Formation
await LEDFlashParaModifyPlanAsync();
return;
}
var infos = SingleCopterInfos;
if (flashAttr) // LED闪烁显示效果
{
@ -289,6 +401,33 @@ namespace Plane.FormationCreator.Formation
await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false);
}
else if (numberShow) // LED数字倒计时目前固定需要13架飞机并且在跑马灯\数字顺序里设置13架飞机的顺序
{
if (flashCopterNameArray.Equals(""))
return;
string[] copterArray = flashCopterIndexArray.Split(',');
//没有13架
if (copterArray.Count()!=13)
return;
//LED全灭
await Task.WhenAll(SingleCopterInfos.Select(info => LEDFlashTaskFlySingleCopterAsync(info, false)));
await Task.Delay(100).ConfigureAwait(false);
//判断是否下一步
while (! numberisend)
{
await Task.Delay(25).ConfigureAwait(false); //判断是否下一步20hz
}
}
else // 没有LED显示效果只等待
{
await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false);
@ -650,5 +789,54 @@ namespace Plane.FormationCreator.Formation
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
}
// 显示LED数字
private async Task LEDNumberAsync(int[] Ledshowarray)
{
List<int> numberfivenew = new List<int>();
var infos = SingleCopterInfos;
if (flashCopterNameArray.Equals(""))
return;
string[] copterArray = flashCopterIndexArray.Split(',');
//没有13架
if (copterArray.Count() != 13)
return;
var tasks_selected = new Task[copterArray.Count()];
// 转换序号
for (int i = 0; i < copterArray.Length; i++)
{
if (copterArray[i] == "") break;
int index = int.Parse(copterArray[i]);
var info = infos[index];
if (Array.IndexOf(Ledshowarray, i) != -1)
{
tasks_selected[i] = await Task.Factory.StartNew(async () =>
{
var internalInfo = info;
await LEDFlashTaskFlySingleCopterAsync(internalInfo, true);
});
}
else
{
tasks_selected[i] = await Task.Factory.StartNew(async () =>
{
var internalInfo = info;
await LEDFlashTaskFlySingleCopterAsync(internalInfo, false);
});
}
}
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
}
}
}

View File

@ -17,7 +17,7 @@
</Style>
</StackPanel.Resources>
<TextBlock Text="任务操作" FontWeight="Bold" />
<TextBlock Text="任务操作" FontWeight="Bold" />
<StackPanel>
@ -266,7 +266,7 @@
Grid.Column="1"
Margin="0,5,10,0"
Text="{Binding TargetAlt, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Grid>
</Grid>
@ -398,6 +398,7 @@
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
@ -422,8 +423,8 @@
<TextBox Grid.Column="1" Grid.Row="0"
Text="{Binding flashPeriodAttr, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<TextBlock Grid.Row="2" Grid.Column="0" Text="走马灯: " />
<TextBlock Grid.Row="2" Grid.Column="0" Text="走马灯/数字顺序: " />
<Grid Grid.Row="2" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
@ -452,6 +453,77 @@
IsChecked="{Binding ChangeYaw, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="0"
Text="{Binding HeadYaw, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<Grid Grid.Row="5" Grid.Column="0" Margin="0,0,28,0">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox Grid.Row="0" Grid.Column="0"
IsChecked="{Binding numberShow, UpdateSourceTrigger=PropertyChanged}" Margin="0,5,0,0" />
</Grid>
<Grid Grid.Row="5" Grid.ColumnSpan="2" Margin="19,0,0,0">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="5"
Margin="0,5,0,0"
Command="{Binding NumberCommand5}" />
<Button Grid.Row="0" Grid.Column="1" Content="4"
Margin="0,5,0,0"
Command="{Binding NumberCommand4}" />
<Button Grid.Row="0" Grid.Column="2" Content="3"
Margin="0,5,0,0"
Command="{Binding NumberCommand3}" />
<Button Grid.Row="0" Grid.Column="3" Content="2"
Margin="0,5,0,0"
Command="{Binding NumberCommand2}" />
<Button Grid.Row="0" Grid.Column="4" Content="1"
Margin="0,5,0,0"
Command="{Binding NumberCommand1}" />
<Button Grid.Row="0" Grid.Column="5" Content="0"
Margin="0,5,0,0"
Command="{Binding NumberCommand0}"
/>
<Button Grid.Row="0" Grid.Column="6" Content="N"
Margin="0,5,0,0"
Command="{Binding NumberCommandok}"
/>
</Grid>
</Grid>
</Grid>