Traveller RPG Jump Distance Calculator
by ledlogic
HTML
<h1>Traveller RPG Jump Distance Calculator</h1>
<div class="if">
<label for="sname">System name</label>
<input type="text" size="20" id="sname" value="Merganser" />
</div>
<div class="if3">
<div class="if">
<label for="sd_au">Star Diameter [au]</label>
<input type="number" size="10" id="sd_au" value="0.00404" />
</div>
<div class="if">
<label for="pd_km">Planet Diameter [km]</label>
<input type="number" size="10" id="pd_km" value="12742" />
</div>
<div class="if">
<label for="po_au">Planet Orbit [au]</label>
<input type="number" size="10" id="po_au" value="0.22" />
</div>
<div class="if">
<label for="man">Manoeuvre Drive</label>
<input type="number" size="2" id="man" value="4" />
</div>
</div>
<div class="">
<button id="calc" class="clear">
Calc
</button>
</div>
<hr class="clear"/>
<div id="output"></div>
CSS
* {
font-family: Bahnschrift;
}
input {
font-size: 20px;
height: 24px;
border: 1px solid #060;
border-radius: 4px;
}
button {
font-size: 20px;
}
select {
font-size: 20px;
height: 28px;
border: 1px solid #060;
border-radius: 4px;
}
label {
color: #060;
font-weight: 800;
width: 100%;
display: inline-block;
}
textarea {
width: 100%;
height: 100px;
font-size: 20px;
border: 1px solid #060;
border-radius: 4px;
}
.if {
border: 1px solid #333333;
padding: 10px;
clear: both;
margin: 10px 0;
}
.if3 {
padding: 10px;
margin: 10px 0;
}
.clear {
clear: both;
}
.lots th,
.lots td {
border: 1px solid #333333;
padding: 4px;
}
.tonsExceeded {
color: #ff0000;
}
JavaScript
var AU_TO_KM = 1.496e+8;
var KM_TO_AU = 1/AU_TO_KM;
var ACC_KM_SEC = 9.8 / 1000.0;
function calcDist() {
var man = parseInt($("#man").val(),10);
var sd_au = parseFloat($("#sd_au").val(),10);
var sd_100_au = 100.0 * sd_au;
var sd_100_km = parseInt(AU_TO_KM * sd_100_au, 10);
var sd_time = 2 * Math.sqrt(sd_100_km / (man * ACC_KM_SEC)) / 3600;
var po_au = parseFloat($("#po_au").val(),10);
var po_matters = sd_100_au < po_au;
var pd_km = parseFloat($("#pd_km").val(),10);
var pd_au = pd_km * KM_TO_AU;
var pd_100_au = 100.0 * pd_au;
var pd_100_km = parseInt(AU_TO_KM * pd_100_au, 10);
var pd_time = 2 * Math.sqrt(pd_100_km / (man * ACC_KM_SEC)) / 3600;
var h = [];
h.push("<p>Star Diameter: " + sd_au.toPrecision(3) + " [au]</p>");
h.push("<p>Star Dist: " + sd_100_au.toPrecision(3) + " [au]</p>");
h.push("<p>Star Dist: " + sd_100_km.toLocaleString() + " [km]</p>");
if (!po_matters) {
h.push("<p>Travel Time at " + man + "G to safe jump outside Star: " + sd_time.toLocaleString() + " [h]</p>");
h.push("<p>Planet Orbit: " + po_au.toPrecision(3) + " [au]</p>");
h.push("<p>Planet matters?: " + (po_matters?"yes":"no") + " </p>");
h.push("<p>Planet Diameter: " + pd_au.toPrecision(3) + " [au]</p>");
h.push("<p>Planet Dist: " + pd_100_au.toPrecision(3) + " [au]</p>");
h.push("<p>Planet Dist: " + pd_100_km.toLocaleString() + " [km]</p>");
if (po_matters) {
h.push("<p>Travel Time at " + man + "G to safe jump outside Planet: " + pd_time.toLocaleString() + " [h]</p>");
}
$("#output").html(h.join("\n"));
}
$("#calc").on("click", calcDist)