HUD overhaul.
This commit is contained in:
+45
-67
@@ -4,14 +4,13 @@ declare function WaitForEngineStart{
|
||||
}
|
||||
|
||||
declare function GetDrag{
|
||||
parameter localGravity.
|
||||
return ship:sensors:acc:mag + localGravity.
|
||||
parameter lg.
|
||||
return ship:sensors:acc:mag + lg.
|
||||
}
|
||||
|
||||
declare function GetDragDir{
|
||||
parameter localGravity.
|
||||
parameter dir.
|
||||
return vDot(ship:sensors:acc, dir) + localGravity.
|
||||
parameter lg, dir.
|
||||
return vDot(ship:sensors:acc, dir) + lg.
|
||||
}
|
||||
|
||||
declare function AnyEngineActive{
|
||||
@@ -41,19 +40,18 @@ declare function GetIsp{
|
||||
}
|
||||
|
||||
declare function GetIspForStage{
|
||||
parameter engineStage.
|
||||
parameter pressure is 0.
|
||||
parameter eS, p is 0.
|
||||
LIST ENGINES IN egs.
|
||||
local totalThrust is GetThrustOfStage(engineStage, pressure).
|
||||
local totalThrust is GetThrustOfStage(eS, p).
|
||||
if totalThrust = 0{
|
||||
return 0.
|
||||
}
|
||||
local sum is 0.
|
||||
local weights is 0.
|
||||
for eng in egs{
|
||||
if eng:stage = engineStage {
|
||||
local w is eng:POSSIBLETHRUSTAT(pressure) / totalThrust.
|
||||
local ispW is eng:ispat(pressure) * w.
|
||||
if eng:stage = eS {
|
||||
local w is eng:POSSIBLETHRUSTAT(p) / totalThrust.
|
||||
local ispW is eng:ispat(p) * w.
|
||||
set sum to sum + ispW.
|
||||
set weights to weights + w.
|
||||
}
|
||||
@@ -73,70 +71,56 @@ declare function GetMaxMassFlow{
|
||||
}
|
||||
|
||||
declare function GetMaxMassFlowForStage{
|
||||
parameter engineStage.
|
||||
parameter eS.
|
||||
LIST ENGINES IN egs.
|
||||
local sum is 0.
|
||||
for eng in egs{
|
||||
if eng:stage = engineStage {
|
||||
if eng:stage = eS {
|
||||
set sum to sum + eng:maxmassflow.
|
||||
}
|
||||
}
|
||||
return sum.
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
declare function CalculateSuicideBurnDuration
|
||||
{
|
||||
declare function CalculateSuicideBurnDuration{
|
||||
parameter isp.
|
||||
return CalculateBurnDuration(verticalSpeed, isp, ship:mass, GetMaxMassFlow() * 1000).
|
||||
}
|
||||
|
||||
declare function CalculateBurnDuration
|
||||
{
|
||||
parameter dv.
|
||||
parameter burnIsp.
|
||||
parameter initialMass.
|
||||
parameter massFlow.
|
||||
declare function CalculateBurnDuration{
|
||||
parameter dv, burnIsp, iM, mF.
|
||||
|
||||
if burnIsp = 0 {
|
||||
return 0.
|
||||
}
|
||||
set dv to abs(dv).
|
||||
local exp is -dv / (burnIsp * constant:g0).
|
||||
local massRatio is constant:e ^ (-exp).
|
||||
local finalMass is initialMass / massRatio.
|
||||
local fuelUsed is initialMass - finalMass.
|
||||
local mR is constant:e ^ (-exp).
|
||||
local fM is iM / mR.
|
||||
local f is iM - fM.
|
||||
|
||||
if massFlow <= 0{
|
||||
if mF <= 0{
|
||||
return 0.
|
||||
}
|
||||
|
||||
return fuelUsed / massFlow.
|
||||
return f / mF.
|
||||
}
|
||||
|
||||
|
||||
declare function CalculateSuicideBurnAltitude
|
||||
{
|
||||
parameter vertSpeed.
|
||||
parameter localGravity.
|
||||
parameter tgtAltitude is 0.0.
|
||||
parameter drag is 0.0.
|
||||
parameter vS, lg, cAlt is 0.0, drag is 0.0.
|
||||
|
||||
local vertAcc is CalculateAverageDecceleration(localGravity, drag).
|
||||
local burnAltitude is ((vertSpeed^2) / (2 * (vertAcc))).
|
||||
return burnAltitude + tgtAltitude.
|
||||
local vertAcc is CalculateAverageDecceleration(lg, drag).
|
||||
local burnAltitude is ((vS^2) / (2 * (vertAcc))).
|
||||
return burnAltitude + cAlt.
|
||||
}
|
||||
|
||||
|
||||
|
||||
declare function CalculateAverageDecceleration{
|
||||
parameter localGravity.
|
||||
parameter drag is 0.
|
||||
local maxVertAcc is (ship:availablethrust / ship:mass) - localGravity.
|
||||
parameter lg.
|
||||
parameter d is 0.
|
||||
local maxVertAcc is (ship:availablethrust / ship:mass) - lg.
|
||||
|
||||
return maxVertAcc + drag.
|
||||
return maxVertAcc + d.
|
||||
}
|
||||
|
||||
declare function GetLocalGravity{
|
||||
@@ -149,20 +133,17 @@ declare function GetLocalGravity{
|
||||
}
|
||||
|
||||
declare function CalculateTimeToImpact{
|
||||
parameter vertSpeed.
|
||||
parameter curAltitude.
|
||||
parameter gravity.
|
||||
parameter tgtAltitude is 0.0.
|
||||
parameter vS, cAlt, cG, tAlt is 0.0.
|
||||
|
||||
if gravity <= 0 or curAltitude <= 0{
|
||||
if cG <= 0 or cAlt <= 0{
|
||||
return 0.0.
|
||||
}
|
||||
|
||||
local vs is abs(vertSpeed).
|
||||
local g is gravity.
|
||||
local hRel is curAltitude - tgtAltitude.
|
||||
local disc is ((vs^2) + (2 * g * hRel)).
|
||||
return (vs + sqrt(disc)) / g.
|
||||
set vS to abs(vS).
|
||||
local g is cG.
|
||||
local hRel is cAlt - tAlt.
|
||||
local disc is ((vS^2) + (2 * g * hRel)).
|
||||
return (vS + sqrt(disc)) / g.
|
||||
}
|
||||
|
||||
function CalculateMultiStageBurnDuration{
|
||||
@@ -170,54 +151,51 @@ function CalculateMultiStageBurnDuration{
|
||||
if ship:STAGEDELTAV(ship:stagenum):current >= dv {
|
||||
return CalculateBurnDuration(dv, GetIsp(), ship:mass, GetMaxMassFlow()).
|
||||
}else{
|
||||
local burnTime is 0.
|
||||
local bT is 0.
|
||||
local remDv is dv.
|
||||
from {local s is ship:stagenum. } until s = -1 step { set s to s-1.} do {
|
||||
if remDv <= 0 {
|
||||
return burnTime.
|
||||
return bT.
|
||||
}
|
||||
local cdv is ship:stagedeltav(s):current.
|
||||
local cmass is GetMassOfStage(s).
|
||||
local cflow is GetMaxMassFlowForStage(s).
|
||||
local cisp is GetIspForStage(s).
|
||||
local sdv is 0.
|
||||
print cdv.
|
||||
if cdv >= remDv {
|
||||
set sdv to remDv.
|
||||
}else{
|
||||
set sdv to cdv.
|
||||
}
|
||||
set burnTime to burnTime + CalculateBurnDuration(sdv, cisp, cmass, cflow).
|
||||
set bT to bT + CalculateBurnDuration(sdv, cisp, cmass, cflow).
|
||||
set remDv to remDv - cdv.
|
||||
}
|
||||
return burnTime.
|
||||
return bT.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function GetThrustOfStage {
|
||||
parameter st.
|
||||
parameter pressure is 0.
|
||||
parameter st, p is 0.
|
||||
|
||||
local totalThrust is 0.
|
||||
local tTh is 0.
|
||||
LIST ENGINES IN egs.
|
||||
for eng in egs{
|
||||
if eng:stage = st {
|
||||
set totalThrust to totalThrust + eng:POSSIBLETHRUSTAT(pressure).
|
||||
set tTh to tTh + eng:POSSIBLETHRUSTAT(p).
|
||||
}
|
||||
}
|
||||
return totalThrust.
|
||||
return tTh.
|
||||
}
|
||||
|
||||
function GetMassOfStage {
|
||||
parameter st.
|
||||
|
||||
local total is 0.
|
||||
local sum is 0.
|
||||
LIST PARTS IN allP.
|
||||
for p in allP {
|
||||
if p:stage <= st and p:DECOUPLEDIN < st {
|
||||
set total to total + p:mass.
|
||||
set sum to sum + p:mass.
|
||||
}
|
||||
}
|
||||
return total.
|
||||
return sum.
|
||||
}
|
||||
Reference in New Issue
Block a user