悬停任务加入倒计时功能,必须有13架以上飞机,排好8字按从左到右从上到下的顺序设定好顺序
修改内部顺序号多了两个数的bug
This commit is contained in:
parent
412d0436bb
commit
5dc074fc0b
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -398,6 +398,7 @@
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
@ -423,7 +424,7 @@
|
||||
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>
|
||||
|
Loading…
Reference in New Issue
Block a user