Added "land at point" state for helicopters

This commit is contained in:
Pax1601
2023-10-10 17:10:29 +02:00
parent 80eaa643c9
commit a038d6e999
13 changed files with 210 additions and 8 deletions

View File

@@ -68,7 +68,8 @@ namespace State
FIRE_AT_AREA,
SIMULATE_FIRE_FIGHT,
SCENIC_AAA,
MISS_ON_PURPOSE
MISS_ON_PURPOSE,
LAND_AT_POINT
};
};

View File

@@ -69,6 +69,9 @@ void AirUnit::setState(unsigned char newState)
setTargetPosition(Coords(NULL));
break;
}
case State::LAND_AT_POINT: {
break;
}
default:
break;
}
@@ -125,6 +128,10 @@ void AirUnit::setState(unsigned char newState)
resetActiveDestination();
break;
}
case State::LAND_AT_POINT: {
resetActiveDestination();
break;
}
default:
break;
}
@@ -340,6 +347,24 @@ void AirUnit::AIloop()
}
break;
}
case State::LAND_AT_POINT: {
setTask("Landing at point");
if (!getHasTask()) {
setActiveDestination();
std::ostringstream taskSS;
taskSS.precision(10),
taskSS << "{"
<< "id = 'LandAtPoint', "
<< "lat = " << activeDestination.lat << ", "
<< "lng = " << activeDestination.lng
<< "}";
Command* command = dynamic_cast<Command*>(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); }));
scheduler->appendCommand(command);
setHasTask(true);
}
break;
}
default:
break;
}

View File

@@ -600,6 +600,22 @@ void Scheduler::handleRequest(string key, json::value value, string username, js
Unit* unit = unitsManager->getGroupLeader(ID);
unit->setOperateAs(operateAs);
}
else if (key.compare("landAtPoint") == 0)
{
unsigned int ID = value[L"ID"].as_integer();
unitsManager->acquireControl(ID);
double lat = value[L"location"][L"lat"].as_double();
double lng = value[L"location"][L"lng"].as_double();
Coords loc; loc.lat = lat; loc.lng = lng;
Unit* unit = unitsManager->getGroupLeader(ID);
list<Coords> newPath;
newPath.push_back(loc);
unit->setActivePath(newPath);
unit->setState(State::LAND_AT_POINT);
log(username + " tasked unit " + unit->getName() + " to land at point", true);
}
else if (key.compare("setCommandModeOptions") == 0)
{
setCommandModeOptions(value);