mirror of https://github.com/dirtbags/tanks.git
281 lines
10 KiB
Plaintext
281 lines
10 KiB
Plaintext
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Tank Debugger</title>
|
|
<link rel="stylesheet" href="style.css" type="text/css">
|
|
<script type="application/javascript" src="tanks.js"></script>
|
|
<script type="application/javascript" src="jstanks.js"></script>
|
|
<style type="text/css">
|
|
body {
|
|
max-width: 100%;
|
|
}
|
|
#preview {
|
|
float: left;
|
|
}
|
|
#config {
|
|
float: left;
|
|
}
|
|
#sensors input {
|
|
width: 5em;
|
|
}
|
|
#code {
|
|
float: left;
|
|
}
|
|
#submit {
|
|
width: 40em;
|
|
}
|
|
textarea {
|
|
min-width: 50em;
|
|
min-height: 20em;
|
|
}
|
|
td {
|
|
text-align: left;
|
|
}
|
|
</style>
|
|
<script type="application/javascript" src="designer.js"></script>
|
|
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
|
|
<script type="application/javascript">
|
|
window.onload = function() { design(); update(); };
|
|
function onSubmit() {
|
|
if ($('[name="name"]').val() === "") {
|
|
$('#submit-feedback').html("No name?");
|
|
return;
|
|
}
|
|
$('#submit-feedback').html("Submitting...");
|
|
|
|
// http://stackoverflow.com/questions/169506/obtain-form-input-fields-using-jquery
|
|
var values = {};
|
|
$.each($('#form').serializeArray(), function(i, field) {
|
|
values[field.name] = field.value;
|
|
});
|
|
|
|
var request = $.ajax({
|
|
accept: "text/plain",
|
|
url: "upload.cgi",
|
|
type: "POST",
|
|
dataType: "text",
|
|
data: values
|
|
});
|
|
|
|
request.done(function(msg) {
|
|
$('#submit-feedback').html(msg);
|
|
});
|
|
request.fail(function(jqXHR, status) {
|
|
// TODO: red on error?
|
|
$('#submit-feedback').html(jqXHR.responseText);
|
|
});
|
|
};
|
|
function onRetrieve() {
|
|
$('#submit-feedback').html("Retrieving...");
|
|
|
|
var tokenprefix = "state/" + $('[name="token"]').val() + "/";
|
|
|
|
var makerequest = function(name) {
|
|
return $.ajax({
|
|
accept: "text/plain",
|
|
url: tokenprefix + name,
|
|
dataType: "text",
|
|
cache: false
|
|
});
|
|
};
|
|
var setval = function(name, val) {
|
|
$('[name="' + name + '"]').val(val);
|
|
};
|
|
|
|
var request = makerequest("name");
|
|
request.done(function(msg) {
|
|
$('#submit-feedback').html("");
|
|
setval("name", msg);
|
|
|
|
request = makerequest("author");
|
|
request.done(function(msg) { setval("author", msg); } );
|
|
request = makerequest("color");
|
|
request.done(function(msg) { setval("color", msg.replace(/[\r\n]/g, '')); update(); } );
|
|
request = makerequest("program");
|
|
request.done(function(msg) { setval("program", msg); } );
|
|
var sensorfunc = function(id) {
|
|
return function(msg) {
|
|
var vals = msg.replace(/[\r\n]/g, '').split(" ");
|
|
setval("s"+id+"r", vals[0]);
|
|
setval("s"+id+"a", vals[1]);
|
|
setval("s"+id+"w", vals[2]);
|
|
$('[name="' + "s"+id+"t" + '"]').attr('checked', vals[3] != 0);
|
|
update();
|
|
};
|
|
};
|
|
for (var i = 0; i < 10; i++) {
|
|
request = makerequest("sensor" + i);
|
|
request.done(sensorfunc(i));
|
|
}
|
|
});
|
|
|
|
request.fail(function(jqXHR, status) {
|
|
// TODO: red on error?
|
|
$('#submit-feedback').html("error (bad token?)");
|
|
});
|
|
};
|
|
</script>
|
|
</head>
|
|
<body style="background: #222; color: #bbb;">
|
|
<h1>Tank Debugger</h1>
|
|
<div id="game_box"><canvas id="battlefield" style="border: 2px solid green;" width="450" height="450"></canvas></div>
|
|
<p>
|
|
<input type="button" onclick="resetTanks();" value="Run"> (Remember to submit (below) when you're done!)
|
|
</p>
|
|
<p id="debug">[<tt>debug!</tt> puts things here, remember to remove it before submitting]</p>
|
|
<form id="form">
|
|
<div id="stuff">
|
|
<div id="code">
|
|
<textarea id="program" name="program" rows="20" cols="80">get-turret 12 + set-turret! ( Rotate turret )
|
|
37 40 set-speed! ( Go in circles )
|
|
0 sensor? { fire! } if ( Fire if turret sensor triggered )
|
|
1 sensor? { -50 50 set-speed! } if ( Turn if collision sensor triggered )
|
|
</textarea><br>
|
|
<fieldset id="submit">
|
|
<p>
|
|
<input type="button" value="Submit" onclick="onSubmit();">
|
|
<input type="button" value="Retrieve" onclick="onRetrieve();">
|
|
<span id="submit-feedback"> </span>
|
|
</p>
|
|
|
|
<p>
|
|
Before you can get going with a tank, you need a token. If you
|
|
need a token, just ask one of the dirtbags.
|
|
</p>
|
|
|
|
<legend>Information</legend>
|
|
<table>
|
|
<tr>
|
|
<td>Token:</td>
|
|
<td><input name="token" type="password"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tank name:</td>
|
|
<td><input name="name"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Author:</td>
|
|
<td><input name="author"> (eg. Joe Cool
|
|
<joe@cool.cc>)</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
<div id="preview"><canvas id="design"></canvas><p id="debug"></p></div>
|
|
<div id="config">
|
|
<fieldset id="metadata">
|
|
<legend>Information</legend>
|
|
<table>
|
|
<tr>
|
|
<td>Color:</td>
|
|
<td><input name="color" type="color" value="#c0c0c0"
|
|
onchange="update();"> (eg. #c7e148)</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset id="sensors">
|
|
<legend>Sensors</legend>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<td>#</td>
|
|
<td>Range</td>
|
|
<td>Angle</td>
|
|
<td>Width</td>
|
|
<td>Turret?</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr>
|
|
<td>0</td>
|
|
<td><input name="s0r" type="number" min="0" max="100" onchange="update();" value="50"></td>
|
|
<td><input name="s0a" type="number" min="-359" max="359" onchange="update();" value="0"></td>
|
|
<td><input name="s0w" type="number" min="-359" max="359" onchange="update();" value="7"></td>
|
|
<td><input name="s0t" type="checkbox" onchange="update();" checked="1"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>1</td>
|
|
<td><input name="s1r" type="number" min="0" max="100" onchange="update();" value="30"></td>
|
|
<td><input name="s1a" type="number" min="-359" max="359" onchange="update();" value="0"></td>
|
|
<td><input name="s1w" type="number" min="-359" max="359" onchange="update();" value="90"></td>
|
|
<td><input name="s1t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>2</td>
|
|
<td><input name="s2r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s2a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s2w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s2t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>3</td>
|
|
<td><input name="s3r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s3a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s3w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s3t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>4</td>
|
|
<td><input name="s4r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s4a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s4w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s4t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>5</td>
|
|
<td><input name="s5r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s5a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s5w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s5t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>6</td>
|
|
<td><input name="s6r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s6a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s6w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s6t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>7</td>
|
|
<td><input name="s7r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s7a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s7w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s7t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>8</td>
|
|
<td><input name="s8r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s8a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s8w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s8t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>9</td>
|
|
<td><input name="s9r" type="number" min="0" max="100" onchange="update();"></td>
|
|
<td><input name="s9a" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s9w" type="number" min="-359" max="359" onchange="update();"></td>
|
|
<td><input name="s9t" type="checkbox" onchange="update();"></td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
include(nav.html.inc)
|
|
</body>
|
|
</html>
|
|
|