mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:18:05 +02:00
allow adding and deleting spheres
This commit is contained in:
parent
54ddcf2841
commit
6096c20db0
1 changed files with 103 additions and 31 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue