diff options
| author | Code WvS <code-wvs@quantentunnel.de> | 2015-01-25 18:43:48 +0100 |
|---|---|---|
| committer | Code WvS <code-wvs@quantentunnel.de> | 2015-01-25 18:43:48 +0100 |
| commit | 7c567632f21d37509b656cf820ffbbc08e3d98f2 (patch) | |
| tree | 5e75eb9b5bfd7a71a022b34c59f7ac8881da060d | |
| parent | 60002bda7ca804808dcfae82bc46847068a2f917 (diff) | |
| download | snap-byow-7c567632f21d37509b656cf820ffbbc08e3d98f2.tar.gz snap-byow-7c567632f21d37509b656cf820ffbbc08e3d98f2.zip | |
make every sprite represent a player; stage gets the cam
| -rw-r--r-- | byow.js | 38 | ||||
| -rw-r--r-- | gui.js | 56 | ||||
| -rw-r--r-- | objects.js | 159 | ||||
| -rw-r--r-- | package.json | 3 |
4 files changed, 192 insertions, 64 deletions
@@ -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) { @@ -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 = {}; @@ -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", |
