function renderRayCaster(
mouse,
camera,
scene,
intersectedElement = { name: undefined },
color = "rgb(255,0,0)"
) {
var raycaster = new THREE.Raycaster();
raycaster.setFromCamera(mouse, camera);
scene.updateMatrixWorld();
var intersects = raycaster.intersectObjects(scene.children, true);
// element.visible ? element.layers.enable(1) : element.layers.disable(1)
// })
// Try verifies the if there is intersects[0].object error
try {
setNewColor();
return intersectedElement;
} catch {
// Objsect touched nothing
returnToOriginalColor();
return { name: undefined };
}
function setNewColor() {
if (
intersects[0].object.name != "" &&
intersects[0].object.name != undefined
) {
// Objsect touched something
if (intersectedElement.name != intersects[0].object.name) {
// Objsect touched is different from the previeus
if (intersectedElement.name != undefined) {
// Check if there was a previeus touched object
// Make the previous in its original color
intersectedElement.material.color.set(intersectedElement.currentHex);
}
// cast name and colors of the object
intersectedElement = intersects[0].object;
intersectedElement.currentHex = intersectedElement.material.color.getHex();
//paint element of red
intersects[0].object.material.color.set(color);
}
intersectedElement.status = true;
} else {
returnToOriginalColor();
// cast name and colors of the object as udefined
intersectedElement = {
name: undefined,
currentHex: undefined,
status: false
};
}
}
function returnToOriginalColor() {
if (intersectedElement.name != undefined) {
// Check if there was a previeus touched
// Make the previous in its original color
intersectedElement.material.color.set(intersectedElement.currentHex);
}
// cast name and colors of the object as udefined
intersectedElement = {
name: undefined,
currentHex: undefined,
status: false
};
}
}