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