虚拟飞机用蓝色,真实飞机绿色

灯光模拟间隔不能低于1秒的bug
真实飞机替代虚拟飞机,虚拟飞机不能替代真实飞机
This commit is contained in:
xu 2020-05-22 20:47:20 +08:00
parent 3efb9b719d
commit 7c71016e0c
7 changed files with 122 additions and 45 deletions

View File

@ -261,6 +261,13 @@ namespace Plane.FormationCreator
lock(locker) lock(locker)
{ {
var copter = _copterManager.Copters.FirstOrDefault(c => c.Id == id.ToString()); var copter = _copterManager.Copters.FirstOrDefault(c => c.Id == id.ToString());
if ((copter != null)&&(copter is FakeCopter))
{
_copterManager.Copters.Remove(copter);
copter = null;
}
if (copter == null) if (copter == null)
{ {
if (_copterManager.EnAddCopter_Real()) if (_copterManager.EnAddCopter_Real())
@ -273,6 +280,7 @@ namespace Plane.FormationCreator
Id = id.ToString(), Id = id.ToString(),
Name = id.ToString(), Name = id.ToString(),
}; };
copter.VirtualId = 0;
int _index; int _index;
_index = _copterManager.Copters.AddCopter(copter); _index = _copterManager.Copters.AddCopter(copter);
copterStatus.Insert(_index, false); copterStatus.Insert(_index, false);

View File

@ -17,12 +17,22 @@ namespace Plane.FormationCreator.Converters
private static SolidColorBrush _zeroBrush = new SolidColorBrush(Color.FromArgb(125, 125, 125, 125)); private static SolidColorBrush _zeroBrush = new SolidColorBrush(Color.FromArgb(125, 125, 125, 125));
private static SolidColorBrush _oneBrush = Copter.DefaultBrush; private static SolidColorBrush _oneBrush = Copter.DefaultBrush;
private static SolidColorBrush _FakeCopterBrush = Copter.DefaultFakeBrush;
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{ {
if (values[0] == DependencyProperty.UnsetValue) return _zeroBrush; if (values[0] == DependencyProperty.UnsetValue) return _zeroBrush;
var heartbeatCount = (ulong)values[0]; var heartbeatCount = (ulong)values[0];
if (heartbeatCount % 2 == 0) return _zeroBrush; if (heartbeatCount % 2 == 0) return _zeroBrush;
if (values[1] is FakeCopter)
return _FakeCopterBrush;
if (values[1] is PLCopter)
return _oneBrush;
var copter = values[1] as Copter; var copter = values[1] as Copter;
return copter == null ? _oneBrush : copter.Brush; return copter == null ? _oneBrush : copter.Brush;
} }

View File

@ -43,8 +43,12 @@ namespace Plane.FormationCreator.Formation
{ {
return _brushIndex++ % _brushes.Length; return _brushIndex++ % _brushes.Length;
} }
//真实飞机列表默认颜色
internal static SolidColorBrush DefaultBrush { get; } = new SolidColorBrush(Color.FromRgb(50, 205, 50));
//虚拟飞机列表默认颜色
internal static SolidColorBrush DefaultFakeBrush { get; } = new SolidColorBrush(Color.FromRgb(28, 151, 234));
internal static SolidColorBrush DefaultBrush { get; } = new SolidColorBrush(Color.FromRgb(28, 151, 234));
private SolidColorBrush _Brush; private SolidColorBrush _Brush;
public SolidColorBrush Brush public SolidColorBrush Brush
{ {

View File

@ -90,6 +90,45 @@ namespace Plane.FormationCreator.Formation
} }
else else
{ {
//删除重复
// if (entityObject is PLCopter)
// {
for (int i = 0; i < this.Count; i++)
{
if (sortbyid)
{
if (int.Parse(this[i].Id) == int.Parse(entityObject.Id))
{
if (this[i] is FakeCopter)
Remove(this[i]);
else
{
Message.Show($"无法加入飞机已有重复的真实飞机ID[{this[i].Id}]");
return -1;
}
}
}else
{
if ((entityObject.VirtualId!=0) &&(this[i].VirtualId == entityObject.VirtualId))
{
if (this[i] is FakeCopter)
Remove(this[i]);
else
{
Message.Show($"无法加入飞机已有重复的真实飞机ID[{this[i].VirtualId}]");
return -1;
}
}
}
}
// }
bool isInsret = false; bool isInsret = false;
for (int i = 0; i < this.Count; i++) for (int i = 0; i < this.Count; i++)
{ {
@ -103,13 +142,15 @@ namespace Plane.FormationCreator.Formation
_index = i; _index = i;
break; break;
} }
}else }
else
//按VID排序插入 //按VID排序插入
{ {
if (this[i].VirtualId > entityObject.VirtualId) if (this[i].VirtualId > entityObject.VirtualId)
{ {
InsertItem(i, entityObject); InsertItem(i, entityObject);
isInsret = true; isInsret = true;
_index = i; _index = i;
@ -210,6 +251,35 @@ namespace Plane.FormationCreator.Formation
netStatusChanged(Logined,Loginstate); netStatusChanged(Logined,Loginstate);
} }
} }
public enum CopterSortType { ByID, ByVID, ByVIDShowAll };
//排序类型
private CopterSortType _SortType =0;
public CopterSortType SortType
{
get { return _SortType; }
set
{
Set(nameof(SortType), ref _SortType, value);
switch (value)
{
case CopterSortType.ByID:
sortbyid();
break;
case CopterSortType.ByVID:
sortbyvid();
break;
case CopterSortType.ByVIDShowAll:
sortbyvid(true);
break;
default:
sortbyid();
break;
}
}
}
private int _EnCopterNumber = 0; private int _EnCopterNumber = 0;
@ -639,13 +709,21 @@ namespace Plane.FormationCreator.Formation
/// <summary> /// <summary>
/// 按VID重新排序飞机 /// 按VID重新排序飞机
/// </summary> /// </summary>
public void sortbyvid() public void sortbyvid(bool displayid=false)
{ {
List<ICopter> tempCopters = new List<ICopter>(); List<ICopter> tempCopters = new List<ICopter>();
tempCopters.AddRange(Copters); tempCopters.AddRange(Copters);
Copters.Clear(); Copters.Clear();
foreach (var copter in tempCopters) foreach (var copter in tempCopters)
Copters.AddCopter(copter,false); Copters.AddCopter(copter,false);
foreach (var copter in Copters)
{
copter.DisplayVirtualId = true;
copter.DisplayID = displayid;
}
} }
/// <summary> /// <summary>
/// 按原始ID重新排序飞机 /// 按原始ID重新排序飞机
@ -657,6 +735,11 @@ namespace Plane.FormationCreator.Formation
Copters.Clear(); Copters.Clear();
foreach (var copter in tempCopters) foreach (var copter in tempCopters)
Copters.AddCopter(copter); Copters.AddCopter(copter);
foreach (var copter in Copters)
{
copter.DisplayVirtualId = false;
copter.DisplayID = true;
}
} }
} }

