void JSLC_pad::CreateThrusters (void)
{
char tex[255];
// propellant resources
PROPELLANT_HANDLE hpr = CreatePropellantResource (PB_FUELMASS);
// ***************** thruster definitions *******************
// Liftoff steam
sprintf(tex, "%s", "Contrail4");
SURFHANDLE hSmokeTex = oapiRegisterExhaustTexture(tex);
sprintf(tex, "%s", "Contrail2");
SURFHANDLE hFireTex = oapiRegisterExhaustTexture(tex);
PARTICLESTREAMSPEC steam_main = {
0, //flags
10.0, //particle size at creation
10, //generation rate
500, //emission velocity
0.8, //emission velocity randomisation
3.0, //particle lifetime
25, //growth rate
5.7, //deceleration rate
PARTICLESTREAMSPEC::EMISSIVE, //EMISSIVE, DIFFUSE
PARTICLESTREAMSPEC::LVL_SQRT, //mapping between level parameter and particle opacity
0, //minimum level for alpha mapping
2, //maximum level for alpha mapping
PARTICLESTREAMSPEC::ATM_PLOG, //mapping between atmospheric parameters and opacity
1e-4, //min atm value for alpha mapping
1 //max atm value for alpha mapping
};
PARTICLESTREAMSPEC smoke_main = {
0, //flags
5.0, //particle size at creation
7, //generation rate
250, //emission velocity
0.8, //emission velocity randomisation
5.0, //particle lifetime
10, //growth rate
6.0, //deceleration rate
PARTICLESTREAMSPEC::DIFFUSE, //EMISSIVE, DIFFUSE
PARTICLESTREAMSPEC::LVL_SQRT, //mapping between level parameter and particle opacity
0, //minimum level for alpha mapping
2, //maximum level for alpha mapping
PARTICLESTREAMSPEC::ATM_PLOG, //mapping between atmospheric parameters and opacity
1e-4, //min atm value for alpha mapping
1, //max atm value for alpha mapping
hSmokeTex
};
PARTICLESTREAMSPEC fire_main = {
0, //flags
3.0, //particle size at creation
50, //generation rate
250, //emission velocity
0.3, //emission velocity randomisation
0.5, //particle lifetime
5, //growth rate
6.0, //deceleration rate
PARTICLESTREAMSPEC::EMISSIVE, //EMISSIVE, DIFFUSE
PARTICLESTREAMSPEC::LVL_SQRT, //mapping between level parameter and particle opacity
0, //minimum level for alpha mapping
2, //maximum level for alpha mapping
PARTICLESTREAMSPEC::ATM_PLOG, //mapping between atmospheric parameters and opacity
1e-4, //min atm value for alpha mapping
1, //max atm value for alpha mapping
hFireTex
};
th_main1 = CreateThruster (_V(0,0,0), _V(0,0,1), PB_MAXMAINTH, hpr, PB_ISP);
th_main2 = CreateThruster (_V(0,0,0), _V(0,0,-1), PB_MAXMAINTH, hpr, PB_ISP);
AddExhaustStream (th_main1, _V(0,0.3,-30), &smoke_main);
AddExhaustStream (th_main2, _V(0,0.3,+30), &smoke_main);
AddExhaustStream (th_main1, _V(0,0.3,-30), &fire_main);
AddExhaustStream (th_main2, _V(0,0.3,+30), &fire_main);
AddExhaustStream (th_main1, _V(0,0.3,-30), &steam_main);
AddExhaustStream (th_main2, _V(0,0.3,+30), &steam_main);
}
void JSLC_pad::clbkPostStep (double simtt, double simdt, double mjd)
{
if(is_visible)
{
// Create exhaust from flame trench
// dependant on launcher thrust level and height above launchpad (LM launcher is focus vehicle)
if (!launched & (has_exhaust == 1)){
double focus_alt = 0;
double LM_thrust_level = 0;
double exhaust_factor = 0;
double max_exhaust_alt = 150;
oapiGetFocusEngineStatus(&es);
LM_thrust_level = es.main;
oapiGetFocusAltitude(&focus_alt);
focus_alt = focus_alt-30;
if(focus_alt < 0) focus_alt = 0;
exhaust_factor = (max_exhaust_alt-focus_alt)/max_exhaust_alt;
SetThrusterLevel (th_main1, LM_thrust_level*exhaust_factor);
SetThrusterLevel (th_main2, LM_thrust_level*exhaust_factor);
if(focus_alt > max_exhaust_alt){
launched = true;
SetThrusterLevel (th_main1, 0);
SetThrusterLevel (th_main2, 0);
}
}
}