#############################################################################
#### Helijah                                                     08-2020 ####
####                                                             03-2021 ####
#### Quelques propriétés utiles                                          ####
#############################################################################

var convert = func {
  ###########################################################################
  var rpm0 = getprop("/engines/engine[0]/rpm");
  if ( ! rpm0 ) {
    rpm0 = 0;
  }
  var cht0 = getprop("/engines/engine[0]/cht-degC");
  if ( ! cht0 ) {
    cht0 = 0;
  }
  var egt0 = getprop("/engines/engine[0]/egt-degC");
  if ( ! egt0 ) {
    egt0 = 0;
  }
  var mp0 = getprop("/engines/engine[0]/mp-osi");
  if (! mp0 ) {
    mp0 = 0;
  }
  var run0 = getprop("/engines/engine[0]/running");
  if (! run0 ) {
    run0 = 0;
  }
  var flow0 = getprop("/engines/engine[0]/fuel-flow-gph");
  if ( ! flow0 ) {
    flow0 = 0;
  }
  var oilt0 = getprop("/engines/engine[0]/oil-temperature");
  if ( ! oilt0 ) {
    oilt0 = 0;
  }
  ###########################################################################
  var rpm1 = getprop("/engines/engine[1]/rpm");
  if ( ! rpm1 ) {
    rpm1 = 0;
  }
  var cht1 = getprop("/engines/engine[1]/cht-degC");
  if ( ! cht1 ) {
    cht1 = 0;
  }
  var egt1 = getprop("/engines/engine[1]/egt-degC");
  if ( ! egt1 ) {
    egt1 = 0;
  }
  var mp1 = getprop("/engines/engine[1]/mp-osi");
  if (! mp1 ) {
    mp1 = 0;
  }
  var run1 = getprop("/engines/engine[1]/running");
  if (! run1 ) {
    run1 = 0;
  }
  var flow1 = getprop("/engines/engine[1]/fuel-flow-gph");
  if ( ! flow1 ) {
    flow1 = 0;
  }
  var oilt1 = getprop("/engines/engine[1]/oil-temperature");
  if ( ! oilt1 ) {
    oilt1 = 0;
  }
  ###########################################################################
  var rpm2 = getprop("/engines/engine[2]/rpm");
  if ( ! rpm2 ) {
    rpm2 = 0;
  }
  var cht2 = getprop("/engines/engine[2]/cht-degC");
  if ( ! cht2 ) {
    cht2 = 0;
  }
  var egt2 = getprop("/engines/engine[2]/egt-degC");
  if ( ! egt2 ) {
    egt2 = 0;
  }
  var mp2 = getprop("/engines/engine[2]/mp-osi");
  if (! mp2 ) {
    mp2 = 0;
  }
  var run2 = getprop("/engines/engine[2]/running");
  if (! run2 ) {
    run2 = 0;
  }
  var flow2 = getprop("/engines/engine[2]/fuel-flow-gph");
  if ( ! flow2 ) {
    flow2 = 0;
  }
  var oilt2 = getprop("/engines/engine[2]/oil-temperature");
  if ( ! oilt2 ) {
    oilt2 = 0;
  }
  ###########################################################################
  var rpm3 = getprop("/engines/engine[3]/rpm");
  if ( ! rpm3 ) {
    rpm3 = 0;
  }
  var cht3 = getprop("/engines/engine[3]/cht-degC");
  if ( ! cht3 ) {
    cht3 = 0;
  }
  var egt3 = getprop("/engines/engine[3]/egt-degC");
  if ( ! egt3 ) {
    egt3 = 0;
  }
  var mp3 = getprop("/engines/engine[3]/mp-osi");
  if (! mp3 ) {
    mp3 = 0;
  }
  var run3 = getprop("/engines/engine[3]/running");
  if (! run3 ) {
    run3 = 0;
  }
  var flow3 = getprop("/engines/engine[3]/fuel-flow-gph");
  if ( ! flow3 ) {
    flow3 = 0;
  }
  var oilt3 = getprop("/engines/engine[3]/oil-temperature");
  if ( ! oilt3 ) {
    oilt3 = 0;
  }
  ###########################################################################
  var rpm4 = getprop("/engines/engine[4]/rpm");
  if ( ! rpm4 ) {
    rpm4 = 0;
  }
  var cht4 = getprop("/engines/engine[4]/cht-degC");
  if ( ! cht4 ) {
    cht4 = 0;
  }
  var egt4 = getprop("/engines/engine[4]/egt-degC");
  if ( ! egt4 ) {
    egt4 = 0;
  }
  var mp4 = getprop("/engines/engine[4]/mp-osi");
  if (! mp4 ) {
    mp4 = 0;
  }
  var run4 = getprop("/engines/engine[4]/running");
  if (! run4 ) {
    run4 = 0;
  }
  var flow4 = getprop("/engines/engine[4]/fuel-flow-gph");
  if ( ! flow4 ) {
    flow4 = 0;
  }
  var oilt4 = getprop("/engines/engine[4]/oil-temperature");
  if ( ! oilt4 ) {
    oilt4 = 0;
  }
  ###########################################################################
  var rpm5 = getprop("/engines/engine[5]/rpm");
  if ( ! rpm5 ) {
    rpm5 = 0;
  }
  var cht5 = getprop("/engines/engine[5]/cht-degC");
  if ( ! cht5 ) {
    cht5 = 0;
  }
  var egt5 = getprop("/engines/engine[5]/egt-degC");
  if ( ! egt5 ) {
    egt5 = 0;
  }
  var mp5 = getprop("/engines/engine[5]/mp-osi");
  if (! mp5 ) {
    mp5 = 0;
  }
  var run5 = getprop("/engines/engine[5]/running");
  if (! run5 ) {
    run5 = 0;
  }
  var flow5 = getprop("/engines/engine[5]/fuel-flow-gph");
  if ( ! flow5 ) {
    flow5 = 0;
  }
  var oilt5 = getprop("/engines/engine[5]/oil-temperature");
  if ( ! oilt5 ) {
    oilt5 = 0;
  }
  ###########################################################################
  var oat = getprop("/environment/temperature-degc");
  if ( ! oat ) {
    oat = 0;
  }
  var ias = getprop("/instrumentation/airspeed-indicator/indicated-speed-kt");
  if ( ! ias ) {
    ias = 0;
  }

  var mb0 = getprop("/engines/engine[0]/torque-ftlb");
  if ( ! mb0 ) {
    mb0 = 0;
  }
  var mb1 = getprop("/engines/engine[1]/torque-ftlb");
  if ( ! mb1 ) {
    mb1 = 0;
  }
  var mb2 = getprop("/engines/engine[2]/torque-ftlb");
  if ( ! mb2 ) {
    mb2 = 0;
  }
  var mb3 = getprop("/engines/engine[3]/torque-ftlb");
  if ( ! mb3 ) {
    mb3 = 0;
  }
  var mb4 = getprop("/engines/engine[4]/torque-ftlb");
  if ( ! mb4 ) {
    mb4 = 0;
  }
  var mb5 = getprop("/engines/engine[5]/torque-ftlb");
  if ( ! mb5 ) {
    mb5 = 0;
  }

  var fuel_pres0 = 0.0;
  var oil_pres0 = 0.0;
  var fuel_pres1 = 0.0;
  var oil_pres1 = 0.0;
  var fuel_pres2 = 0.0;
  var oil_pres2 = 0.0;
  var fuel_pres3 = 0.0;
  var oil_pres3 = 0.0;
  var fuel_pres4 = 0.0;
  var oil_pres4 = 0.0;
  var fuel_pres5 = 0.0;
  var oil_pres5 = 0.0;
  ###########################################################################

  if ( mp0 < 10) {
     mp0 = 10;
  }
  if ( mp1 < 10) {
     mp1 = 10;
  }
  if ( mp2 < 10) {
     mp2 = 10;
  }
  if ( mp3 < 10) {
     mp3 = 10;
  }
  if ( mp4 < 10) {
     mp4 = 10;
  }
  if ( mp5 < 10) {
     mp5 = 10;
  }

  #Engine 0
  if (run0) {
    cht0  = cht0 + (mp0 * 8 + oat - ias/3 - cht0) / 250;
    egt0  = egt0 + ((mp0 * 30 + cht0 * 2) * mp0 / (flow0 * 2 + 1) - egt0) / 100;
    oilt0 = oilt0 +(rpm0 / 25 + oat - oilt0) / 250;
  } else {
    if ( ! cht0  ) {
      cht0 = oat;
    }
    if ( ! egt0  ) {
      egt0 = oat;
    }
    if ( ! oilt0 ) {
      oilt0 = oat;
    }
    cht0 = cht0 + (oat - cht0)/100;
    egt0 = egt0 + (oat - egt0)/100;
    oilt0 = oilt0 + (oat - oilt0)/100;
  }
  #Engine 1
  if (run1) {
    cht1  = cht1 + (mp1 * 8 + oat - ias/3 - cht1) / 250;
    egt1  = egt1 + ((mp1 * 30 + cht1 * 2) * mp1 / (flow1 * 2 + 1) - egt1) / 100;
    oilt1 = oilt1 +(rpm1 / 25 + oat - oilt1) / 250;
  } else {
    if ( ! cht1  ) {
      cht1 = oat;
    }
    if ( ! egt1  ) {
      egt1 = oat;
    }
    if ( ! oilt1 ) {
      oilt1 = oat;
    }
    cht1 = cht1 + (oat - cht1)/100;
    egt1 = egt1 + (oat - egt1)/100;
    oilt1 = oilt1 + (oat - oilt1)/100;
  }
  #Engine 2
  if (run2) {
    cht2  = cht2 + (mp2 * 8 + oat - ias/3 - cht2) / 250;
    egt2  = egt2 + ((mp2 * 30 + cht2 * 2) * mp2 / (flow2 * 2 + 1) - egt2) / 100;
    oilt2 = oilt2 +(rpm2 / 25 + oat - oilt2) / 250;
  } else {
    if ( ! cht2  ) {
      cht2 = oat;
    }
    if ( ! egt2  ) {
      egt2 = oat;
    }
    if ( ! oilt2 ) {
      oilt2 = oat;
    }
    cht2 = cht2 + (oat - cht2)/100;
    egt2 = egt2 + (oat - egt2)/100;
    oilt2 = oilt2 + (oat - oilt2)/100;
  }
  #Engine 3
  if (run3) {
    cht3  = cht3 + (mp3 * 8 + oat - ias/3 - cht3) / 250;
    egt3  = egt3 + ((mp3 * 30 + cht3 * 2) * mp3 / (flow3 * 2 + 1) - egt3) / 100;
    oilt3 = oilt3 +(rpm3 / 25 + oat - oilt3) / 250;
  } else {
    if ( ! cht3  ) {
      cht3 = oat;
    }
    if ( ! egt3  ) {
      egt3 = oat;
    }
    if ( ! oilt3 ) {
      oilt3 = oat;
    }
    cht3 = cht3 + (oat - cht3)/100;
    egt3 = egt3 + (oat - egt3)/100;
    oilt3 = oilt3 + (oat - oilt3)/100;
  }
  #Engine 4
  if (run4) {
    cht4  = cht4 + (mp4 * 8 + oat - ias/3 - cht4) / 250;
    egt4  = egt4 + ((mp4 * 30 + cht4 * 2) * mp4 / (flow4 * 2 + 1) - egt4) / 100;
    oilt4 = oilt4 +(rpm4 / 25 + oat - oilt4) / 250;
  } else {
    if ( ! cht4  ) {
      cht4 = oat;
    }
    if ( ! egt4  ) {
      egt4 = oat;
    }
    if ( ! oilt4 ) {
      oilt4 = oat;
    }
    cht4 = cht4 + (oat - cht4)/100;
    egt4 = egt4 + (oat - egt4)/100;
    oilt4 = oilt4 + (oat - oilt4)/100;
  }
  #Engine 5
  if (run5) {
    cht5  = cht5 + (mp5 * 8 + oat - ias/3 - cht5) / 250;
    egt5  = egt5 + ((mp5 * 30 + cht5 * 2) * mp5 / (flow5 * 2 + 1) - egt5) / 100;
    oilt5 = oilt5 +(rpm5 / 25 + oat - oilt5) / 250;
  } else {
    if ( ! cht5  ) {
      cht5 = oat;
    }
    if ( ! egt5  ) {
      egt5 = oat;
    }
    if ( ! oilt5 ) {
      oilt5 = oat;
    }
    cht5 = cht5 + (oat - cht5)/100;
    egt5 = egt5 + (oat - egt5)/100;
    oilt5 = oilt5 + (oat - oilt5)/100;
  }

  #Engine 0
  if (rpm0 > 100.0) {
    fuel_pres0 = rpm0 / 100;
    oil_pres0 = rpm0 / 25;
  }
  #Engine 1
  if (rpm1 > 100.0) {
    fuel_pres1 = rpm1 / 100;
    oil_pres1 = rpm1 / 25;
  }
  #Engine 2
  if (rpm2 > 100.0) {
    fuel_pres2 = rpm2 / 100;
    oil_pres2 = rpm2 / 25;
  }
  #Engine 3
  if (rpm3 > 100.0) {
    fuel_pres3 = rpm3 / 100;
    oil_pres3 = rpm3 / 25;
  }
  #Engine 4
  if (rpm4 > 100.0) {
    fuel_pres4 = rpm4 / 100;
    oil_pres4 = rpm4 / 25;
  }
  #Engine 5
  if (rpm5 > 100.0) {
    fuel_pres5 = rpm5 / 100;
    oil_pres5 = rpm5 / 25;
  }

  setprop("/engines/engine[0]/oil-pressure-psi", oil_pres0);
  setprop("/engines/engine[0]/fuel-pressure-psi", fuel_pres0);

  setprop("/engines/engine[1]/oil-pressure-psi", oil_pres1);
  setprop("/engines/engine[1]/fuel-pressure-psi", fuel_pres1);

  setprop("/engines/engine[2]/oil-pressure-psi", oil_pres2);
  setprop("/engines/engine[2]/fuel-pressure-psi", fuel_pres2);

  setprop("/engines/engine[3]/oil-pressure-psi", oil_pres3);
  setprop("/engines/engine[3]/fuel-pressure-psi", fuel_pres3);

  setprop("/engines/engine[4]/oil-pressure-psi", oil_pres3);
  setprop("/engines/engine[4]/fuel-pressure-psi", fuel_pres3);

  setprop("/engines/engine[5]/oil-pressure-psi", oil_pres3);
  setprop("/engines/engine[5]/fuel-pressure-psi", fuel_pres3);

  setprop("/engines/engine[0]/cht-degC", cht0);
  setprop("/engines/engine[0]/oil-temperature", oilt0);
  setprop("/engines/engine[0]/egt-degC", egt0);
  setprop("/engines/engine[0]/egt-degf-calc", egt0 * 9/5 + 32);

  setprop("/engines/engine[1]/cht-degC", cht1);
  setprop("/engines/engine[1]/oil-temperature", oilt1);
  setprop("/engines/engine[1]/egt-degC", egt1);
  setprop("/engines/engine[1]/egt-degf-calc", egt1 * 9/5 + 32);

  setprop("/engines/engine[2]/cht-degC", cht2);
  setprop("/engines/engine[2]/oil-temperature", oilt2);
  setprop("/engines/engine[2]/egt-degC", egt2);
  setprop("/engines/engine[2]/egt-degf-calc", egt2 * 9/5 + 32);

  setprop("/engines/engine[3]/cht-degC", cht3);
  setprop("/engines/engine[3]/oil-temperature", oilt3);
  setprop("/engines/engine[3]/egt-degC", egt3);
  setprop("/engines/engine[3]/egt-degf-calc", egt3 * 9/5 + 32);

  setprop("/engines/engine[4]/cht-degC", cht4);
  setprop("/engines/engine[4]/oil-temperature", oilt4);
  setprop("/engines/engine[4]/egt-degC", egt4);
  setprop("/engines/engine[4]/egt-degf-calc", egt4 * 9/5 + 32);

  setprop("/engines/engine[5]/cht-degC", cht5);
  setprop("/engines/engine[5]/oil-temperature", oilt5);
  setprop("/engines/engine[5]/egt-degC", egt5);
  setprop("/engines/engine[5]/egt-degf-calc", egt5 * 9/5 + 32);

  setprop("/systems/electrical/amp", (rpm0 + rpm1 + rpm2 + rpm3 + rpm4 + rpm5) / 100 );

  ##################################################
  # Torque -> Pourcent by Helijah : Max 4094 -> 100%
  ##################################################
  var torqpourcent = mb0  * 0.0244259892526;
  setprop("/engines/engine[0]/torque-pourcent", torqpourcent);
  var smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[0]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[0]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[0]/Torque/unit1", chr(smb[2]));

  torqpourcent = mb1  * 0.0244259892526;
  setprop("/engines/engine[1]/torque-pourcent", torqpourcent);
  smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[1]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[1]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[1]/Torque/unit1", chr(smb[2]));

  torqpourcent = mb2  * 0.0244259892526;
  setprop("/engines/engine[2]/torque-pourcent", torqpourcent);
  smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[2]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[2]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[2]/Torque/unit1", chr(smb[2]));

  torqpourcent = mb3  * 0.0244259892526;
  setprop("/engines/engine[3]/torque-pourcent", torqpourcent);
  smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[3]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[3]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[3]/Torque/unit1", chr(smb[2]));

  torqpourcent = mb4  * 0.0244259892526;
  setprop("/engines/engine[4]/torque-pourcent", torqpourcent);
  smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[4]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[4]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[4]/Torque/unit1", chr(smb[2]));

  torqpourcent = mb5  * 0.0244259892526;
  setprop("/engines/engine[5]/torque-pourcent", torqpourcent);
  smb = sprintf("%03.f", torqpourcent);

  setprop("/engines/engine[5]/Torque/unit100", chr(smb[0]));
  setprop("/engines/engine[5]/Torque/unit10", chr(smb[1]));
  setprop("/engines/engine[5]/Torque/unit1", chr(smb[2]));
  ##################################################

  setprop("/engines/engine[0]/egt-degC", convertTemp(getprop("/engines/engine[0]/egt-degf")));
  setprop("/engines/engine[0]/oil-temperature-degC", convertTemp(getprop("/engines/engine[0]/oil-temperature-degf")));

  setprop("/engines/engine[1]/egt-degC", convertTemp(getprop("/engines/engine[1]/egt-degf")));
  setprop("/engines/engine[1]/oil-temperature-degC", convertTemp(getprop("/engines/engine[1]/oil-temperature-degf")));

  setprop("/engines/engine[2]/egt-degC", convertTemp(getprop("/engines/engine[2]/egt-degf")));
  setprop("/engines/engine[2]/oil-temperature-degC", convertTemp(getprop("/engines/engine[2]/oil-temperature-degf")));

  setprop("/engines/engine[3]/egt-degC", convertTemp(getprop("/engines/engine[3]/egt-degf")));
  setprop("/engines/engine[3]/oil-temperature-degC", convertTemp(getprop("/engines/engine[3]/oil-temperature-degf")));

  setprop("/engines/engine[4]/egt-degC", convertTemp(getprop("/engines/engine[4]/egt-degf")));
  setprop("/engines/engine[4]/oil-temperature-degC", convertTemp(getprop("/engines/engine[4]/oil-temperature-degf")));

  setprop("/engines/engine[5]/egt-degC", convertTemp(getprop("/engines/engine[5]/egt-degf")));
  setprop("/engines/engine[5]/oil-temperature-degC", convertTemp(getprop("/engines/engine[5]/oil-temperature-degf")));

  setprop("/engines/engine[0]/itt-norm", getprop("/engines/engine[0]/cht-degC") / 100);
  setprop("/engines/engine[1]/itt-norm", getprop("/engines/engine[1]/cht-degC") / 100);
  setprop("/engines/engine[2]/itt-norm", getprop("/engines/engine[2]/cht-degC") / 100);
  setprop("/engines/engine[3]/itt-norm", getprop("/engines/engine[3]/cht-degC") / 100);
  setprop("/engines/engine[4]/itt-norm", getprop("/engines/engine[4]/cht-degC") / 100);
  setprop("/engines/engine[5]/itt-norm", getprop("/engines/engine[5]/cht-degC") / 100);
}

var convertTemp = func(degF) {
  var degC = 0;
  if ( degF != nil ) {
    #print(degF);
    degC = (degF - 32) * 5/9;
  }
  return degC;
}

###  Main loop ###
var update_convert = func {
  convert();
  settimer(update_convert, 0);
}
setlistener("/sim/signals/fdm-initialized", update_convert);