View File

@ -154,7 +154,7 @@ namespace Plane.FormationCreator.Formation
LEDTestRun = true; LEDTestRun = true;
foreach (LEDInfo vLEDInfo in LEDInfos) foreach (LEDInfo vLEDInfo in LEDInfos)
{ {
Thread.Sleep((int)vLEDInfo.Delay * 1000); Thread.Sleep((int)(vLEDInfo.Delay * 1000));
if (!LEDTestRun) break; if (!LEDTestRun) break;
_commModuleManager.LED_TaskAsync(vLEDInfo.LEDMode, vLEDInfo.LEDInterval, vLEDInfo.LEDTimes, vLEDInfo.LEDRGB, this.Copter); _commModuleManager.LED_TaskAsync(vLEDInfo.LEDMode, vLEDInfo.LEDInterval, vLEDInfo.LEDTimes, vLEDInfo.LEDRGB, this.Copter);
} }

View File

@ -108,7 +108,9 @@ namespace Plane.FormationCreator.ViewModels
copter.VirtualId = int.Parse(arrs[1]); copter.VirtualId = int.Parse(arrs[1]);
} }
} }
Message.Show($"读入成功");
_copterManager.SortType = CopterManager.CopterSortType.ByVID;// .sortbyvid();
Message.Show($"读入成功");
})); }));
} }
} }

