降落部分改为前一波降落时下一波同时返航,提高返航速度,以前需要等到上一波降落完成下一波才开始下降返航,时间太久
This commit is contained in:
parent
7e04c83e26
commit
bfc534c504
@ -68,10 +68,11 @@ namespace Plane.FormationCreator.Formation
|
|||||||
int integerPart = copterCount / RetNumAttr;
|
int integerPart = copterCount / RetNumAttr;
|
||||||
int residualPart = copterCount % RetNumAttr;
|
int residualPart = copterCount % RetNumAttr;
|
||||||
var tasksTmp = new Task[infos.Count];
|
var tasksTmp = new Task[infos.Count];
|
||||||
|
//整数部分执行返航降落
|
||||||
for (int i = 0; i < integerPart; i++)
|
for (int i = 0; i < integerPart; i++)
|
||||||
{
|
{
|
||||||
var tasksRetutn = new Task[RetNumAttr];
|
var tasksRetutn = new Task[RetNumAttr*2];
|
||||||
|
//设置返航任务
|
||||||
for (int j = RetNumAttr * i; j < RetNumAttr * (i + 1); j++)
|
for (int j = RetNumAttr * i; j < RetNumAttr * (i + 1); j++)
|
||||||
{
|
{
|
||||||
var info = infos[j];
|
var info = infos[j];
|
||||||
@ -87,39 +88,55 @@ namespace Plane.FormationCreator.Formation
|
|||||||
{
|
{
|
||||||
tasksRetutn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
tasksRetutn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
await Task.WhenAll(tasksRetutn).ConfigureAwait(false);
|
|
||||||
|
|
||||||
|
//设置降落任务
|
||||||
var tasksRetutn1 = new Task[RetNumAttr];
|
if (i > 0)
|
||||||
for (int j = RetNumAttr * i; j < RetNumAttr * (i + 1); j++)
|
|
||||||
{
|
|
||||||
var info = infos[j];
|
|
||||||
|
|
||||||
int indexTmp = j - RetNumAttr * 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 = RetNumAttr * i; j < RetNumAttr * (i + 1); j++)
|
for (int j = RetNumAttr * (i - 1); j < RetNumAttr * (i); j++)
|
||||||
{
|
{
|
||||||
var info = infos[j];
|
var info = infos[j];
|
||||||
info.RTLStage = 0;
|
|
||||||
|
int indexTmp = RetNumAttr+ j - RetNumAttr * (i-1);
|
||||||
|
|
||||||
|
// var copter = info.Copter;
|
||||||
|
if (info.RTLStage == 2) // 当前阶段小于等于1时进入
|
||||||
|
{
|
||||||
|
tasksRetutn[indexTmp] = ReturnToLandSecondTaskAsync(info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tasksRetutn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//第一波返航,降落任务为空
|
||||||
|
for (int j = RetNumAttr * (i +1); j < RetNumAttr * (i+2); j++)
|
||||||
|
{
|
||||||
|
int indexTmp = j - RetNumAttr * i;
|
||||||
|
tasksRetutn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//开始执行这波返航和上波降落
|
||||||
|
await Task.WhenAll(tasksRetutn).ConfigureAwait(false);
|
||||||
|
//上波降落后设置为0
|
||||||
|
if (_flightTaskManager.IsPaused == false)
|
||||||
|
{
|
||||||
|
if (i > 0)
|
||||||
|
{
|
||||||
|
for (int j = RetNumAttr * (i - 1); j < RetNumAttr * (i); j++)
|
||||||
|
{
|
||||||
|
var info = infos[j];
|
||||||
|
info.RTLStage = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -127,15 +144,22 @@ namespace Plane.FormationCreator.Formation
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (residualPart > 0)
|
if (residualPart > 0)
|
||||||
{
|
{
|
||||||
var tasksreturn = new Task[residualPart];
|
var tasksreturn = new Task[residualPart+ RetNumAttr];
|
||||||
|
//余数部分开始返航
|
||||||
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
||||||
{
|
{
|
||||||
var info = infos[j];
|
var info = infos[j];
|
||||||
int indexTmp = j - RetNumAttr * integerPart;
|
int indexTmp = j - RetNumAttr * integerPart;
|
||||||
// var copter = info.Copter;
|
// var copter = info.Copter;
|
||||||
if (info.RTLStage <= 1) // 当前阶段小于等于1时进入
|
if (info.RTLStage <= 1) // 当前阶段小于等于1时进入
|
||||||
{
|
{
|
||||||
tasksreturn[indexTmp] = ReturnToLandTaskFlySingleCopterAsync(info);
|
tasksreturn[indexTmp] = ReturnToLandTaskFlySingleCopterAsync(info);
|
||||||
@ -145,8 +169,55 @@ namespace Plane.FormationCreator.Formation
|
|||||||
tasksreturn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
tasksreturn[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//无余数的整数部分最后一波开始降落
|
||||||
|
// var tasksLastland = new Task[RetNumAttr];
|
||||||
|
for (int j = RetNumAttr * (integerPart - 1); j < RetNumAttr * (integerPart); j++)
|
||||||
|
{
|
||||||
|
var info = infos[j];
|
||||||
|
|
||||||
|
int indexTmp = RetNumAttr + j - RetNumAttr * integerPart;
|
||||||
|
|
||||||
|
// var copter = info.Copter;
|
||||||
|
if (info.RTLStage == 2) // 当前阶段小于等于1时进入
|
||||||
|
{
|
||||||
|
tasksreturn[residualPart + indexTmp] = ReturnToLandSecondTaskAsync(info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tasksreturn[residualPart+indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//开始执行降落和返航
|
||||||
await Task.WhenAll(tasksreturn).ConfigureAwait(false);
|
await Task.WhenAll(tasksreturn).ConfigureAwait(false);
|
||||||
|
|
||||||
|
//降落后设置为0
|
||||||
|
if (_flightTaskManager.IsPaused == false)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int j = RetNumAttr * (integerPart - 1); j < RetNumAttr * (integerPart); j++)
|
||||||
|
{
|
||||||
|
var info = infos[j];
|
||||||
|
info.RTLStage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//最后余数部分降落
|
||||||
|
|
||||||
var tasksRetutn1 = new Task[residualPart];
|
var tasksRetutn1 = new Task[residualPart];
|
||||||
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
||||||
@ -165,7 +236,7 @@ namespace Plane.FormationCreator.Formation
|
|||||||
}
|
}
|
||||||
await Task.WhenAll(tasksRetutn1).ConfigureAwait(false);
|
await Task.WhenAll(tasksRetutn1).ConfigureAwait(false);
|
||||||
|
|
||||||
if (_flightTaskManager.IsPaused == false)
|
if (_flightTaskManager.IsPaused == false)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
for (int j = integerPart * RetNumAttr; j < RetNumAttr * integerPart + residualPart; j++)
|
||||||
@ -175,6 +246,54 @@ namespace Plane.FormationCreator.Formation
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
//无余数的整数部分最后一波开始降落
|
||||||
|
var tasksLastland = new Task[RetNumAttr];
|
||||||
|
for (int j = RetNumAttr * (integerPart - 1); j < RetNumAttr * (integerPart); j++)
|
||||||
|
{
|
||||||
|
var info = infos[j];
|
||||||
|
|
||||||
|
int indexTmp = RetNumAttr + j - RetNumAttr * integerPart;
|
||||||
|
|
||||||
|
// var copter = info.Copter;
|
||||||
|
if (info.RTLStage == 2) // 当前阶段小于等于1时进入
|
||||||
|
{
|
||||||
|
tasksLastland[indexTmp] = ReturnToLandSecondTaskAsync(info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tasksLastland[indexTmp] = Task.Run(async () => { await Task.Delay(1).ConfigureAwait(false); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await Task.WhenAll(tasksLastland).ConfigureAwait(false);
|
||||||
|
|
||||||
|
//降落后设置为0
|
||||||
|
if (_flightTaskManager.IsPaused == false)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int j = RetNumAttr * (integerPart - 1); j < RetNumAttr * (integerPart); j++)
|
||||||
|
{
|
||||||
|
var info = infos[j];
|
||||||
|
info.RTLStage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user