summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--byow.js38
-rw-r--r--gui.js56
-rw-r--r--objects.js159
-rw-r--r--package.json3
4 files changed, 192 insertions, 64 deletions
diff --git a/byow.js b/byow.js
index 065372d..da84e82 100644
--- a/byow.js
+++ b/byow.js
@@ -1,16 +1,34 @@
-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');
+window.createGame = require('voxel-engine');
+window.highlight = require('voxel-highlight');
+window.player = require('voxel-player');
+window.voxel = require('voxel');
+window.fly = require('voxel-fly');
+window.walk = require('voxel-walk');
+window.skin = require('minecraft-skin');
function generator(x, y, z) {
return y === 1 ? 1 : 0;
}
module.exports = function(setup) {
- setup = setup || defaultSetup;
+ function generator(x, y, z) {
+ return y === 1 ? 1 : 0;
+ }
+
+ // BYOW changes
+ var options = {
+ generate: generator,
+ chunkDistance: 2
+ };
+ window.game = createGame(options);
+ window.gameWorld = document.createElement('div');
+ window.game.appendTo(window.gameWorld);
+ window.createPlayer = window.player(window.game);
+ window.gamePlayer = createPlayer('greg.png');
+ window.gamePlayer.possess();
+ window.gamePlayer.yaw.position.set(2, 14, 4);
+ defaultSetup(window.game, window.gamePlayer);
+ /*
var options = {
generate: generator,//voxel.generator['Valley'],
chunkDistance: 2
@@ -24,14 +42,16 @@ module.exports = function(setup) {
if (game.notCapable()) return game;
var createPlayer = player(game);
- var activeplayer = createPlayer('player.png');
+ var activeplayer = createPlayer('greg.png');
+ window.createPlayer = createPlayer;
window.gamePlayer = activeplayer;
activeplayer.possess();
activeplayer.yaw.position.set(2, 14, 4);
- setup(game, activeplayer);
+ defaultSetup(game, activeplayer);
return game;
+ */
};
function defaultSetup(game, avatar) {
diff --git a/gui.js b/gui.js
index ee5cd60..569e580 100644
--- a/gui.js
+++ b/gui.js
@@ -2953,6 +2953,62 @@ IDE_Morph.prototype.openProjectString = function (str) {
};
IDE_Morph.prototype.rawOpenProjectString = function (str) {
+ // BYOW changes
+ // TODO too messy, split things up function
+ function generator(x, y, z) {
+ return y === 1 ? 1 : 0;
+ }
+ 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();
+ });
+ }
+
+ window.game = window.gameWorld = undefined;
+
+ var options = {
+ generate: generator,
+ chunkDistance: 2
+ };
+ window.game = createGame(options);
+ window.gameWorld = document.createElement('div');
+ window.game.appendTo(window.gameWorld);
+ window.createPlayer = window.player(window.game);
+ window.gamePlayer = createPlayer('greg.png');
+ window.gamePlayer.possess();
+ window.gamePlayer.yaw.position.set(2, 14, 4);
+ defaultSetup(window.game, window.gamePlayer);
+
this.toggleAppMode(false);
this.spriteBar.tabBar.tabTo('scripts');
StageMorph.prototype.hiddenPrimitives = {};
diff --git a/objects.js b/objects.js
index 67d6982..c60653b 100644
--- a/objects.js
+++ b/objects.js
@@ -1189,43 +1189,38 @@ SpriteMorph.prototype.initBlocks = function () {
/* Snap! - Build Your Own World blocks */
playerMove: {
- only: SpriteMorph,
type: 'command',
category: 'player',
spec: 'move x %n y %n z %n'
},
playerMoveTo: {
- only: SpriteMorph,
type: 'command',
category: 'player',
spec: 'move to x %n y %n z %n'
},
getPlayerPosition: {
- only: SpriteMorph,
type: 'reporter',
category: 'player',
spec: 'position'
},
playerPOV: {
- only: SpriteMorph,
+ only: StageMorph,
type: 'command',
category: 'player',
spec: 'set point of view to %s' // TODO
},
playerTogglePOV: {
- only: SpriteMorph,
+ only: StageMorph,
type: 'command',
category: 'player',
spec: 'toggle view'
},
setPlayerRotation: {
- only: SpriteMorph,
type: 'command',
category: 'player',
spec: 'set rotation to x %n y %n z %n'
},
getPlayerRotation: {
- only: SpriteMorph,
type: 'command',
category: 'player',
spec: 'get rotation'
@@ -1398,6 +1393,28 @@ SpriteMorph.prototype.init = function (globals) {
this.changed();
this.drawNew();
this.changed();
+
+ // BYOW changes
+ var playerSkin = window.skin(window.game.THREE, 'player.png',
+ {scale: new window.game.THREE.Vector3(0.04, 0.04, 0.04)});
+ var player = playerSkin.mesh;
+ var physics = window.game.makePhysical(player);
+ physics.playerSkin = playerSkin;
+
+ player.position.set(0, 2, 0);
+
+ window.game.scene.add(player);
+ window.game.addItem(physics);
+
+ physics.yaw = player;
+ physics.pitch = player.head;
+ physics.subjectTo(window.game.gravity);
+ physics.blocksCreation = true;
+
+ this.player = physics;
+ console.log("Player created");//DEBUG
+ console.log(this.name);
+ console.log(globals);
};
// SpriteMorph duplicating (fullCopy)
@@ -2188,9 +2205,6 @@ SpriteMorph.prototype.blockTemplates = function (category) {
blocks.push(block('playerMoveTo'));
blocks.push(block('getPlayerPosition'));
blocks.push('=');
- blocks.push(block('playerPOV'));
- blocks.push(block('playerTogglePOV'));
- blocks.push('=');
blocks.push(block('setPlayerRotation'));
blocks.push(block('getPlayerRotation'));
@@ -4317,6 +4331,56 @@ SpriteMorph.prototype.doScreenshot = function (imgSource, data) {
this.addCostume(costume);
};
+SpriteMorph.prototype.playerMove = function (deltaX, deltaY, deltaZ) {
+ this.player.yaw.position.x += deltaX;
+ this.player.yaw.position.y += deltaY;
+ this.player.yaw.position.z += deltaZ;
+};
+
+SpriteMorph.prototype.playerMoveTo = function (posX, posY, posZ) {
+ this.player.yaw.position.x = posX;
+ this.player.yaw.position.y = posY;
+ this.player.yaw.position.z = posZ;
+};
+
+SpriteMorph.prototype.getPlayerPosition = function () {
+ var vecPos = this.player.avatar.position;
+ return [vecPos.x, vecPos.y, vecPos.z];
+};
+
+SpriteMorph.prototype.playerPOV = function (mode) { // TODO
+ if (mode == 'first' || mode == 'third') {
+ this.player.pov(mode);
+ } else {
+ throw new Error('Must be either "first" or "third"!');
+ }
+};
+
+SpriteMorph.prototype.playerTogglePOV = function () {
+ this.player.toggle();
+};
+
+SpriteMorph.prototype.setPlayerRotation = function (posX, posY, posZ) {
+ this.player.avatar.rotation.set(posX, posY, posZ);
+};
+
+SpriteMorph.prototype.getPlayerRotation = function () {
+ var vecRotation = this.player.avatar.rotation;
+ return [vecRotation.x, vecRotation.y, vecRotation.z];
+};
+
+SpriteMorph.prototype.worldSetBlock = function (posX, posY, posZ, material) {
+ var world = window.game;
+ var pos = [posX, posY, posZ];
+ world.setBlock(pos, material);
+};
+
+SpriteMorph.prototype.worldGetBlock = function (posX, posY, posZ) {
+ var world = window.game;
+ var pos = [posX, posY, posZ];
+ world.getBlock(pos);
+};
+
// SpriteHighlightMorph /////////////////////////////////////////////////
// SpriteHighlightMorph inherits from Morph:
@@ -4418,6 +4482,9 @@ StageMorph.prototype.init = function (globals) {
this.acceptsDrops = false;
this.setColor(new Color(255, 255, 255));
this.fps = this.frameRate;
+
+ this.player = window.gamePlayer;
+ this.player.possess();
};
// StageMorph scaling
@@ -4936,58 +5003,32 @@ StageMorph.prototype.removeAllClones = function () {
this.cloneCount = 0;
};
-StageMorph.prototype.playerMove = function (deltaX, deltaY, deltaZ) {
- var player = window.gamePlayer;
- player.move(deltaX, deltaY, deltaZ);
-};
+StageMorph.prototype.playerMove
+ = SpriteMorph.prototype.playerMove;
-StageMorph.prototype.playerMoveTo = function (posX, posY, posZ) {
- var player = window.gamePlayer;
- player.moveTo(posX, posY, posZ);
-};
+StageMorph.prototype.playerMoveTo
+ = SpriteMorph.prototype.playerMoveTo;
-StageMorph.prototype.getPlayerPosition = function () {
- var game = window.game;
- var vecPos = game.controls.target().avatar.position;
- return [vecPos.x, vecPos.y, vecPos.z];
-};
+StageMorph.prototype.getPlayerPosition
+ = SpriteMorph.prototype.getPlayerPosition;
-StageMorph.prototype.playerPOV = function (mode) { // TODO
- var player = window.gamePlayer;
- if (mode == 'first' || mode == 'third') {
- player.pov(mode);
- } else {
- throw new Error('Must be either "first" or "third"!');
- }
-};
+StageMorph.prototype.playerPOV
+ = SpriteMorph.prototype.playerPOV;
-StageMorph.prototype.playerTogglePOV = function () {
- var player = window.gamePlayer;
- player.toggle();
-};
+StageMorph.prototype.playerTogglePOV
+ = SpriteMorph.prototype.playerTogglePOV;
-StageMorph.prototype.setPlayerRotation = function (posX, posY, posZ) {
- var world = window.game;
- world.controls.target().avatar.rotation.set(posX, posY, posZ);
-};
+StageMorph.prototype.setPlayerRotation
+ = SpriteMorph.prototype.setPlayerRotation;
-StageMorph.prototype.getPlayerRotation = function () {
- var world = window.game;
- var vecRotation = world.controls.target().avatar.rotation;
- return [vecRotation.x, vecRotation.y, vecRotation.z];
-};
+StageMorph.prototype.getPlayerRotation
+ = SpriteMorph.prototype.getPlayerRotation;
-StageMorph.prototype.worldSetBlock = function (posX, posY, posZ, material) {
- var world = window.game;
- var pos = [posX, posY, posZ];
- world.setBlock(pos, material);
-};
+StageMorph.prototype.worldSetBlock
+ = SpriteMorph.prototype.worldSetBlock;
-StageMorph.prototype.worldGetBlock = function (posX, posY, posZ) {
- var world = window.game;
- var pos = [posX, posY, posZ];
- world.getBlock(pos);
-};
+StageMorph.prototype.worldGetBlock
+ = SpriteMorph.prototype.worldGetBlock;
// StageMorph block templates
@@ -5429,6 +5470,16 @@ StageMorph.prototype.blockTemplates = function (category) {
blocks.push(button);
} else if (cat == 'player') {
+ blocks.push(block('playerMove'));
+ blocks.push(block('playerMoveTo'));
+ blocks.push(block('getPlayerPosition'));
+ blocks.push('=');
+ blocks.push(block('playerPOV'));
+ blocks.push(block('playerTogglePOV'));
+ blocks.push('=');
+ blocks.push(block('setPlayerRotation'));
+ blocks.push(block('getPlayerRotation'));
+
} else if (cat == 'world') {
blocks.push(block('worldSetBlock'));
diff --git a/package.json b/package.json
index 141629a..0f69205 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,8 @@
"voxel-highlight": "0.0.10",
"voxel-player": "0.1.0",
"voxel-fly": "0.1.2",
- "voxel-walk": "0.0.5"
+ "voxel-walk": "0.0.5",
+ "minecraft-skin": "0.1.2"
},
"devDependencies": {
"browserify": "8.1.1",