highlight the voxel the player is currently looking at, along with the adjacent voxel (where a block would be placed) when the control key is down
npm install voxel-highlight
or just add to the package.json file of your voxel-engine project
var highlight = require('voxel-highlight')
var highlighter = highlight(game)
highlighter.on('highlight', function (voxelPosArray) {
console.log('highlighted voxel: ' + voxelPosArray)
})
or using as constructor:
var Highlight = require('voxel-highlight')
var highlighter = new Highlight(game)
options can be:
{
frequency: how often in milliseconds to highlight, default is 100
distance: how far in game distance things should be highlighted, default is 10
geometry: threejs geometry to use for the highlight, default is a cubegeometry
material: material to use with the geometry, default is a wireframe
wireframeLinewidth: if using default material wireframe, default is 3
wireframeOpacity: if using default material wireframe, default is 0.5
color: highlight cube color, default is 0x000000
animate: animate movement of highlight cuboid, default is false
adjacentActive: function to toggle adjacent highlight, default is { return game.controls.state.alt }
selectActive: function to toggle adjacent highlight, default is { return game.controls.state.select }
animateFunction: function to ease position changes, see default below
}
Default animation function:
opts.animateFunction = function (position, targetPosition, deltaTime) {
if (!position || !targetPosition || !deltaTime) return;
var rate = 10 // speed in voxels per second
if (Math.abs(targetPosition[0] - position.x) < 0.05
&& Math.abs(targetPosition[1] - position.y) < 0.05
&& Math.abs(targetPosition[2] - position.z) < 0.05) {
position.set(targetPosition[0], targetPosition[1], targetPosition[2])
return; // close enough to snap and be done
}
deltaTime = deltaTime / 1000 // usually around .016 seconds (60 FPS)
position.x += rate * deltaTime * (targetPosition[0] - position.x)
position.y += rate * deltaTime * (targetPosition[1] - position.y)
position.z += rate * deltaTime * (targetPosition[2] - position.z)
}
called when a voxel is highlighted
called when a voxel is un-highlighted
called when an adjacent voxel is highlighted
called when an adjacent voxel is un-highlighted
called when a selection of more than one voxel is highlighted. selectionBounds has .start and .end position arrays
called when a selection of more than one voxel is no longer highlighted. selectionBounds has .start and .end position arrays
check out voxel-hello-world for demo usage
BSD