允许多架同时起飞和降落
[FlightTask.cs]任务改为多架起飞降落 [FlightTask_ReturnToLand.cs]多架降落 [FlightTask_TakeOff.cs]多架起飞
This commit is contained in:
parent
94f366d011
commit
fda55a6e45
@ -100,10 +100,12 @@ namespace Plane.FormationCreator.Formation
|
||||
await RunLoiterTimeTaskAsync().ConfigureAwait(false);
|
||||
break;
|
||||
case FlightTaskType.TakeOff:
|
||||
await RunTakeOffTask2Async().ConfigureAwait(false);
|
||||
//多架同时起飞
|
||||
await MutilRunTakeOffTaskAsync(2).ConfigureAwait(false);
|
||||
break;
|
||||
case FlightTaskType.ReturnToLand: // Added by ZJF
|
||||
await RunReturnToLandTaskAsync().ConfigureAwait(false);
|
||||
//多架同时返航
|
||||
await MutilRunReturnToLandTaskAsync(2).ConfigureAwait(false);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException();
|
||||
|
@ -49,7 +49,132 @@ namespace Plane.FormationCreator.Formation
|
||||
}
|
||||
|
||||
}
|
||||
public async Task MutilRunReturnToLandTaskAsync(int ReturnCount)
|
||||
{
|
||||
int TaskCount = _flightTaskManager.Tasks.Count();
|
||||
if (TaskCount > 1)
|
||||
{
|
||||
var infos = SingleCopterInfos;
|
||||
|
||||
int copterCount = infos.Count;
|
||||
int integerPart = copterCount / ReturnCount;
|
||||
int residualPart = copterCount % ReturnCount;
|
||||
var tasksTmp = new Task[infos.Count];
|
||||
|
||||
for (int i = 0; i < integerPart; i++)
|
||||
{
|
||||
var tasksRetutn = new Task[ReturnCount];
|
||||
for (int j = ReturnCount * i; j < ReturnCount * (i + 1); j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
|
||||
int indexTmp = j - ReturnCount * i;
|
||||
|
||||
// var copter = info.Copter;
|
||||
if (info.RTLStage <= 1) // 当前阶段小于等于1时进入
|
||||
{
|
||||
tasksRetutn[indexTmp] = ReturnToLandTaskFlySingleCopterAsync(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
tasksRetutn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||
}
|
||||
}
|
||||
await Task.WhenAll(tasksRetutn).ConfigureAwait(false);
|
||||
|
||||
|
||||
var tasksRetutn1 = new Task[ReturnCount];
|
||||
for (int j = ReturnCount * i; j < ReturnCount * (i + 1); j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
|
||||
int indexTmp = j - ReturnCount * i;
|
||||
|
||||
// var copter = info.Copter;
|
||||
if (info.RTLStage == 2) // 当前阶段小于等于1时进入
|
||||
{
|
||||
tasksRetutn1[indexTmp] = ReturnToLandSecondTaskAsync(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
tasksRetutn1[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||
}
|
||||
}
|
||||
await Task.WhenAll(tasksRetutn1).ConfigureAwait(false);
|
||||
|
||||
|
||||
|
||||
|
||||
if (_flightTaskManager.IsPaused == false)
|
||||
{
|
||||
|
||||
for (int j = ReturnCount * i; j < ReturnCount * (i + 1); j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
info.RTLStage = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (residualPart > 0)
|
||||
{
|
||||
var tasksreturn = new Task[residualPart];
|
||||
|
||||
for (int j = integerPart * ReturnCount; j < ReturnCount * integerPart + residualPart; j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
int indexTmp = j - ReturnCount * integerPart;
|
||||
// var copter = info.Copter;
|
||||
if (info.RTLStage <= 1) // 当前阶段小于等于1时进入
|
||||
{
|
||||
tasksreturn[indexTmp] = ReturnToLandTaskFlySingleCopterAsync(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
tasksreturn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||
}
|
||||
}
|
||||
await Task.WhenAll(tasksreturn).ConfigureAwait(false);
|
||||
|
||||
|
||||
var tasksRetutn1 = new Task[residualPart];
|
||||
for (int j = integerPart * ReturnCount; j < ReturnCount * integerPart + residualPart; j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
int indexTmp = j - ReturnCount * integerPart;
|
||||
// var copter = info.Copter;
|
||||
if (info.RTLStage == 2) // 当前阶段小于等于1时进入
|
||||
{
|
||||
tasksRetutn1[indexTmp] = ReturnToLandSecondTaskAsync(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
tasksRetutn1[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||
}
|
||||
}
|
||||
await Task.WhenAll(tasksRetutn1).ConfigureAwait(false);
|
||||
|
||||
if (_flightTaskManager.IsPaused == false)
|
||||
{
|
||||
|
||||
for (int j = integerPart * ReturnCount; j < ReturnCount * integerPart + residualPart; j++)
|
||||
{
|
||||
var info = infos[j];
|
||||
info.RTLStage = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//原地下降高度到15米,然后返回起飞点
|
||||
private async Task ReturnToLandTaskFlySingleCopterAsync(FlightTaskSingleCopterInfo info)
|
||||
{
|
||||
float takeOffAlt = 15.0f;
|
||||
@ -137,6 +262,7 @@ namespace Plane.FormationCreator.Formation
|
||||
|
||||
}
|
||||
|
||||
//在起飞点上空从15米降落到4米,然后切land模式
|
||||
private async Task ReturnToLandSecondTaskAsync(FlightTaskSingleCopterInfo info)
|
||||
{
|
||||
// await Task.Run(async () =>
|
||||
|
@ -49,14 +49,14 @@ namespace Plane.FormationCreator.Formation
|
||||
}
|
||||
|
||||
// 几架飞机同时起飞,参数为takeOffCount
|
||||
public async Task RunTakeOffTask2Async()
|
||||
public async Task MutilRunTakeOffTaskAsync(int takeCount)
|
||||
{
|
||||
int TaskCount = _flightTaskManager.Tasks.Count();
|
||||
if (TaskCount > 1)
|
||||
{
|
||||
var infos = SingleCopterInfos;
|
||||
|
||||
int takeOffCount = 5;
|
||||
int takeOffCount = takeCount;
|
||||
int copterCount = infos.Count;
|
||||
int integerPart = copterCount / takeOffCount;
|
||||
int residualPart = copterCount % takeOffCount;
|
||||
|
Loading…
Reference in New Issue
Block a user