mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
feat: completed orbit management
This commit is contained in:
@@ -18,6 +18,10 @@ public:
|
||||
virtual void changeSpeed(string change) = 0;
|
||||
virtual void changeAltitude(string change) = 0;
|
||||
virtual double getDestinationReachedThreshold() { return AIR_DEST_DIST_THR; }
|
||||
|
||||
virtual void setRacetrackLength(double newValue);
|
||||
virtual void setRacetrackAnchor(Coords newValue);
|
||||
virtual void setRacetrackBearing(double newValue);
|
||||
|
||||
protected:
|
||||
virtual void AIloop();
|
||||
|
||||
@@ -154,9 +154,11 @@ void AirUnit::AIloop()
|
||||
{
|
||||
srand(static_cast<unsigned int>(time(NULL)) + ID);
|
||||
|
||||
if (state != State::IDLE) {
|
||||
/* Reset the anchor, but only if the unit is not a tanker or a AWACS */
|
||||
if (state != State::IDLE && !isActiveTanker && !isActiveAWACS) {
|
||||
setRacetrackAnchor(Coords(NULL));
|
||||
setRacetrackBearing(NULL);
|
||||
setRacetrackLength(NULL);
|
||||
}
|
||||
|
||||
/* State machine */
|
||||
@@ -387,4 +389,43 @@ void AirUnit::AIloop()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AirUnit::setRacetrackLength(double newRacetrackLength) {
|
||||
if (racetrackLength != newRacetrackLength) {
|
||||
racetrackLength = newRacetrackLength;
|
||||
|
||||
/* Apply the change */
|
||||
setHasTask(false);
|
||||
resetTaskFailedCounter();
|
||||
AIloop();
|
||||
|
||||
triggerUpdate(DataIndex::racetrackLength);
|
||||
}
|
||||
}
|
||||
|
||||
void AirUnit::setRacetrackAnchor(Coords newRacetrackAnchor) {
|
||||
if (racetrackAnchor != newRacetrackAnchor) {
|
||||
racetrackAnchor = newRacetrackAnchor;
|
||||
|
||||
/* Apply the change */
|
||||
setHasTask(false);
|
||||
resetTaskFailedCounter();
|
||||
AIloop();
|
||||
|
||||
triggerUpdate(DataIndex::racetrackAnchor);
|
||||
}
|
||||
}
|
||||
|
||||
void AirUnit::setRacetrackBearing(double newRacetrackBearing) {
|
||||
if (racetrackBearing != newRacetrackBearing) {
|
||||
racetrackBearing = newRacetrackBearing;
|
||||
|
||||
/* Apply the change */
|
||||
setHasTask(false);
|
||||
resetTaskFailedCounter();
|
||||
AIloop();
|
||||
|
||||
triggerUpdate(DataIndex::racetrackBearing);
|
||||
}
|
||||
}
|
||||
@@ -354,14 +354,22 @@ void Scheduler::handleRequest(string key, json::value value, string username, js
|
||||
log(username + " set " + unit->getUnitName() + "(" + unit->getName() + ") altitude type: " + to_string(value[L"altitudeType"]), true);
|
||||
}
|
||||
}/************************/
|
||||
else if (key.compare("setRacetrackLength") == 0)
|
||||
else if (key.compare("setRacetrack") == 0)
|
||||
{
|
||||
unsigned int ID = value[L"ID"].as_integer();
|
||||
unitsManager->acquireControl(ID);
|
||||
Unit* unit = unitsManager->getGroupLeader(ID);
|
||||
if (unit != nullptr) {
|
||||
unit->setRacetrackLength(value[L"racetrackLength"].as_double());
|
||||
log(username + " set " + unit->getUnitName() + "(" + unit->getName() + ") racetrack length: " + to_string(value[L"racetrackLength"].as_double()), true);
|
||||
unit->setRacetrackLength(value[L"length"].as_double());
|
||||
|
||||
double lat = value[L"location"][L"lat"].as_double();
|
||||
double lng = value[L"location"][L"lng"].as_double();
|
||||
Coords location; location.lat = lat; location.lng = lng;
|
||||
unit->setRacetrackAnchor(location);
|
||||
|
||||
unit->setRacetrackBearing(value[L"bearing"].as_double());
|
||||
|
||||
log(username + " set " + unit->getUnitName() + "(" + unit->getName() + ") racetrack length: " + to_string(value[L"length"].as_double()) + " racetrack bearing: " + to_string(value[L"bearing"].as_double()), true);
|
||||
}
|
||||
}
|
||||
/************************/
|
||||
|
||||
Reference in New Issue
Block a user