Crash and stress damage system: Difference between revisions

Jump to navigation Jump to search
m (→‎Background: minor edit)
Line 24: Line 24:
#
#
#
#
# Version 0.15
# Version 0.16
#
#
# License:
# License:
Line 290: Line 290:
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 == nil ? TRUE : (info[1] == nil ? TRUE : info[1].solid);
var solid = info == nil?TRUE:(info[1] == nil?TRUE:info[1].solid);
var speed = me._calcGroundSpeed();
var speed = me._calcGroundSpeed();


Line 296: Line 296:
var failure_modes = FailureMgr._failmgr.failure_modes;
var failure_modes = FailureMgr._failmgr.failure_modes;
    var mode_list = keys(failure_modes);
    var mode_list = keys(failure_modes);
    var probability = speed / 200.0; # 200kt will fail everything, 0kt will fail nothing.
    var probability = (speed * speed) / 40000.0;# 200kt will fail everything, 0kt will fail nothing.
 
   
    var hitStr = "something";
    var hitStr = "something";
    if(info != nil and info[1] != nil) {
    if(info != nil and info[1] != nil) {
    hitStr = info[1].names == nil ? "something" : info[1].names[0];
    hitStr = info[1].names == nil?"something":info[1].names[0];
    foreach(infoStr; info[1].names) {
    foreach(infoStr; info[1].names) {
    if(find('_', infoStr) == -1) {
    if(find('_', infoStr) == -1) {
Line 309: Line 309:
}
}
    # test for explosion
    # test for explosion
    if(probability > 1.0 and me.fdm.input.fuel.getValue() > 2500) {
    if(probability > 0.766 and me.fdm.input.fuel.getValue() > 2500) {
    # 200kt+ and fuel in tanks will explode the aircraft on impact.
    # 175kt+ and fuel in tanks will explode the aircraft on impact.
me.input.simCrashed.setBoolValue(TRUE);
    me.input.simCrashed.setBoolValue(TRUE);
me._explodeBegin("Aircraft hit " ~ hitStr ~ ".");
    me._explodeBegin("Aircraft hit "~hitStr~".");
    return;
    return;
    }
    }
Line 322: Line 322:
    }
    }


var str = "Aircraft hit " ~ hitStr ~ ".";
var str = "Aircraft hit "~hitStr~".";
me._output(str);
me._output(str);
} elsif (solid == TRUE) {
} elsif (solid == TRUE) {
Line 373: Line 373:
},
},
_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.setBoolValue(TRUE);
me.input.detachOn.setBoolValue(TRUE);
Line 402: Line 402:
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 == nil ? TRUE : (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 410: Line 410:
_testStress: func () {
_testStress: func () {
if (me._isRunning() == TRUE and me.wingsAttached == TRUE) {
if (me._isRunning() == TRUE and me.wingsAttached == TRUE) {
var gForce = me.fdm.input.Nz.getValue() == nil ? 1 : me.fdm.input.Nz.getValue();
var gForce = me.fdm.input.Nz.getValue() == nil?1:me.fdm.input.Nz.getValue();
var weight = me.fdm.input.weight.getValue();
var weight = me.fdm.input.weight.getValue();
var wingload = gForce * weight;
var wingload = gForce * weight;
574

edits

Navigation menu