Ejemplo n.º 1
0
function defaultSetup(game, avatar) {
  // 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 })

  window.addEventListener('keydown', function (ev) {
    // toggle between first and third person modes
    if (ev.keyCode === 'R'.charCodeAt(0)) avatar.toggle()

    // toggle fly mode
    // TODO: make it not suck
    else if (ev.keyCode === 'G'.charCodeAt(0)) {
      avatar.toggleFlight()
    }
  })

  // 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)
    }
  })

}
Ejemplo n.º 2
0
function defaultSetup(game, avatar, client) {
  // 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 })

  // toggle between first and third person modes
  window.addEventListener('keydown', function (ev) {
    if (ev.keyCode === 'R'.charCodeAt(0)) avatar.toggle()
  })

  // block interaction stuff, uses highlight data
  var currentMaterial = 1

  game.on('fire', function (target, state) {
    var position = blockPosPlace
    if (position) {
      game.createBlock(position, currentMaterial)
      client.emitter.emit('set', position, currentMaterial)
    } else {
      position = blockPosErase
      if (position) {
        game.setBlock(position, 0)
        console.log("Erasing point at " + JSON.stringify(position))
        client.emitter.emit('set', position, 0)
      }
    }
  })
}
Ejemplo n.º 3
0
function defaultSetup(game, avatar) {
  var target = game.controls.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; 
    data = world[ relativePosition(voxelPos).join("|") ]
    if (data) displayMetaData(data.name)
  });
  hl.on('remove', function (voxelPos) { 
    blockPosErase = null 
    hideMetaData()
  })
  hl.on('highlight-adjacent', function (voxelPos) { blockPosPlace = voxelPos })
  hl.on('remove-adjacent', function (voxelPos) { blockPosPlace = null })

  // toggle between first and third person modes
  window.addEventListener('keydown', function (ev) {
    if (ev.keyCode === 'R'.charCodeAt(0)) avatar.toggle()
  })

  // 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()
  })

}
Ejemplo n.º 4
0
module.exports = function(opts) {
  var defaults = {
    generate: voxel.generator['Valley'],
    chunkDistance: 2,
    materials: [
      ['grass', 'dirt', 'grass_dirt'],
      'obsidian',
      'brick',
      'grass',
      'plank'
    ],
    texturePath: texturePath,
    worldOrigin: [0, 0, 0],
    controls: { discreteFire: true }
  }
  opts = extend({}, defaults, opts || {})

  // setup the game and add some trees
  var game = createGame(opts)

  window.game = game // for debugging
  var container = opts.container || document.body

  game.appendTo(container)

  // create the player from a minecraft skin file and tell the
  // game to use it as the main player
  var createPlayer = player(game)
  var substack = createPlayer('player.png')
  substack.possess()
  substack.yaw.position.set(2, 14, 4)

  // highlight blocks when you look at them, hold <Ctrl> for block placement
  var blockPosPlace, blockPosErase
  var hl = game.highlighter = highlight(game, opts.highlightOpts || { 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 })

  // toggle between first and third person modes
  window.addEventListener('keydown', function (ev) {
    if (ev.keyCode === 'R'.charCodeAt(0)) substack.toggle()
  })

  // 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)
    }
  })

  return game
}
Ejemplo n.º 5
0
  function setup(game, avatar) {
    window.game = game
    
    peer.on('connection', function(conn) {
      var messages = document.querySelector('.messages')
      messages.innerHTML += 'connected! prepare to play<br>'
      setTimeout(hideWelcome, 2000)
      emitter.emit('connected')
      socket.ws.close()
      game.paused = false
      setTimeout(startWater, buildPhaseTime)
      avatar.position.copy({x: 45, y: 5, z: -5})
      avatar.rotation.y = 1.6100000000000003
      transmitStateStream(game, conn)
      conn.on('data', updateOpponent)
      conn.on('error', resetGame)
      conn.on('close', resetGame)
    })
    
    peer.on('error', resetGame)
    peer.on('close', resetGame)

    var editBuffer = []
    function updateBuffer(op) {
      editBuffer.unshift(op)
      if (editBuffer.length >= updateBufferSize) editBuffer = editBuffer.slice(0, 5)
      if (window.conn) {
        var msg = [
          'e'
        ]
        editBuffer.map(function(edit) {
          msg.push(edit.join(':'))
        })
        msg = msg.join('|')
        conn.send(msg)
      }
    }
    
    addLights(game)
    
    var blueVirus = createVirus({
      game: game,
      material: 3,
    })
    var toVirus = toWater(blueVirus, 3)

    game.on('tick', blueVirus.tick.bind(blueVirus))

    var greenVirus = createVirus({
      game: game,
      material: 5,
    })
    var toVirus = toWater(greenVirus, 5)

    game.blueVirus = blueVirus
    game.greenVirus = greenVirus

    game.on('tick', greenVirus.tick.bind(greenVirus))

    var start1 = [-40, 30, 0]
    var start2 = [40, 30, 0]

    game.setBlock(start1, 'yellow')
    game.setBlock(start2, 'yellow')

    game.setBlock([start1[0], start1[1] - 5, start1[2]], 'red')
    game.setBlock([start2[0], start2[1] - 5, start2[2]], 'red')

    function startWater() {
      blueVirus.infect([start1[0], start1[1] - 1, start1[2]])
      greenVirus.infect([start2[0], start2[1] - 1, start2[2]])
      setTimeout(countVoxels, 20000)
    }
    
    function countVoxels() {
      var bounds = b
      var l = bounds[0], h = bounds[1]
      var green = 0, blue = 0
      for(var z = l[1]; z <= h[1]; ++z) {
        for(var y = 0; y <= 30; ++y) {
          for(var x = l[0]; x <= h[0]; ++x) {
            var val = game.getBlock(x,y,z)
            if (val === 3) blue++
            if (val === 5) green++
          }
        }
      }
      gameMessages.innerHTML = "Results: Green blocks: " + green + ", Blue blocks: " + blue + ". Thanks for playing!"
    }
    
    window.countVoxels = countVoxels
    
    var gtarget = game.controls.target()
    gtarget.avatar.cameraInside.position.y = 25
    gtarget.avatar.cameraInside.position.z = 3
    gtarget.playerSkin.playerModel.position.y += 2
    
    avatar.position.copy({x: 2, y: 6, z: 4})
    game.voxels.removeAllListeners('missingChunk')

    var blockPosPlace, blockPosErase
    var hl = game.highlighter = highlight(game, { color: 0xFF0000, distance: 100, wireframeLinewidth: 5 })
    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 })
    
    game.on('fire', function (target, state) {
      var select = game.controls.state.select
      var position = blockPosPlace
      if (state.firealt) {
        var vec = game.cameraVector();
        var pos = game.cameraPosition();
        var placeLoc = game.raycast(pos, vec, 100).adjacent
        game.createBlock(placeLoc, 'red')
        updateBuffer(placeLoc, 2)
      } else if (position) {
        game.createBlock(position, 'red')
        checkAround(position)
        updateBuffer([position[0], position[1], position[2], 2])
      } else {
        position = blockPosErase
        var val = game.getBlock(position)
        if (position && val !== 4 && val !== 1) {
          game.setBlock(position, 0)
          checkAround(position)
          updateBuffer([position[0], position[1], position[2], 0])
        }
      }
    })
    
    // document.addEventListener('mousedown')

    document.querySelector('.instructions').innerHTML = document.querySelector('#loaded').innerHTML
    document.querySelector('.look').addEventListener('click', function(e) {
      document.querySelector('.look').style.display = 'none'
      var messages = document.querySelector('.messages')
      messages.innerHTML += 'waiting for opponent...<br>'
      emitter.emit('looking', id)
      emitter.on('nobody', function() {
        messages.innerHTML += 'you are the only one waiting...<br>'
      })
      emitter.on('peer', function(peerID) {
        messages.innerHTML += 'opponent found. trying to connect...<br>'
        var conn = peer.connect(peerID)
        conn.on('open', function() {
          messages.innerHTML += 'connected! prepare to play<br>'
          setTimeout(hideWelcome, 2000)
          socket.ws.close()
          setTimeout(startWater, buildPhaseTime)
          avatar.position.copy({x: -45, y: 5, z: -5})
          avatar.rotation.y = -1.6360000000000001
          emitter.emit('connected')
          transmitStateStream(game, conn)
          conn.on('data', updateOpponent)
        })
        conn.on('error', resetGame)
        conn.on('close', resetGame)
      })
    })
  }
Ejemplo n.º 6
0
  game.setBlock(pos,0);*/

  var vec = game.cameraVector()
  var pos = game.cameraPosition()
  var point = game.raycast(pos, vec, 100)
  if (! (!state.firealt && !state.alt)) {
    console.log("special circ!!!");
    game.createBlock(point.addSelf(vec.multiplyScalar(-game.cubeSize/2)), currentMaterial)
  }
  else if (point){
    game.setBlock(point, 0);
  }

  //playerPos: game.controls.target().avatar.position()
  /*var vec = game.cameraVector()
  var pos = game.cameraPosition()
  var point = game.raycast(pos, vec, 100)
  if (!point) return
  var erase = !state.firealt && !state.alt
  if (erase) {
    //erases the clicked block
    game.setBlock(point, 1)
  } else {
    game.setBlock(point,3);
    //game.createBlock(point.addSelf(vec.multiplyScalar(-game.cubeSize/2)), currentMaterial)
  }*/
});
highlight(game)
var container = document.querySelector('#container')
game.appendTo(container);
window.game=game;
Ejemplo n.º 7
0
Client.prototype.setup = function() {
  var self = this
  var baseClient = self.baseClient
  var game = baseClient.game
  var avatar = baseClient.avatar
  var connection = self.connection
  
  //initialize chat
  self.chat = chat({
    user: baseClient.name,
    element: document.getElementById('chat'),
    emitter: connection,
  })

  // initialize code editor
  self.codeEditor = codeEditor.initialize(game)
  self.codeBeam = codeBeam.initialize(self.codeEditor)

  // Add key binding (tilde/backtick) to toggle editor
  window.addEventListener('keydown',function(event) {
    // if key pressed is tilde key
    if (event.keyCode === 192) {
      // consume event
      event.stopPropagation()
      // when open...
      if (self.codeEditor.isOpen) {
        // close the editor
        self.codeEditor.close()
      // when closed...
      } else {
        // edit the current tool
        self.codeBeam.editTool()
      }
    }
  })

  // re-position the player if they fall off the screen
  rescue(game, {  
    dangerZone: {
      lower: {x: -Infinity, y: -Infinity, z: -Infinity},
      upper: {x: Infinity, y: -20, z: Infinity}
    },
    startingPosition: game.settings.avatarInitialPosition,
  })

  // highlight blocks when you look at them, hold <Ctrl> for block placement
  game.highlighter = highlight(game, { color: 0xff0000 })

  // toggle between first and third person modes
  window.addEventListener('keydown', function (event) {
    if (event.keyCode === 'R'.charCodeAt(0)) avatar.toggle()
  })

  //
  // setup toolbars
  //

  // block materials
  var blockSelector = toolbar({
    el: '#blocks',
    toolbarKeys: ['t','y','u','i','o','p','openbracket','closebracket','backslash',
                  'g','h','j','k','l','semicolon','singlequote']
  })
  blockSelector.setContent(game.materialNames.map(function(mat,id){
    if (Array.isArray(mat)) mat = mat[0]
    return {
      id: id+1,
      icon: 'textures/'+mat+'.png',
      label: mat,
    }
  }))
  blockSelector.on('select',function(selection){
    avatar.currentMaterial = Number(selection)
  })
  blockSelector.switchToolbar(0)
  
  // 'tools', interaction modes
  var toolSelector = toolbar({ el: '#tools' })
  toolSelector.setContent(playerTools.map(function(tool,index){
    var toolKey = (index+1)%10
    return {
      id: index,
      icon: 'img/numIcon-'+toolKey+'.gif',
      label: tool.name,
    }
  }))
  toolSelector.on('select',function(index){
    var newTool = playerTools[index]
    self.codeBeam.setCurrentTool(newTool)
  })
  toolSelector.switchToolbar(0)

  // game click event, run code
  game.on('fire', function runCode() {
    var isAltFire = Boolean(game.controls.state.alt || game.controls.state.firealt)
    game.highlighter.highlight()
    self.codeBeam.runCode({
      game: game,
      avatar: avatar,
      hitBlock: isAltFire ? game.highlighter.currVoxelAdj : game.highlighter.currVoxelPos,
      secondaryClick: isAltFire,
      client: self,
      setBlock: setBlock,
      getBlock: game.getBlock,
      require: require,
      createSpatialTrigger: createSpatialTrigger,
      openModVox: self.modvox.openModVox,
      setModVox: self.modvox.setModVox,
    })
  })
 
  //
  // CodeBeam methods
  //

  // setBlock method for codeBeam, adds blocks to a queue
  var pendingBlocks = 0
  function setBlock( position, value ) {
    pendingBlocks++
    setTimeout(function(){
      pendingBlocks--
      _setBlock(position,value)
    },pendingBlocks*100)
  }
  function _setBlock (position, value ) {
    // set local
    game.setBlock(position, value)
    // set remote
    connection.emit('set', position, value)
  }

  // create spatialTrigger
  function createSpatialTrigger(pos,size,enter,exit) {
    // sanitize handlers
    if (typeof enter !== 'function') enter = function(){}
    if (typeof exit !== 'function') exit = function(){}
    self._createSpatialTrigger({
      pos: pos,
      size: size,
      enter: enter,
      exit: exit,
    })
    // send remotely
    self.connection.emit('spatialTrigger', {
      pos: pos,
      size: size,
      enter: enter.toString(),
      exit: exit.toString(),
    })
  }

  // create entitiy
  function createEntity(pos,mesh) {
    
  }

  
}
Ejemplo n.º 8
0
import highlight from 'voxel-highlight';
import voxelEngine from '../voxelEngine';
import events from '../events';
import consts from '../constants';

