#include "fuel.h" void distribute(FuelData_t *const targetFuel, const double fuelTarget, const bool isImperial, const bool isER) { double fuelLbs = TO_POUNDS(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 (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 distribute(FuelData_t *const targetFuel, const double fuelTarget, const UserData_t *const userData) { distribute(targetFuel, fuelTarget, userData->isImperial, userData->isER); } 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); }