88 lines
2.6 KiB
C

#pragma once
#ifndef __INTELLISENSE__
#define MODULE_EXPORT __attribute__((visibility("default")))
#define MODULE_WASM_MODNAME(mod) __attribute__((import_module(mod)))
#else
#define MODULE_EXPORT
#define MODULE_WASM_MODNAME(mod)
#define __attribute__(x)
#define __restrict__
#endif
/********************************* Headers *********************************/
// MSFS headers
#include <MSFS/MSFS_WindowsTypes.h>
#include <SimConnect.h>
// C headers
#include <math.h>
// C++ headers
#include <algorithm>
// Own headers
#include "shared.h"
/******************************** Constants ********************************/
#define LBS_PER_GAL 6.699999809
#define MAX_TANK_1_3_MAIN_GAL 5167.907
#define MAX_TANK_1_3_TIP_GAL 874.5
#define MAX_TANK_1_3_GAL (5167.907 + 874.5)
#define MAX_TANK_2_GAL 9556.95
#define MAX_UPR_AUX_GAL 12998.58
#define MAX_LWR_AUX_GAL 1641.82
#define MAX_TAIL_GAL 1957.779
#define MAX_FWD_AUX_GAL 1970.8
#define MAX_TANK_1_3_MAIN_LBS (LBS_PER_GAL * MAX_TANK_1_3_MAIN_GAL)
#define MAX_TANK_1_3_TIP_LBS (LBS_PER_GAL * MAX_TANK_1_3_TIP_GAL)
#define MAX_TANK_1_3_LBS (LBS_PER_GAL * MAX_TANK_1_3_GAL)
#define MAX_TANK_2_LBS (LBS_PER_GAL * MAX_TANK_2_GAL)
#define MAX_UPR_AUX_LBS (LBS_PER_GAL * MAX_UPR_AUX_GAL)
#define MAX_LWR_AUX_LBS (LBS_PER_GAL * MAX_LWR_AUX_GAL)
#define MAX_TAIL_LBS (LBS_PER_GAL * MAX_TAIL_GAL)
#define MAX_FWD_AUX_LBS (LBS_PER_GAL * MAX_FWD_AUX_GAL)
// Max Fuel
#define MAX_FUEL(IS_IMPERIAL) ((IS_IMPERIAL) ? (256207) : (116213))
#define MAX_FUEL_ER(IS_IMPERIAL) ((IS_IMPERIAL) ? (282619) : (128193))
// Arms Fuel
#define ARM_MAIN1 -240.0
#define ARM_MAIN3 -240.0
#define ARM_MAIN2 120.0
#define ARM_UPPER_AUX 0.0
#define ARM_LOWER_AUX 0.0
#define ARM_MAIN1_TIP -468.0
#define ARM_MAIN3_TIP -468.0
#define ARM_TAIL -840.0
#define ARM_FORWARD_AUX1 60.0
#define ARM_FORWARD_AUX2 60.0
/***************************** Data structures *****************************/
typedef struct {
// SimConnect mapped
double main1;
double main3;
double main2;
double upperAux;
double lowerAux;
double main1Tip;
double main3Tip;
double tail;
double forwardAux1;
double forwardAux2;
// Additional properties
double total;
} FuelData_t;
typedef struct {
double main1;
double main3;
double main2;
double upperAux;
double lowerAux;
double tail;
double forwardAux1;
double forwardAux2;
} FuelDataSet_t;
/******************************** Functions ********************************/
void distribute(FuelData_t *const targetFuel, const double fuelTarget, const UserData_t *const userData);
void fuel(const FuelData_t *const targetFuel, const HANDLE simConnect);