136 lines
5.2 KiB
C++
136 lines
5.2 KiB
C++
#include "fuel.h"
|
|
|
|
// ZFW Entry
|
|
void distribute(FuelData_t *const targetFuel, const double fuelTarget, const UserData_t *const userData) {
|
|
double fuelLbs = TO_POUNDS(userData->isImperial, fuelTarget);
|
|
|
|
// Equal mains
|
|
if (fuelLbs <= MAX_TANK_1_3_LBS * 3) {
|
|
double tanks = fuelLbs / 3;
|
|
// Only main
|
|
if (tanks <= MAX_TANK_1_3_TIP_LBS) {
|
|
targetFuel->main1 = tanks;
|
|
targetFuel->main3 = tanks;
|
|
targetFuel->main1Tip = 0;
|
|
targetFuel->main3Tip = 0;
|
|
}
|
|
// Tips
|
|
else if (tanks <= MAX_TANK_1_3_TIP_LBS * 2) {
|
|
double tips = tanks - MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main1 = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main1Tip = tips;
|
|
targetFuel->main3Tip = tips;
|
|
}
|
|
// Max tip
|
|
else {
|
|
double mains = tanks - MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main1 = mains;
|
|
targetFuel->main3 = mains;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
}
|
|
|
|
targetFuel->main2 = tanks;
|
|
|
|
targetFuel->upperAux = 0;
|
|
targetFuel->lowerAux = 0;
|
|
targetFuel->tail = 0;
|
|
targetFuel->forwardAux1 = 0;
|
|
targetFuel->forwardAux2 = 0;
|
|
}
|
|
// No Aux
|
|
else if (fuelLbs <= MAX_TANK_1_3_LBS * 2 + MAX_TANK_2_LBS) {
|
|
targetFuel->main1 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
|
|
targetFuel->main2 = fuelLbs - MAX_TANK_1_3_LBS * 2;
|
|
|
|
targetFuel->upperAux = 0;
|
|
targetFuel->lowerAux = 0;
|
|
targetFuel->tail = 0;
|
|
targetFuel->forwardAux1 = 0;
|
|
targetFuel->forwardAux2 = 0;
|
|
}
|
|
// UPR AUX
|
|
else if (fuelLbs <= MAX_TANK_1_3_LBS * 2 + MAX_TANK_2_LBS + MAX_UPR_AUX_LBS) {
|
|
targetFuel->main1 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main2 = MAX_TANK_2_LBS;
|
|
|
|
targetFuel->upperAux = fuelLbs - MAX_TANK_1_3_LBS * 2 - MAX_TANK_2_LBS;
|
|
|
|
targetFuel->lowerAux = 0;
|
|
targetFuel->tail = 0;
|
|
targetFuel->forwardAux1 = 0;
|
|
targetFuel->forwardAux2 = 0;
|
|
}
|
|
// LWR AUX
|
|
else if (fuelLbs <= MAX_TANK_1_3_LBS * 2 + MAX_TANK_2_LBS + MAX_UPR_AUX_LBS + MAX_LWR_AUX_LBS) {
|
|
targetFuel->main1 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main2 = MAX_TANK_2_LBS;
|
|
targetFuel->upperAux = MAX_UPR_AUX_LBS;
|
|
|
|
targetFuel->lowerAux = fuelLbs - MAX_TANK_1_3_LBS * 2 - MAX_TANK_2_LBS - MAX_UPR_AUX_LBS;
|
|
|
|
targetFuel->tail = 0;
|
|
targetFuel->forwardAux1 = 0;
|
|
targetFuel->forwardAux2 = 0;
|
|
}
|
|
// Tail
|
|
else if (fuelLbs <= MAX_TANK_1_3_LBS * 2 + MAX_TANK_2_LBS + MAX_UPR_AUX_LBS + MAX_LWR_AUX_LBS + MAX_TAIL_LBS) {
|
|
targetFuel->main1 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main2 = MAX_TANK_2_LBS;
|
|
targetFuel->upperAux = MAX_UPR_AUX_LBS;
|
|
targetFuel->lowerAux = MAX_LWR_AUX_LBS;
|
|
|
|
targetFuel->tail = fuelLbs - MAX_TANK_1_3_LBS * 2 - MAX_TANK_2_LBS - MAX_UPR_AUX_LBS - MAX_LWR_AUX_LBS;
|
|
|
|
targetFuel->forwardAux1 = 0;
|
|
targetFuel->forwardAux2 = 0;
|
|
} else if (userData->isER) {
|
|
targetFuel->main1 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main3 = MAX_TANK_1_3_MAIN_LBS;
|
|
targetFuel->main1Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main3Tip = MAX_TANK_1_3_TIP_LBS;
|
|
targetFuel->main2 = MAX_TANK_2_LBS;
|
|
targetFuel->upperAux = MAX_UPR_AUX_LBS;
|
|
targetFuel->lowerAux = MAX_LWR_AUX_LBS;
|
|
targetFuel->tail = MAX_TAIL_LBS;
|
|
|
|
fuelLbs = fuelLbs - MAX_TANK_1_3_LBS * 2 - MAX_TANK_2_LBS - MAX_UPR_AUX_LBS - MAX_LWR_AUX_LBS - MAX_TAIL_LBS;
|
|
targetFuel->forwardAux1 = min(fuelLbs / 2, MAX_FWD_AUX_LBS);
|
|
targetFuel->forwardAux2 = min(fuelLbs / 2, MAX_FWD_AUX_LBS);
|
|
}
|
|
|
|
targetFuel->total = targetFuel->main1 + targetFuel->main3 + targetFuel->main2 + targetFuel->upperAux + targetFuel->lowerAux +
|
|
targetFuel->main1Tip + targetFuel->main3Tip + targetFuel->tail + targetFuel->forwardAux1 +
|
|
targetFuel->forwardAux2;
|
|
}
|
|
|
|
void fuel(const FuelData_t *const targetFuel, const HANDLE simConnect) {
|
|
FuelDataSet_t localFuel = {};
|
|
|
|
localFuel.main1 = min(MAX_TANK_1_3_GAL, (targetFuel->main1 + targetFuel->main1Tip) / LBS_PER_GAL);
|
|
localFuel.main2 = min(MAX_TANK_2_GAL, targetFuel->main2 / LBS_PER_GAL);
|
|
localFuel.main3 = min(MAX_TANK_1_3_GAL, (targetFuel->main3 + targetFuel->main3Tip) / LBS_PER_GAL);
|
|
localFuel.upperAux = min(MAX_UPR_AUX_GAL, targetFuel->upperAux / LBS_PER_GAL);
|
|
localFuel.lowerAux = min(MAX_LWR_AUX_GAL, targetFuel->lowerAux / LBS_PER_GAL);
|
|
localFuel.tail = min(MAX_TAIL_GAL, targetFuel->tail / LBS_PER_GAL);
|
|
localFuel.forwardAux1 = min(MAX_FWD_AUX_GAL, targetFuel->forwardAux1 / LBS_PER_GAL);
|
|
localFuel.forwardAux2 = min(MAX_FWD_AUX_GAL, targetFuel->forwardAux2 / LBS_PER_GAL);
|
|
|
|
SimConnect_SetDataOnSimObject(simConnect, DATA_DEFINITION_FUEL_SET, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeof(FuelDataSet_t),
|
|
&localFuel);
|
|
}
|