summaryrefslogtreecommitdiff
path: root/byow.js
diff options
context:
space:
mode:
authorCode WvS <code-wvs@quantentunnel.de>2015-01-25 16:30:56 +0100
committerCode WvS <code-wvs@quantentunnel.de>2015-01-25 16:30:56 +0100
commit5e25b1303319269ee44821d2a9592a441aa86cee (patch)
tree4cac497aec68491f7b65e6cc92bfa2782fa6d519 /byow.js
parent2ca378c50bf67b6af5e16ba72af81f4f84db308c (diff)
downloadsnap-byow-5e25b1303319269ee44821d2a9592a441aa86cee.tar.gz
snap-byow-5e25b1303319269ee44821d2a9592a441aa86cee.zip
first working version, WIP
Diffstat (limited to 'byow.js')
-rw-r--r--byow.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/byow.js b/byow.js
new file mode 100644
index 0000000..065372d
--- /dev/null
+++ b/byow.js
@@ -0,0 +1,71 @@
+var createGame = require('voxel-engine');
+var highlight = require('voxel-highlight');
+var player = require('voxel-player');
+var voxel = require('voxel');
+var fly = require('voxel-fly');
+var walk = require('voxel-walk');
+
+function generator(x, y, z) {
+ return y === 1 ? 1 : 0;
+}
+
+module.exports = function(setup) {
+ setup = setup || defaultSetup;
+ var options = {
+ generate: generator,//voxel.generator['Valley'],
+ chunkDistance: 2
+ };
+ // setup the game and add some trees
+ var game = createGame(options);
+ window.game = game;
+ gameWorld = document.createElement('div');
+ game.appendTo(gameWorld);
+ window.gameWorld = gameWorld;
+ if (game.notCapable()) return game;
+ var createPlayer = player(game);
+
+ var activeplayer = createPlayer('player.png');
+ window.gamePlayer = activeplayer;
+ activeplayer.possess();
+ activeplayer.yaw.position.set(2, 14, 4);
+
+ setup(game, activeplayer);
+
+ return game;
+};
+
+function defaultSetup(game, avatar) {
+ var makeFly = fly(game);
+ var target = game.controls.target();
+ game.flyer = makeFly(target);
+
+ // highlight blocks when you look at them, hold <Ctrl> for block placement
+ var blockPosPlace, blockPosErase;
+ var hl = game.highlighter = highlight(game, { color: 0xff0000 });
+ hl.on('highlight', function (voxelPos) { blockPosErase = voxelPos; });
+ hl.on('remove', function (voxelPos) { blockPosErase = null; });
+ hl.on('highlight-adjacent', function (voxelPos) { blockPosPlace = voxelPos; });
+ hl.on('remove-adjacent', function (voxelPos) { blockPosPlace = null; });
+
+ // block interaction stuff, uses highlight data
+ var currentMaterial = 1;
+
+ game.on('fire', function (target, state) {
+ var position = blockPosPlace;
+ if (position) {
+ game.createBlock(position, currentMaterial);
+ }
+ else {
+ position = blockPosErase;
+ if (position) game.setBlock(position, 0);
+ }
+ });
+
+ game.on('tick', function() {
+ walk.render(target.playerSkin);
+ var vx = Math.abs(target.velocity.x);
+ var vz = Math.abs(target.velocity.z);
+ if (vx > 0.001 || vz > 0.001) walk.stopWalking();
+ else walk.startWalking();
+ });
+}