allow adding and deleting spheres

This commit is contained in:
Seth Alves 2015-08-31 18:00:31 -07:00
parent 54ddcf2841
commit 6096c20db0

View file

@ -12,9 +12,12 @@ var toolWidth = 50;
var addingVoxels = false; var addingVoxels = false;
var deletingVoxels = false; var deletingVoxels = false;
var addingSpheres = false;
var deletingSpheres = false;
offAlpha = 0.5; var offAlpha = 0.5;
onAlpha = 0.9; var onAlpha = 0.9;
var editSphereRadius = 3.0;
function floorVector(v) { function floorVector(v) {
return {x: Math.floor(v.x), y: Math.floor(v.y), z: Math.floor(v.z)}; return {x: Math.floor(v.x), y: Math.floor(v.y), z: Math.floor(v.z)};
@ -30,6 +33,8 @@ var toolBar = (function () {
activeButton, activeButton,
addVoxelButton, addVoxelButton,
deleteVoxelButton, deleteVoxelButton,
addSphereButton,
deleteSphereButton,
addTerrainButton; addTerrainButton;
function initialize() { function initialize() {
@ -66,6 +71,24 @@ var toolBar = (function () {
visible: false visible: false
}); });
addSphereButton = toolBar.addTool({
imageURL: toolIconUrl + "sphere-add.svg",
subImage: { x: 0, y: Tool.IMAGE_WIDTH, width: Tool.IMAGE_WIDTH, height: Tool.IMAGE_HEIGHT },
width: toolWidth,
height: toolHeight,
alpha: offAlpha,
visible: false
});
deleteSphereButton = toolBar.addTool({
imageURL: toolIconUrl + "sphere-delete.svg",
subImage: { x: 0, y: Tool.IMAGE_WIDTH, width: Tool.IMAGE_WIDTH, height: Tool.IMAGE_HEIGHT },
width: toolWidth,
height: toolHeight,
alpha: offAlpha,
visible: false
});
addTerrainButton = toolBar.addTool({ addTerrainButton = toolBar.addTool({
imageURL: toolIconUrl + "voxel-terrain.svg", imageURL: toolIconUrl + "voxel-terrain.svg",
subImage: { x: 0, y: Tool.IMAGE_WIDTH, width: Tool.IMAGE_WIDTH, height: Tool.IMAGE_HEIGHT }, subImage: { x: 0, y: Tool.IMAGE_WIDTH, width: Tool.IMAGE_WIDTH, height: Tool.IMAGE_HEIGHT },
@ -78,6 +101,22 @@ var toolBar = (function () {
that.setActive(false); that.setActive(false);
} }
function disableAllButtons() {
addingVoxels = false;
deletingVoxels = false;
addingSpheres = false;
deletingSpheres = false;
toolBar.setAlpha(offAlpha, addVoxelButton);
toolBar.setAlpha(offAlpha, deleteVoxelButton);
toolBar.setAlpha(offAlpha, addSphereButton);
toolBar.setAlpha(offAlpha, deleteSphereButton);
toolBar.selectTool(addVoxelButton, false);
toolBar.selectTool(deleteVoxelButton, false);
toolBar.selectTool(addSphereButton, false);
toolBar.selectTool(deleteSphereButton, false);
}
that.setActive = function(active) { that.setActive = function(active) {
if (active != isActive) { if (active != isActive) {
@ -91,6 +130,8 @@ var toolBar = (function () {
that.showTools = function(doShow) { that.showTools = function(doShow) {
toolBar.showTool(addVoxelButton, doShow); toolBar.showTool(addVoxelButton, doShow);
toolBar.showTool(deleteVoxelButton, doShow); toolBar.showTool(deleteVoxelButton, doShow);
toolBar.showTool(addSphereButton, doShow);
toolBar.showTool(deleteSphereButton, doShow);
toolBar.showTool(addTerrainButton, doShow); toolBar.showTool(addTerrainButton, doShow);
}; };
@ -103,37 +144,46 @@ var toolBar = (function () {
} }
if (addVoxelButton === toolBar.clicked(clickedOverlay)) { if (addVoxelButton === toolBar.clicked(clickedOverlay)) {
if (addingVoxels) { var wasAddingVoxels = addingVoxels;
addingVoxels = false; disableAllButtons()
deletingVoxels = false; if (!wasAddingVoxels) {
toolBar.setAlpha(offAlpha, addVoxelButton);
toolBar.setAlpha(offAlpha, deleteVoxelButton);
toolBar.selectTool(addVoxelButton, false);
toolBar.selectTool(deleteVoxelButton, false);
} else {
addingVoxels = true; addingVoxels = true;
deletingVoxels = false;
toolBar.setAlpha(onAlpha, addVoxelButton); toolBar.setAlpha(onAlpha, addVoxelButton);
toolBar.setAlpha(offAlpha, deleteVoxelButton);
} }
return true; return true;
} }
if (deleteVoxelButton === toolBar.clicked(clickedOverlay)) { if (deleteVoxelButton === toolBar.clicked(clickedOverlay)) {
if (deletingVoxels) { var wasDeletingVoxels = deletingVoxels;
deletingVoxels = false; disableAllButtons()
addingVoxels = false; if (!wasDeletingVoxels) {
toolBar.setAlpha(offAlpha, addVoxelButton);
toolBar.setAlpha(offAlpha, deleteVoxelButton);
} else {
deletingVoxels = true; deletingVoxels = true;
addingVoxels = false;
toolBar.setAlpha(offAlpha, addVoxelButton);
toolBar.setAlpha(onAlpha, deleteVoxelButton); toolBar.setAlpha(onAlpha, deleteVoxelButton);
} }
return true; return true;
} }
if (addSphereButton === toolBar.clicked(clickedOverlay)) {
var wasAddingSpheres = addingSpheres
disableAllButtons()
if (!wasAddingSpheres) {
addingSpheres = true;
toolBar.setAlpha(onAlpha, addSphereButton);
}
return true;
}
if (deleteSphereButton === toolBar.clicked(clickedOverlay)) {
var wasDeletingSpheres = deletingSpheres;
disableAllButtons()
if (!wasDeletingSpheres) {
deletingSpheres = true;
toolBar.setAlpha(onAlpha, deleteSphereButton);
}
return true;
}
if (addTerrainButton === toolBar.clicked(clickedOverlay)) { if (addTerrainButton === toolBar.clicked(clickedOverlay)) {
addTerrainBlock(); addTerrainBlock();
return true; return true;
@ -202,14 +252,15 @@ function addTerrainBlock() {
}); });
Entities.setAllVoxels(polyVoxId, 255); Entities.setAllVoxels(polyVoxId, 255);
// XXX use setCuboid // for (var y = 16; y < 32; y++) {
for (var y = 16; y < 32; y++) { // for (var x = 0; x < 16; x++) {
for (var x = 0; x < 16; x++) { // for (var z = 0; z < 16; z++) {
for (var z = 0; z < 16; z++) { // Entities.setVoxel(polyVoxId, {x:x, y:y, z:z}, 0);
Entities.setVoxel(polyVoxId, {x:x, y:y, z:z}, 0); // }
} // }
} // }
} Entities.setVoxelsInCuboid(polyVoxId, {x:0, y:16, z:0}, {x:16, y:16, z:16}, 0);
////////// //////////
// stitch together the terrain with x/y/z NeighorID properties // stitch together the terrain with x/y/z NeighorID properties
@ -271,7 +322,7 @@ function attemptVoxelChange(pickRayDir, intersection) {
return false; return false;
} }
if (addingVoxels == false && deletingVoxels == false) { if (addingVoxels == false && deletingVoxels == false && addingSpheres == false && deletingSpheres == false) {
return false; return false;
} }
@ -281,10 +332,23 @@ function attemptVoxelChange(pickRayDir, intersection) {
var doAdd = addingVoxels; var doAdd = addingVoxels;
var doDelete = deletingVoxels; var doDelete = deletingVoxels;
var doAddSphere = addingSpheres;
var doDeleteSphere = deletingSpheres;
if (controlHeld) { if (controlHeld) {
doAdd = deletingVoxels; if (doAdd) {
doDelete = addingVoxels; doAdd = false;
doDelete = true;
} else if (doDelete) {
doDelete = false;
doAdd = true;
} else if (doAddSphere) {
doAddSphere = false;
doDeleteSphere = true;
} else if (doDeleteSphere) {
doDeleteSphere = false;
doAddSphere = true;
}
} }
if (doDelete) { if (doDelete) {
@ -295,6 +359,14 @@ function attemptVoxelChange(pickRayDir, intersection) {
var toDrawPosition = Vec3.subtract(voxelPosition, Vec3.multiply(pickRayDirInVoxelSpace, 0.1)); var toDrawPosition = Vec3.subtract(voxelPosition, Vec3.multiply(pickRayDirInVoxelSpace, 0.1));
return Entities.setVoxel(intersection.entityID, floorVector(toDrawPosition), 255); return Entities.setVoxel(intersection.entityID, floorVector(toDrawPosition), 255);
} }
if (doDeleteSphere) {
var toErasePosition = intersection.intersection;
return Entities.setVoxelSphere(intersection.entityID, floorVector(toErasePosition), editSphereRadius, 0);
}
if (doAddSphere) {
var toDrawPosition = intersection.intersection;
return Entities.setVoxelSphere(intersection.entityID, floorVector(toDrawPosition), editSphereRadius, 255);
}
} }
function mousePressEvent(event) { function mousePressEvent(event) {