View File

@ -169,16 +169,9 @@ namespace Plane.FormationCreator.ViewModels
{ {
return _SortbyVIdCommand ?? (_SortbyVIdCommand = new RelayCommand( () => return _SortbyVIdCommand ?? (_SortbyVIdCommand = new RelayCommand( () =>
{ {
_copterManager.sortbyvid(); _copterManager.SortType = CopterManager.CopterSortType.ByVID;
foreach (var copter in _copterManager.Copters)
{
copter.DisplayVirtualId = true;
copter.DisplayID = false;
}
//强制刷新飞机显示 //强制刷新飞机显示
// _copterManager.Copters.ForEach(copter => copter.RefreashLoc()); // _copterManager.Copters.ForEach(copter => copter.RefreashLoc());
})); }));
@ -193,14 +186,10 @@ namespace Plane.FormationCreator.ViewModels
{ {
return _SortbyIdCommand ?? (_SortbyVIdCommand = new RelayCommand(() => return _SortbyIdCommand ?? (_SortbyVIdCommand = new RelayCommand(() =>
{ {
_copterManager.sortbyid(); _copterManager.SortType = CopterManager.CopterSortType.ByID;
foreach (var copter in _copterManager.Copters)
{
copter.DisplayVirtualId = false;
copter.DisplayID = true;
}
//强制刷新飞机显示 //强制刷新飞机显示
// _copterManager.Copters.ForEach(copter => copter.RefreashLoc()); // _copterManager.Copters.ForEach(copter => copter.RefreashLoc());
})); }));
} }
@ -223,24 +212,6 @@ namespace Plane.FormationCreator.ViewModels
} }
} }
bool showVirtualId = false;
private ICommand _SwitchIdVirtualIdCommand;
public ICommand SwitchIdVirtualIdCommand
{
get
{
return _SwitchIdVirtualIdCommand ?? (_SwitchIdVirtualIdCommand = new RelayCommand(() =>
{
showVirtualId = !showVirtualId;
foreach (var copter in _copterManager.Copters)
{
copter.DisplayVirtualId = showVirtualId;
}
}));
}
}
@ -251,11 +222,9 @@ namespace Plane.FormationCreator.ViewModels
{ {
return _ShowAllIDCommand ?? (_ShowAllIDCommand = new RelayCommand(() => return _ShowAllIDCommand ?? (_ShowAllIDCommand = new RelayCommand(() =>
{ {
foreach (var copter in _copterManager.Copters)
{ _copterManager.SortType = CopterManager.CopterSortType.ByVIDShowAll;
copter.DisplayVirtualId = true;
copter.DisplayID = true;
}
//强制刷新飞机显示 //强制刷新飞机显示
// _copterManager.Copters.ForEach(copter => copter.RefreashLoc()); // _copterManager.Copters.ForEach(copter => copter.RefreashLoc());
@ -367,6 +336,7 @@ namespace Plane.FormationCreator.ViewModels
id: id, id: id,
name: id name: id
); );
copter.VirtualId = _virtualCopterId;
await copter.ConnectAsync(); await copter.ConnectAsync();
await copter.GetCopterDataAsync(); await copter.GetCopterDataAsync();
_copterManager.Copters.AddCopter(copter); _copterManager.Copters.AddCopter(copter);