Minor bugfix

This commit is contained in:
Pax1601
2023-03-07 22:47:12 +01:00
parent 1eb5d22f6b
commit dec50648f9
11 changed files with 92 additions and 19 deletions

View File

@@ -34,6 +34,7 @@ public:
void setROE(wstring newROE);
void setReactionToThreat(wstring newReactionToThreat);
void landAt(Coords loc);
void setHasNewData(bool newHasNewData) { hasNewData = newHasNewData; }
int getID() { return ID; }
wstring getName() { return name; }
@@ -56,6 +57,7 @@ public:
bool getIsLeader() { return isLeader; }
bool getIsWingman() { return isWingman; }
wstring getFormation() { return formation; }
bool getHasNewData() { return hasNewData; }
virtual double getTargetSpeed() { return targetSpeed; };
virtual double getTargetAltitude() { return targetAltitude; };
@@ -68,6 +70,8 @@ public:
protected:
int ID;
bool hasNewData = false;
int newDataCounter = 0;
int state = State::IDLE;
bool hasTask = false;
bool AI = false;
@@ -104,6 +108,8 @@ protected:
Coords activeDestination = Coords(0);
Coords oldPosition = Coords(0); // Used to approximate speed
list<pair<int, std::function<void(void)>>> schedule;
virtual void AIloop() = 0;
};

View File

@@ -16,6 +16,7 @@ Unit::Unit(json::value json, int ID) :
ID(ID)
{
log("Creating unit with ID: " + to_string(ID));
newDataCounter = 1.0 / UPDATE_TIME_INTERVAL > 0? 1.0 / UPDATE_TIME_INTERVAL: 1; // Mark the unit has hasNewData for 1 second
}
Unit::~Unit()
@@ -25,6 +26,10 @@ Unit::~Unit()
void Unit::updateExportData(json::value json)
{
if (newDataCounter > 0)
newDataCounter--;
setHasNewData(newDataCounter);
/* Compute speed (loGetWorldObjects does not provide speed, we compute it for better performance instead of relying on many lua calls) */
if (oldPosition != NULL)
{
@@ -69,6 +74,7 @@ void Unit::updateExportData(json::value json)
void Unit::updateMissionData(json::value json)
{
newDataCounter = 1.0 / UPDATE_TIME_INTERVAL > 0 ? 1.0 / UPDATE_TIME_INTERVAL : 1; // Mark the unit has hasNewData for 1 second
if (json.has_number_field(L"fuel"))
fuel = int(json[L"fuel"].as_number().to_double() * 100);
if (json.has_object_field(L"ammo"))
@@ -99,7 +105,7 @@ json::value Unit::json(bool fullRefresh)
json[L"flightData"][L"speed"] = speed;
json[L"flightData"][L"heading"] = heading;
if (fullRefresh)
if (fullRefresh || getHasNewData())
{
/********** Mission data **********/
json[L"missionData"] = json::value::object();

View File

@@ -15,6 +15,7 @@ json::value airbasesData;
json::value bullseyesData;
mutex mutexLock;
bool initialized = false;
string sessionHash;
/* Called when DCS simulation stops. All singleton instances are deleted. */
extern "C" DllExport int coreDeinit(lua_State* L)
@@ -38,6 +39,7 @@ extern "C" DllExport int coreDeinit(lua_State* L)
/* Called when DCS simulation starts. All singletons are instantiated, and the custom Lua functions are registered in the Lua state. */
extern "C" DllExport int coreInit(lua_State* L)
{
sessionHash = random_string(16);
unitsManager = new UnitsManager(L);
server = new Server(L);
scheduler = new Scheduler(L);

View File

@@ -12,6 +12,7 @@ extern Scheduler* scheduler;
extern json::value airbasesData;
extern json::value bullseyesData;
extern mutex mutexLock;
extern string sessionHash;
void handle_eptr(std::exception_ptr eptr)
{
@@ -93,7 +94,10 @@ void Server::handle_get(http_request request)
answer[L"airbases"] = airbasesData;
else if (path[0] == BULLSEYE_URI)
answer[L"bullseyes"] = bullseyesData;
answer[L"sessionHash"] = json::value::string(to_wstring(sessionHash));
}
response.set_body(answer);
}
catch (...) {