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)