199 lines
6.1 KiB
C#
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
|
|
}
|
|
}
|