Commit ee276548 authored by Daniel Hader's avatar Daniel Hader

keys can be used to navigate, zoom, and step through the simulation

parent c673562a
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<body> <body>
<script src="three.js" type="text/javascript"></script> <script src="three.js" type="text/javascript"></script>
<script src="tile.js" type="text/javascript"></script> <script src="tile.js" type="text/javascript"></script>
<script src="interface.js" type="text/javascript"></script>
<script src="main.js" type="text/javascript"></script> <script src="main.js" type="text/javascript"></script>
</body> </body>
</html> </html>
document.addEventListener('keydown', keydown);
document.addEventListener('keyup', keyup);
let keymap = {
"KeyW": "up",
"KeyS": "down",
"KeyA": "left",
"KeyD": "right",
"ArrowUp": "up",
"ArrowDown": "down",
"ArrowLeft": "left",
"ArrowRight": "right",
"KeyP": "zoom_in",
"KeyO": "zoom_out",
}
let keys = {
up: false,
down: false,
left: false,
right: false,
zoom_in: false,
zoom_out: false,
}
let zoom_linear = 1;
const CAMERA_SPEED = 0.02;
const ZOOM_MIN = -1;
const ZOOM_MAX = 6;
const ZOOM_SPEED = 0.1;
function update() {
if (keys.zoom_out) zoom_linear += ZOOM_SPEED;
if (keys.zoom_in) zoom_linear -= ZOOM_SPEED;
if (zoom_linear < ZOOM_MIN) zoom_linear = ZOOM_MIN;
if (zoom_linear > ZOOM_MAX) zoom_linear = ZOOM_MAX;
camera.zoom = Math.pow(2, -zoom_linear);
if (keys.up) camera.position.y -= CAMERA_SPEED / camera.zoom;
if (keys.down) camera.position.y += CAMERA_SPEED / camera.zoom;
if (keys.left) camera.position.x += CAMERA_SPEED / camera.zoom;
if (keys.right) camera.position.x -= CAMERA_SPEED / camera.zoom;
camera.updateProjectionMatrix();
}
function keyup(event) {
if (event.code in keymap) {
keys[keymap[event.code]] = false;
}
}
function keydown(event) {
if (event.code in keymap) {
keys[keymap[event.code]] = true;
}
if (event.code === "Space") {
system.step();
}
}
...@@ -6,22 +6,51 @@ document.body.appendChild(renderer.domElement); ...@@ -6,22 +6,51 @@ document.body.appendChild(renderer.domElement);
window.addEventListener('resize', resize, false); window.addEventListener('resize', resize, false);
const tile_types = [ const tile_types = [
new TileType("seed", "seed", "#ffffaa", { new TileType("seed", "seed", "#aaaaff", {
north: new Glue(2, "A"), north: new Glue(2, "A"),
east: new Glue(2, "B")}), east: new Glue(2, "B")}),
new TileType("Vertical", "V", "#ffaaff", { new TileType("Vertical", "V", "#ffaaff", {
north: new Glue(2, "A"),
east: new Glue(1, '1'),
south: new Glue(2, "A")}), south: new Glue(2, "A")}),
new TileType("Horizontal", "H", "#aaffff", {
north: new Glue(1, '0'),
east: new Glue(2, "B"),
west: new Glue(2, "B")}),
new TileType("Add 00", "0", "#cccccc", {
north: new Glue(1, "0"),
east: new Glue(1, "0"),
south: new Glue(1, "0"),
west: new Glue(1, "0")}),
new TileType("Add 01", "1", "#666666", {
north: new Glue(1, "1"),
east: new Glue(1, "0"),
south: new Glue(1, "0"),
west: new Glue(1, "1")}),
new TileType("Add 10", "1", "#666666", {
north: new Glue(1, "1"),
east: new Glue(1, "0"),
south: new Glue(1, "1"),
west: new Glue(1, "0")}),
new TileType("Add 11", "0", "#cccccc", {
north: new Glue(1, "0"),
east: new Glue(1, "1"),
south: new Glue(1, "1"),
west: new Glue(1, "1")}),
]; ];
system = new System(2, tile_types); system = new System(2, tile_types);
system.step();
camera.position.z = 2; camera.position.set(0, 0, 2);
camera.zoom = 0.5;
camera.updateProjectionMatrix(); camera.updateProjectionMatrix();
renderer.setClearColor(0x666666, 1); renderer.setClearColor(0xffffaa, 1);
resize(); resize();
animate(); animate();
...@@ -37,6 +66,9 @@ function resize() { ...@@ -37,6 +66,9 @@ function resize() {
function animate() { function animate() {
requestAnimationFrame(animate); requestAnimationFrame(animate);
update();
renderer.render(scene, camera); renderer.render(scene, camera);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment