574
edits
m (→How to install the current system on an aircraft: Removed reference to JSB) |
(→How to install the current system on an aircraft: version 0.13, with some improvements and bugfixes) |
||
Line 20: | Line 20: | ||
# | # | ||
# | # | ||
# Version 0. | # Version 0.13 | ||
# | # | ||
# License: | # License: | ||
Line 84: | Line 84: | ||
detachOn: "damage/sounds/detach-on", | detachOn: "damage/sounds/detach-on", | ||
explodeOn: "damage/sounds/explode-on", | explodeOn: "damage/sounds/explode-on", | ||
simCrashed: "sim/crashed", | |||
wildfire: "environment/wildfire/fire-on-crash", | |||
}; | }; | ||
foreach(var ident; keys(m.input)) { | foreach(var ident; keys(m.input)) { | ||
Line 105: | Line 107: | ||
m.lastMessageTime = 0; | m.lastMessageTime = 0; | ||
m._initProperties(); | |||
m._identifyGears(gears); | m._identifyGears(gears); | ||
m.setStressLimit(stressLimit); | m.setStressLimit(stressLimit); | ||
Line 147: | Line 149: | ||
props.globals.initNode(prop, TRUE, "BOOL"); | props.globals.initNode(prop, TRUE, "BOOL"); | ||
} else { | } else { | ||
props.globals.getNode(prop). | props.globals.getNode(prop).setBoolValue(TRUE);#in case this gets initialized empty from a recorder signal or MP alias. | ||
} | } | ||
Line 205: | Line 207: | ||
me.lastMessageTime = 0; | me.lastMessageTime = 0; | ||
me.repairing = TRUE; | me.repairing = TRUE; | ||
me.input.simCrashed.setBoolValue(FALSE); | |||
me.repairTimer.restart(10.0); | me.repairTimer.restart(10.0); | ||
}, | }, | ||
_finishRepair: func () { | _finishRepair: func () { | ||
me.repairing = FALSE; | me.repairing = FALSE; | ||
}, | |||
_initProperties: func () { | |||
me.input.crackOn.setBoolValue(FALSE); | |||
me.input.creakOn.setBoolValue(FALSE); | |||
me.input.crackVol.setDoubleValue(0.0); | |||
me.input.creakVol.setDoubleValue(0.0); | |||
me.input.wCrashOn.setBoolValue(FALSE); | |||
me.input.crashOn.setBoolValue(FALSE); | |||
me.input.detachOn.setBoolValue(FALSE); | |||
me.input.explodeOn.setBoolValue(FALSE); | |||
}, | }, | ||
_identifyGears: func (gears) { | _identifyGears: func (gears) { | ||
Line 284: | Line 296: | ||
var probability = speed / 200.0;# 200kt will fail everything, 0kt will fail nothing. | var probability = speed / 200.0;# 200kt will fail everything, 0kt will fail nothing. | ||
var hitStr = "something"; | |||
if(info != nil and info[1] != nil) { | |||
hitStr = info[1].names == nil?"something":info[1].names[0]; | |||
foreach(infoStr; info[1].names) { | |||
if(find('_', infoStr) == -1) { | |||
hitStr = infoStr; | |||
break; | |||
} | |||
} | |||
} | |||
# test for explosion | # test for explosion | ||
if(probability > 1.0 and me.fdm.input.fuel.getValue() > 2500) { | if(probability > 1.0 and me.fdm.input.fuel.getValue() > 2500) { | ||
# 200kt+ and fuel in tanks will explode the aircraft on impact. | # 200kt+ and fuel in tanks will explode the aircraft on impact. | ||
me._explodeBegin(); | me.input.simCrashed.setBoolValue(TRUE); | ||
me._explodeBegin("Aircraft hit "~hitStr~"."); | |||
return; | return; | ||
} | } | ||
Line 296: | Line 319: | ||
} | } | ||
} | } | ||
var str = "Aircraft hit "~ | |||
var str = "Aircraft hit "~hitStr~"."; | |||
me._output(str); | me._output(str); | ||
} elsif (solid == TRUE) { | } elsif (solid == TRUE) { | ||
var pos= geo.Coord.new().set_latlon(lat, lon); | # The aircraft is burning and will ignite the ground | ||
if(me.input.wildfire.getValue() == TRUE) { | |||
var pos= geo.Coord.new().set_latlon(lat, lon); | |||
wildfire.ignite(pos, 1); | |||
} | |||
} | } | ||
if(solid == TRUE) { | if(solid == TRUE) { | ||
Line 310: | Line 337: | ||
_impactSoundWaterBegin: func (speed) { | _impactSoundWaterBegin: func (speed) { | ||
if (speed > 5) {#check if sound already running? | if (speed > 5) {#check if sound already running? | ||
me.input.wCrashOn. | me.input.wCrashOn.setBoolValue(TRUE); | ||
me.soundWaterTimer.restart(3); | me.soundWaterTimer.restart(3); | ||
} | } | ||
}, | }, | ||
_impactSoundWaterEnd: func () { | _impactSoundWaterEnd: func () { | ||
me.input.wCrashOn. | me.input.wCrashOn.setBoolValue(FALSE); | ||
}, | }, | ||
_impactSoundBegin: func (speed) { | _impactSoundBegin: func (speed) { | ||
if (speed > 5) { | if (speed > 5) { | ||
me.input.crashOn. | me.input.crashOn.setBoolValue(TRUE); | ||
me.soundTimer.restart(3); | me.soundTimer.restart(3); | ||
} | } | ||
}, | }, | ||
_impactSoundEnd: func () { | _impactSoundEnd: func () { | ||
me.input.crashOn. | me.input.crashOn.setBoolValue(FALSE); | ||
}, | }, | ||
_explodeBegin: func() { | _explodeBegin: func(str) { | ||
me.input.explodeOn. | me.input.explodeOn.setBoolValue(TRUE); | ||
me.exploded = TRUE; | me.exploded = TRUE; | ||
var failure_modes = FailureMgr._failmgr.failure_modes; | var failure_modes = FailureMgr._failmgr.failure_modes; | ||
Line 336: | Line 363: | ||
} | } | ||
me._output(" | me._output(str~" and exploded.", TRUE); | ||
me.explodeTimer.restart(3); | me.explodeTimer.restart(3); | ||
}, | }, | ||
_explodeEnd: func () { | _explodeEnd: func () { | ||
me.input.explodeOn. | me.input.explodeOn.setBoolValue(FALSE); | ||
}, | }, | ||
_stressDamage: func (str) { | _stressDamage: func (str) { | ||
me._output("Aircraft damaged: Wings broke off, due to "~str~" G forces."); | me._output("Aircraft damaged: Wings broke off, due to "~str~" G forces."); | ||
me.input.detachOn. | me.input.detachOn.setBoolValue(TRUE); | ||
FailureMgr.set_failure_level(me.fdm.wingsFailureID, 1); | FailureMgr.set_failure_level(me.fdm.wingsFailureID, 1); | ||
Line 354: | Line 381: | ||
}, | }, | ||
_stressDamageEnd: func () { | _stressDamageEnd: func () { | ||
me.input.detachOn. | me.input.detachOn.setBoolValue(FALSE); | ||
}, | }, | ||
_output: func (str, override = FALSE) { | _output: func (str, override = FALSE) { | ||
Line 373: | Line 400: | ||
var lon = me.input.lon.getValue(); | var lon = me.input.lon.getValue(); | ||
var info = geodinfo(lat, lon); | var info = geodinfo(lat, lon); | ||
var solid = info[1] == nil?TRUE:info[1].solid; | var solid = info==nil?TRUE:(info[1] == nil?TRUE:info[1].solid); | ||
if(solid == FALSE) { | if(solid == FALSE) { | ||
me._impactDamage(); | me._impactDamage(); | ||
Line 399: | Line 426: | ||
} | } | ||
} else { | } else { | ||
me.input.crackOn. | me.input.crackOn.setBoolValue(FALSE); | ||
me.input.creakOn. | me.input.creakOn.setBoolValue(FALSE); | ||
#me.input.trembleOn.setValue(0); | #me.input.trembleOn.setValue(0); | ||
} | } | ||
Line 408: | Line 435: | ||
#me.input.trembleOn.setValue(1); | #me.input.trembleOn.setValue(1); | ||
var tremble_max = math.sqrt((wingload - (wingLoadLimit * 0.5)) / (wingLoadLimit * 0.5)); | var tremble_max = math.sqrt((wingload - (wingLoadLimit * 0.5)) / (wingLoadLimit * 0.5)); | ||
#me.input.trembleMax. | #me.input.trembleMax.setDoubleValue(1); | ||
if (wingload > (wingLoadLimit * 0.75)) { | if (wingload > (wingLoadLimit * 0.75)) { | ||
#tremble_max = math.sqrt((wingload - (wingLoadLimit * 0.5)) / (wingLoadLimit * 0.5)); | #tremble_max = math.sqrt((wingload - (wingLoadLimit * 0.5)) / (wingLoadLimit * 0.5)); | ||
me.input.creakVol. | me.input.creakVol.setDoubleValue(tremble_max); | ||
me.input.creakOn. | me.input.creakOn.setBoolValue(TRUE); | ||
if (wingload > (wingLoadLimit * 0.90)) { | if (wingload > (wingLoadLimit * 0.90)) { | ||
me.input.crackOn. | me.input.crackOn.setBoolValue(TRUE); | ||
me.input.crackVol. | me.input.crackVol.setDoubleValue(tremble_max); | ||
if (wingload > wingLoadLimit) { | if (wingload > wingLoadLimit) { | ||
me.input.crackVol. | me.input.crackVol.setDoubleValue(1); | ||
me.input.creakVol. | me.input.creakVol.setDoubleValue(1); | ||
#me.input.trembleMax. | #me.input.trembleMax.setDoubleValue(1); | ||
return TRUE; | return TRUE; | ||
} | } | ||
} else { | } else { | ||
me.input.crackOn. | me.input.crackOn.setBoolValue(FALSE); | ||
} | } | ||
} else { | } else { | ||
me.input.creakOn. | me.input.creakOn.setBoolValue(FALSE); | ||
} | } | ||
} else { | } else { | ||
me.input.crackOn. | me.input.crackOn.setBoolValue(FALSE); | ||
me.input.creakOn. | me.input.creakOn.setBoolValue(FALSE); | ||
#me.input.trembleOn.setValue(0); | #me.input.trembleOn.setValue(0); | ||
} | } | ||
Line 492: | Line 519: | ||
convert: func () { | convert: func () { | ||
call(fdmProperties.convert, [], me); | call(fdmProperties.convert, [], me); | ||
me.input.downFps = props.Node.new(). | me.input.downFps = props.Node.new().setDoubleValue(0); | ||
}, | }, | ||
fps2kt: func (fps) { | fps2kt: func (fps) { |
edits