var blockPosPlace, blockPosEdit;

export default {
  init() {
    var hl = voxelEngine.engine.highlighter = highlight(voxelEngine.engine, {
      color: 0xff0000
    });

    hl.on('highlight', function (voxelPos) {
      blockPosEdit = voxelPos;
      events.emit(consts.events.HOVER, {}, {position: voxelPos});
    });

    hl.on('remove', function (voxelPos) {
      blockPosEdit = null;
      events.emit(consts.events.LEAVE, {}, {position: voxelPos});
    });

    hl.on('highlight-adjacent', function (voxelPos) {
      blockPosPlace = voxelPos;
    });

    hl.on('remove-adjacent', function () {
      blockPosPlace = null;
    });
  },
    .factory('voxel.game', function() {
        var createGame = require('voxel-engine')
          , voxel = require('voxel')
          , toolbar = require('toolbar')
          , player = require('voxel-player')
          , createTerrain = require('voxel-perlin-terrain')
          , highlighter = require('voxel-highlight')
          , createTree = require('voxel-forest')
          , texturePath = require('painterly-textures')(__dirname)
          , blockSelector = toolbar({ el: '#tools' });

        // setup the game and add some trees
        var game = createGame({
            generateVoxelChunk: createTerrain({ scaleFactor: 10 }),
            chunkDistance: 2,
            materials: [
                'obsidian',
                ['grass', 'dirt', 'grass_dirt'],
                'brick',
                'grass',
                'plank'
            ],
            texturePath: texturePath,
            worldOrigin: [0, 0, 0],
            controls: { discreteFire: true }
        });

        // TODO: (conor) can I remove this? listed as needed for debugging...
        window.game = game; // for debugging

        for (var i = 0; i < 20; i++) {
            createTree(game, { bark: 5, leaves: 4 });
        }

        // create the player from a minecraft skin file and tell the
        // game to use it as the main player
        var createPlayer = player(game);
        var substack = createPlayer('../img/substack.png');
        substack.yaw.position.set(0, -1200, 0);
        substack.possess();

        // TODO: toggle between first and third person modes
        window.addEventListener('keydown', function (ev) {
            if (ev.keyCode === 'R'.charCodeAt(0)) substack.toggle();
        });

        // block interaction stuff
        var highlight = highlighter(game);
        var currentMaterial = 1;

        blockSelector.on('select', function(material) {
            material = +material; // cast to int
            if (material > -1) {
                currentMaterial = material;
            } else {
                currentMaterial = 1;
            }
        });

        // TODO: (conor) check what other events can be
        // used with game. Perhaps for animate?
        game.on('fire', function(target, state) {
            var vec = game.cameraVector();
            var pos = game.cameraPosition();
            var point = game.raycast(pos, vec, 100);
            if (!point) return ;
            var erase = !state.firealt && !state.alt;
            if (erase) {
                game.setBlock(point, 0);
            } else {
                game.createBlock(point.addSelf(vec.multiplyScalar(-game.cubeSize/2)), currentMaterial);
            }
        });

        return game;
    })
Ejemplo n.º 10
0
function defaultSetup(game, avatar, client) {
  // initialize code editor
  codeEditor.initialize(game)
  codeBeam.initialize(codeEditor)

  // 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 })

  // toggle between first and third person modes
  window.addEventListener('keydown', function (event) {
    if (event.keyCode === 'R'.charCodeAt(0)) avatar.toggle()
  })

  //
  // setup toolbars
  //

  // blocks
  var blockSelector = toolbar({
    el: '#blocks',
    toolbarKeys: ['t','y','u','i','o','p','openbracket','closebracket','backslash',
                  'g','h','j','k','l','semicolon','singlequote']
  })
  blockSelector.setContent(game.materialNames.map(function(mat,id){
    if (Array.isArray(mat)) mat = mat[0]
    return {
      id: id+1,
      icon: 'textures/'+mat+'.png',
      label: mat,
    }
  }))
  blockSelector.on('select',function(selection){
    avatar.currentMaterial = Number(selection)
  })
  blockSelector.switchToolbar(0)
  
  // "tools", interaction modes
  var toolSelector = toolbar({ el: '#tools' })
  toolSelector.setContent(playerTools.map(function(tool,index){
    var toolKey = (index+1)%10
    return {
      id: index,
      icon: 'img/numIcon-'+toolKey+'.gif',
      label: tool.name,
    }
  }))
  toolSelector.on('select',function(index){
    var newTool = playerTools[index]
    codeBeam.setCurrentTool(newTool)
  })
  toolSelector.switchToolbar(0)

  // game click event
  game.on('fire', function (target, state) {
    codeBeam.runCode({
      game: game,
      avatar: avatar,
      hitBlock: blockPosErase,
      neighborBlock: blockPosPlace,
      setBlock: setBlock,
    })
  })
 
  function setBlock( position, value ) {
    // set local
    game.setBlock(position, value)
    // set remote
    client.emitter.emit('set', position, value)
  }
}
Ejemplo n.º 11
0
    function startGame() {
        var defaults = {
            generate: voxel.generator['Valley'],
            chunkDistance: 2,
            materials: [
                ['grass', 'dirt', 'grass_dirt'],
                'obsidian',
                'brick',
                'grass',
                'plank'
            ],
            texturePath: texturePath,
            worldOrigin: [0, 0, 0],
            fogDisabled: true,
            controls: { discreteFire: true }
        };
        opts = extend({}, defaults, opts || {});

        // setup the game and add some trees
        var game = createGame(opts);
        window.game = game; // for debugging
        var container = opts.container || document.body;
        game.appendTo(container);

        // create the player from a minecraft skin file and tell the
        // game to use it as the main player
        var createPlayer = player(game);
        var substack = createPlayer('images/player.png');
        substack.yaw.position.set(0, 100, 0);
        substack.possess();

        // highlight blocks when you look at them, hold <Ctrl> for block placement
        var blockPosPlace, blockPosErase;
        var hl = game.highlighter = highlight(game, opts.highlightOpts || { 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; });

        window.addEventListener('keydown', function (ev) {
            // toggle between first and third person modes
            if (ev.keyCode === 'R'.charCodeAt(0)){ substack.toggle(); }
            // change put block type
            if (ev.keyCode === '1'.charCodeAt(0)){ currentMaterial = 1; }
            if (ev.keyCode === '2'.charCodeAt(0)){ currentMaterial = 2; }
            if (ev.keyCode === '3'.charCodeAt(0)){ currentMaterial = 3; }
            if (ev.keyCode === '4'.charCodeAt(0)){ currentMaterial = 4; }
            if (ev.keyCode === '5'.charCodeAt(0)){ currentMaterial = 5; }
            if (ev.keyCode === '6'.charCodeAt(0)){ currentMaterial = 6; }
            if (ev.keyCode === '7'.charCodeAt(0)){ currentMaterial = 7; }
            if (ev.keyCode === '8'.charCodeAt(0)){ currentMaterial = 8; }
            if (ev.keyCode === '9'.charCodeAt(0)){ currentMaterial = 9; }
            if (ev.keyCode === '0'.charCodeAt(0)){ currentMaterial = 10; }
        });

        // block interaction stuff, uses highlight data
        var currentMaterial = 2;

        game.on('fire', function (target, state) {
            var position = blockPosPlace;
            if (position) {
                console.debug(currentMaterial);
                game.createBlock(position, currentMaterial);
                movesList.push([position, currentMaterial]);
            }
            else {
                position = blockPosErase;
                if (position){
                    game.setBlock(position, 0);
                    movesList.push([position, 0]);
                }
            }
        });

    };
Ejemplo n.º 12
0
// for (var i = 0; i < 20; i++) createTree(game, { bark: 5, leaves: 4 })

// create the player from a minecraft skin file and tell the
// game to use it as the main player
var createPlayer = player(game)
var substack = createPlayer('substack.png')
substack.yaw.position.set(0, -1200, 0)
substack.possess()

// toggle between first and third person modes
window.addEventListener('keydown', function (ev) {
  if (ev.keyCode === 'R'.charCodeAt(0)) substack.toggle()
})

// block interaction stuff
var highlight = highlighter(game)
var currentMaterial = 1

blockSelector.on('select', function(material) {
  material = +material // cast to int
  if (material > -1) currentMaterial = material
  else currentMaterial = 1
})

game.on('fire', function(target, state) {
  var vec = game.cameraVector()
  var pos = game.cameraPosition()
  var point = game.raycast(pos, vec, 100)
  if (!point) return
  var erase = !state.firealt && !state.alt
  if (erase) {