Plane.FormationCreator/Plane.FormationCreator/Formation/FlightTask.cs
zxd 9a1ec7384a 删除了修改航点名的日志
修改了发送千寻RTK的配置界面
2019-07-18 11:35:56 +08:00

199 lines
6.1 KiB
C#

using Plane.Copters;
using Plane.Logging;
using GalaSoft.MvvmLight;
using Microsoft.Practices.ServiceLocation;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Plane.FormationCreator.Formation
{
public partial class FlightTask : ObservableObject
{
public FlightTask(FlightTaskType type)
{
TaskType = type;
}
private FlightTaskManager _flightTaskManager = ServiceLocator.Current.GetInstance<FlightTaskManager>();
private ILogger _logger = ServiceLocator.Current.GetInstance<ILogger>();
private FlightTaskStatus _Status = FlightTaskStatus.Stop;
public FlightTaskStatus Status
{
get { return _Status; }
set { Set(nameof(Status), ref _Status, value); }
}
private FlightTaskType _TaskType;
public FlightTaskType TaskType
{
get { return _TaskType; }
set
{
Set(nameof(TaskType), ref _TaskType, value);
//if (_TaskType != value)
{
RaisePropertyChanged(nameof(TaskTypeIndex));
RaisePropertyChanged(nameof(TaskCnName));
}
}
}
/*
public int TaskTypeIndex
{
get { return (int)TaskType; }
set
{
TaskType = (FlightTaskType)value;
VerticalLift = false;
if ( (value == (int)FlightTaskType.Loiter) || (value == (int)FlightTaskType.Circle) )
{
VerticalLift = true;
}
}
}
*/
private string _TaskName = "";
public string TaskCnName
{
get
{
string name = "";
switch (TaskType)
{
case FlightTaskType.TakeOff: name = "起飞"; break;
case FlightTaskType.FlyTo: name = _TaskName == "" ? "航点" : _TaskName; break;
case FlightTaskType.Land: name = "降落"; break;
}
//name = (TaskIndex + 1).ToString() + "." + name;
return name;
}
set { Set(nameof(TaskCnName), ref _TaskName, value); }
}
public int TaskTypeIndex
{
get {
int index = 1;
switch (TaskType)
{
case FlightTaskType.TakeOff:index = 0; break;
case FlightTaskType.FlyTo: index = 1; break;
case FlightTaskType.Land: index = 2; break;
}
return index;
}
set
{
switch (value)
{
case 0: TaskType = FlightTaskType.TakeOff; break;
case 1: TaskType = FlightTaskType.FlyTo; break;
case 2: TaskType = FlightTaskType.Land; break;
}
}
}
//task在所以任务中的index
public int TaskIndex
{
get
{
return _flightTaskManager.Tasks.IndexOf(this);
}
}
public int TaskNum
{
get
{
return TaskIndex + 1;
}
}
private bool _IsSelected;
public bool IsSelected
{
get { return _IsSelected; }
set { Set(nameof(IsSelected), ref _IsSelected, value); }
}
// 右键单击任务,用于隐藏任务图标, added by ZJF
private bool _IsRightSelected;
public bool IsRightSelected
{
get { return _IsRightSelected; }
set { Set(nameof(IsRightSelected), ref _IsRightSelected, value); }
}
public List<FlightTaskSingleCopterInfo> SingleCopterInfos { get; set; } = new List<FlightTaskSingleCopterInfo>();
private FlightTaskSingleCopterInfo _ModifyingSingleCopterInfo;
public FlightTaskSingleCopterInfo ModifyingSingleCopterInfo
{
get { return _ModifyingSingleCopterInfo; }
set { Set(nameof(ModifyingSingleCopterInfo), ref _ModifyingSingleCopterInfo, value); }
}
public async Task RunAsync()
{
switch (TaskType)
{
case FlightTaskType.FlyTo:
await RunFlyToTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.Turn:
await RunTurnTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.Circle:
await RunCircleTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.SimpleCircle:
await RunSimpleCircleTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.Loiter:
await RunLoiterTimeTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.TakeOff:
//多架同时起飞
//await MutilRunTakeOffTaskAsync().ConfigureAwait(false);
await NewMutilRunTakeOffTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.ReturnToLand: // Added by ZJF
//多架同时返航
await MutilRunReturnToLandTaskAsync().ConfigureAwait(false);
break;
case FlightTaskType.Land:
await MutilLandTaskAsync().ConfigureAwait(false);
break;
default:
throw new InvalidOperationException();
}
}
}
public enum FlightTaskType
{
FlyTo = 0,
Turn = 1,
Circle = 2,
Loiter = 3, // 加入悬停时间选项
// LEDAction = 4,
ReturnToLand = 4, // added by ZJF. 20160315
SimpleCircle = 5,
Land = 6,
TakeOff = 100
}
}