mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
207 lines
7.2 KiB
JavaScript
207 lines
7.2 KiB
JavaScript
//
|
|
// textInputOverlayExample.js
|
|
|
|
// Captures keystrokes and generates a string which is displayed as a text Overlay
|
|
// demonstrates keystroke events, mouse click events and overlay buttons.
|
|
// Created by Adrian McCarlie 7 October 2014
|
|
//
|
|
// Copyright 2014 High Fidelity, Inc.
|
|
//
|
|
//
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
var locationX = 500; // on screen location X
|
|
var locationY = 175; // on screen location Y
|
|
var width = 600; //width of input window
|
|
var height = 100; // height of input window
|
|
var topMargin = 20;
|
|
var leftMargin = 10;
|
|
var textColor = { red: 228, green: 228, blue: 228}; // text color
|
|
var backColor = { red: 170, green: 200, blue: 255}; // default background color
|
|
var readyColor = { red: 2, green: 255, blue: 2}; // green background and button
|
|
var clickedColor = { red: 255, green: 220, blue: 20}; //amber background and button
|
|
var backgroundAlpha = 0.6;
|
|
var fontSize = 12;
|
|
var writing ="Click here and type input, then click green button to submit.\n \n \n \n \n \n \n \n Click red button to close,";
|
|
var buttonLocationX = locationX - 50; // buttons locked relative to input window
|
|
var clickedText = false;
|
|
var clickedButton = false;
|
|
var cursor = "|";
|
|
// add more characters to the string if required
|
|
var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\
|
|
~!@#$%^&*()_+`1234567890-={}|[]\\:\";'<>?,./"; //permitted characters
|
|
|
|
|
|
// This will create a text overlay that displays what you type
|
|
var inputWindow = Overlays.addOverlay("text", {
|
|
x: locationX,
|
|
y: locationY,
|
|
width: width,
|
|
height: height,
|
|
color: textColor,
|
|
backgroundColor: backColor,
|
|
alpha: backgroundAlpha,
|
|
backgroundAlpha: backgroundAlpha,
|
|
topMargin: topMargin,
|
|
leftMargin: leftMargin,
|
|
font: {size: fontSize},
|
|
text: writing,
|
|
visible: true
|
|
});
|
|
// This will create an image overlay of a button.
|
|
var button1 = Overlays.addOverlay("image", { // green button
|
|
x: buttonLocationX,
|
|
y: locationY + 10,
|
|
width: 40,
|
|
height: 35,
|
|
subImage: { x: 0, y: 0, width: 39, height: 35 },
|
|
imageURL: "https://public.highfidelity.io/images/thumb.png",
|
|
color: readyColor,
|
|
visible: true
|
|
});
|
|
// This will create an image overlay of another button.
|
|
var button2 = Overlays.addOverlay("image", { // red button
|
|
x: buttonLocationX,
|
|
y: locationY + 60,
|
|
width: 40,
|
|
height: 35,
|
|
subImage: { x: 0, y: 0, width: 39, height: 35 },
|
|
imageURL: "https://public.highfidelity.io/images/thumb.png",
|
|
color: { red: 250, green: 2, blue: 2},
|
|
visible: true,
|
|
});
|
|
// When our script shuts down, we should clean up all of our overlays
|
|
function scriptEnding() {
|
|
Overlays.deleteOverlay(inputWindow);
|
|
Overlays.deleteOverlay(button1);
|
|
Overlays.deleteOverlay(button2);
|
|
//Return control of keys to default on script ending
|
|
for(var i=0; i<keyString.length; i++){
|
|
var nextChar = keyString.charAt(i);
|
|
Controller.releaseKeyEvents({ text: nextChar});
|
|
}
|
|
Controller.releaseKeyEvents({"key": 0x5c}); // forward slash
|
|
Controller.releaseKeyEvents({ text: "SHIFT"});
|
|
Controller.releaseKeyEvents({ text: "BACKSPACE"});
|
|
Controller.releaseKeyEvents({ text: "SPACE"});
|
|
Controller.releaseKeyEvents({"key":16777220} ); //Enter
|
|
Controller.releaseKeyEvents({"key":16777219} ); //Backspace
|
|
}
|
|
Script.scriptEnding.connect(scriptEnding);
|
|
|
|
|
|
function resetForm(){
|
|
writing = ""; // Start with a blank string
|
|
Overlays.editOverlay(button1, {color: readyColor} );
|
|
Overlays.editOverlay(inputWindow, {backgroundColor: readyColor});
|
|
clickedText = true;
|
|
}
|
|
|
|
function submitForm(){
|
|
print("form submitted");
|
|
writingOutput = writing; // writingOutput is the data output
|
|
writing = writing + ".\nYour data has been stored.\n\nClick here to reset form or \n\n\nClick red button to close,";
|
|
Overlays.editOverlay(button1, { color: clickedColor} );
|
|
Overlays.editOverlay(inputWindow, {backgroundColor: clickedColor});
|
|
clickedText = false;
|
|
clickedButton = true;
|
|
}
|
|
|
|
// handle click detection
|
|
function mousePressEvent(event) {
|
|
|
|
var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y}); //identify which overlay was clicked
|
|
|
|
if (clickedOverlay == inputWindow) { // if the user clicked on the text window, prepare the overlay
|
|
if (clickedText == false){ // first time clicked?
|
|
resetForm();
|
|
}
|
|
}
|
|
|
|
if (clickedOverlay == button1) { // if the user clicked on the green button
|
|
if (clickedText == true){ // nothing happens unless the text window was clicked first
|
|
submitForm();
|
|
// clickedText == false;
|
|
}
|
|
else { // if the form has been submitted already
|
|
resetForm();
|
|
}
|
|
}
|
|
|
|
if (clickedOverlay == button2) { // if the user clicked on the red button
|
|
print ("script ending");
|
|
Script.stop();
|
|
}
|
|
}
|
|
|
|
//handle key press detection
|
|
function keyPressEvent(key) {
|
|
|
|
if (clickedText == true){
|
|
|
|
if (key.text == "SPACE") { //special conditions for space bar
|
|
writing = writing + " ";
|
|
key.text ="";
|
|
}
|
|
else if (key.text == "BACKSPACE") { // Backspace
|
|
var myString = writing;
|
|
writing = myString.substr(0, myString.length-1);
|
|
key.text ="";
|
|
}
|
|
|
|
if (key.text == "\r") { //special conditions for enter key
|
|
writing = writing + "\n";
|
|
key.text ="";
|
|
}
|
|
else if ( keyString.indexOf(key.text) == -1) { // prevent all other keys not in keyString
|
|
key.text ="";
|
|
}
|
|
// build the string
|
|
writing = writing + key.text;
|
|
}
|
|
}
|
|
|
|
var count = 0;
|
|
function updateWriting(deltaTime){
|
|
count++;
|
|
// every half second or so, remove and replace the pipe to create a blinking cursor
|
|
if (count % 30 == 0) {
|
|
if (cursor == "|") {
|
|
cursor="";
|
|
} else {
|
|
cursor = "|";
|
|
}
|
|
}
|
|
// attempt at some overflow control of the text
|
|
if ((writing.length % 53) == 0) {
|
|
writing = writing + "\n";
|
|
}
|
|
// add blinking cursor to window during typing
|
|
var addCursor = writing + cursor;
|
|
if (clickedText == true){
|
|
Overlays.editOverlay(inputWindow, { text: addCursor});
|
|
}else{
|
|
Overlays.editOverlay(inputWindow, { text: writing});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// test keystroke against keyString and capture permitted keys
|
|
for (var i=0; i<keyString.length; i++){
|
|
var nextChar = keyString.charAt(i);
|
|
Controller.captureKeyEvents({ text: nextChar});
|
|
}
|
|
// capture special keys
|
|
Controller.captureKeyEvents({ "key": 0x5c}); //forward slash key
|
|
Controller.captureKeyEvents({ text: "SHIFT"});
|
|
//Controller.captureKeyEvents({ text: "BACKSPACE"});
|
|
Controller.captureKeyEvents({ text: "SPACE"});
|
|
Controller.captureKeyEvents({"key":16777220} ); // enter key
|
|
Controller.captureKeyEvents({"key":16777219} ); // backspace key
|
|
Controller.keyPressEvent.connect(keyPressEvent);
|
|
Controller.mousePressEvent.connect(mousePressEvent);
|
|
Script.update.connect(updateWriting);
|