mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
Added "land at point" state for helicopters
This commit is contained in:
@@ -68,7 +68,8 @@ namespace State
|
||||
FIRE_AT_AREA,
|
||||
SIMULATE_FIRE_FIGHT,
|
||||
SCENIC_AAA,
|
||||
MISS_ON_PURPOSE
|
||||
MISS_ON_PURPOSE,
|
||||
LAND_AT_POINT
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user