mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 20:36:38 +02:00
151 lines
5.9 KiB
JavaScript
151 lines
5.9 KiB
JavaScript
//
|
|
// clipboardExample.js
|
|
// hifi
|
|
//
|
|
// Created by Brad Hefta-Gaub on 1/28/14.
|
|
// Copyright (c) 2014 HighFidelity, Inc. All rights reserved.
|
|
//
|
|
// This is an example script that demonstrates use of the Clipboard class
|
|
//
|
|
//
|
|
|
|
var selectedVoxel = { x: 0, y: 0, z: 0, s: 0 };
|
|
var selectedSize = 4;
|
|
|
|
function printKeyEvent(eventName, event) {
|
|
print(eventName);
|
|
print(" event.key=" + event.key);
|
|
print(" event.text=" + event.text);
|
|
print(" event.isShifted=" + event.isShifted);
|
|
print(" event.isControl=" + event.isControl);
|
|
print(" event.isMeta=" + event.isMeta);
|
|
print(" event.isAlt=" + event.isAlt);
|
|
print(" event.isKeypad=" + event.isKeypad);
|
|
}
|
|
|
|
|
|
function keyPressEvent(event) {
|
|
var debug = false;
|
|
if (debug) {
|
|
printKeyEvent("keyPressEvent", event);
|
|
}
|
|
}
|
|
|
|
function keyReleaseEvent(event) {
|
|
var debug = false;
|
|
if (debug) {
|
|
printKeyEvent("keyReleaseEvent", event);
|
|
}
|
|
|
|
// Note: this sample uses Alt+ as the key codes for these clipboard items
|
|
if ((event.key == 199 || event.key == 67 || event.text == "C" || event.text == "c") && event.isAlt) {
|
|
print("the Alt+C key was pressed");
|
|
Clipboard.copyVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s);
|
|
}
|
|
if ((event.key == 8776 || event.key == 88 || event.text == "X" || event.text == "x") && event.isAlt) {
|
|
print("the Alt+X key was pressed");
|
|
Clipboard.cutVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s);
|
|
}
|
|
if ((event.key == 8730 || event.key == 86 || event.text == "V" || event.text == "v") && event.isAlt) {
|
|
print("the Alt+V key was pressed");
|
|
Clipboard.pasteVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s);
|
|
}
|
|
if (event.text == "DELETE" || event.text == "BACKSPACE") {
|
|
print("the DELETE/BACKSPACE key was pressed");
|
|
Clipboard.deleteVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s);
|
|
}
|
|
|
|
if ((event.text == "E" || event.text == "e") && event.isMeta) {
|
|
print("the Ctl+E key was pressed");
|
|
Clipboard.exportVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s);
|
|
}
|
|
if ((event.text == "I" || event.text == "i") && event.isMeta) {
|
|
print("the Ctl+I key was pressed");
|
|
Clipboard.importVoxels();
|
|
}
|
|
if ((event.key == 78 || event.text == "N" || event.text == "n") && event.isMeta) {
|
|
print("the Ctl+N key was pressed, nudging to left 1 meter");
|
|
Clipboard.nudgeVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s, { x: -1, y: 0, z: 0 });
|
|
}
|
|
}
|
|
|
|
// Map keyPress and mouse move events to our callbacks
|
|
Controller.keyPressEvent.connect(keyPressEvent);
|
|
Controller.keyReleaseEvent.connect(keyReleaseEvent);
|
|
|
|
var selectCube = Overlays.addOverlay("cube", {
|
|
position: { x: 0, y: 0, z: 0},
|
|
size: selectedSize,
|
|
color: { red: 255, green: 255, blue: 0},
|
|
alpha: 1,
|
|
solid: false,
|
|
visible: false,
|
|
lineWidth: 4
|
|
});
|
|
|
|
|
|
function mouseMoveEvent(event) {
|
|
|
|
var pickRay = Camera.computePickRay(event.x, event.y);
|
|
|
|
var debug = false;
|
|
if (debug) {
|
|
print("mouseMoveEvent event.x,y=" + event.x + ", " + event.y);
|
|
print("called Camera.computePickRay()");
|
|
print("computePickRay origin=" + pickRay.origin.x + ", " + pickRay.origin.y + ", " + pickRay.origin.z);
|
|
print("computePickRay direction=" + pickRay.direction.x + ", " + pickRay.direction.y + ", " + pickRay.direction.z);
|
|
}
|
|
|
|
var intersection = Voxels.findRayIntersection(pickRay);
|
|
|
|
if (intersection.intersects) {
|
|
if (debug) {
|
|
print("intersection voxel.red/green/blue=" + intersection.voxel.red + ", "
|
|
+ intersection.voxel.green + ", " + intersection.voxel.blue);
|
|
print("intersection voxel.x/y/z/s=" + intersection.voxel.x + ", "
|
|
+ intersection.voxel.y + ", " + intersection.voxel.z+ ": " + intersection.voxel.s);
|
|
print("intersection face=" + intersection.face);
|
|
print("intersection distance=" + intersection.distance);
|
|
print("intersection intersection.x/y/z=" + intersection.intersection.x + ", "
|
|
+ intersection.intersection.y + ", " + intersection.intersection.z);
|
|
}
|
|
|
|
|
|
|
|
var x = Math.floor(intersection.voxel.x / selectedSize) * selectedSize;
|
|
var y = Math.floor(intersection.voxel.y / selectedSize) * selectedSize;
|
|
var z = Math.floor(intersection.voxel.z / selectedSize) * selectedSize;
|
|
selectedVoxel = { x: x, y: y, z: z, s: selectedSize };
|
|
Overlays.editOverlay(selectCube, { position: selectedVoxel, size: selectedSize, visible: true } );
|
|
} else {
|
|
Overlays.editOverlay(selectCube, { visible: false } );
|
|
selectedVoxel = { x: 0, y: 0, z: 0, s: 0 };
|
|
}
|
|
}
|
|
|
|
Controller.mouseMoveEvent.connect(mouseMoveEvent);
|
|
|
|
function wheelEvent(event) {
|
|
var debug = false;
|
|
if (debug) {
|
|
print("wheelEvent");
|
|
print(" event.x,y=" + event.x + ", " + event.y);
|
|
print(" event.delta=" + event.delta);
|
|
print(" event.orientation=" + event.orientation);
|
|
print(" event.isLeftButton=" + event.isLeftButton);
|
|
print(" event.isRightButton=" + event.isRightButton);
|
|
print(" event.isMiddleButton=" + event.isMiddleButton);
|
|
print(" event.isShifted=" + event.isShifted);
|
|
print(" event.isControl=" + event.isControl);
|
|
print(" event.isMeta=" + event.isMeta);
|
|
print(" event.isAlt=" + event.isAlt);
|
|
}
|
|
}
|
|
|
|
Controller.wheelEvent.connect(wheelEvent);
|
|
|
|
function scriptEnding() {
|
|
Overlays.deleteOverlay(selectCube);
|
|
}
|
|
|
|
Script.scriptEnding.connect(scriptEnding);
|