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);
}