Clean up code

Fix indentations, whitespace, and layout
This commit is contained in:
Adrianl3d 2014-11-22 10:39:34 +10:00
parent f1543a9d36
commit 6a66351e7f

View file

@ -1,54 +1,54 @@
// //
// notifications.js // notifications.js
// Created by Adrian // Created by Adrian
// //
// Adrian McCarlie 8-10-14 // Adrian McCarlie 8-10-14
// This script demonstrates on-screen overlay type notifications. // This script demonstrates on-screen overlay type notifications.
// Copyright 2014 High Fidelity, Inc. // Copyright 2014 High Fidelity, Inc.
// //
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// This script demonstrates notifications created via a number of ways, such as: // This script demonstrates notifications created via a number of ways, such as:
// Simple key press alerts, which only depend on a key being pressed, // Simple key press alerts, which only depend on a key being pressed,
// dummy examples of this are "q", "w", "e", "r", and "SPACEBAR". // dummy examples of this are "q", "w", "e", "r", and "SPACEBAR".
// actual working examples are "a" for left turn, "d" for right turn and Ctrl/s for snapshot. // actual working examples are "a" for left turn, "d" for right turn and Ctrl/s for snapshot.
// System generated alerts such as users joining and leaving and chat messages which mention this user. // System generated alerts such as users joining and leaving and chat messages which mention this user.
// System generated alerts which originate with a user interface event such as Window Resize, and Mic Mute/Unmute. // System generated alerts which originate with a user interface event such as Window Resize, and Mic Mute/Unmute.
// Mic Mute/Unmute may appear to be a key press alert, but it actually gets the call from the system as mic is muted and unmuted, // Mic Mute/Unmute may appear to be a key press alert, but it actually gets the call from the system as mic is muted and unmuted,
// so the mic mute/unmute will also trigger the notification by clicking the Mic Mute button at the top of the screen. // so the mic mute/unmute will also trigger the notification by clicking the Mic Mute button at the top of the screen.
// To add a new System notification type: // To add a new System notification type:
// //
// 1. Set the Event Connector at the bottom of the script. // 1. Set the Event Connector at the bottom of the script.
// example: // example:
// GlobalServices.incomingMessage.connect(onIncomingMessage); // GlobalServices.incomingMessage.connect(onIncomingMessage);
// //
// 2. Create a new function to produce a text string, do not include new line returns. // 2. Create a new function to produce a text string, do not include new line returns.
// example: // example:
// function onIncomingMessage(user, message) { // function onIncomingMessage(user, message) {
// //do stuff here; // //do stuff here;
// var text = "This is a notification"; // var text = "This is a notification";
// wordWrap(text); // wordWrap(text);
// } // }
// //
// This new function must call wordWrap(text) if the length of message is longer than 42 chars or unknown. // This new function must call wordWrap(text) if the length of message is longer than 42 chars or unknown.
// wordWrap() will format the text to fit the notifications overlay and send it to createNotification(text). // wordWrap() will format the text to fit the notifications overlay and send it to createNotification(text).
// If the message is 42 chars or less you should bypass wordWrap() and call createNotification() directly. // If the message is 42 chars or less you should bypass wordWrap() and call createNotification() directly.
// To add a keypress driven notification: // To add a keypress driven notification:
// //
// 1. Add a key to the keyPressEvent(key). // 1. Add a key to the keyPressEvent(key).
// 2. Declare a text string. // 2. Declare a text string.
// 3. Call createNotifications(text) parsing the text. // 3. Call createNotifications(text) parsing the text.
// example: // example:
// if (key.text == "a") { // if (key.text == "a") {
// var noteString = "Turning to the Left"; // var noteString = "Turning to the Left";
// createNotification(noteString); // createNotification(noteString);
// } // }
var width = 340.0; //width of notification overlay var width = 340.0; //width of notification overlay
@ -70,16 +70,16 @@ var ourWidth = Window.innerWidth;
var ourHeight = Window.innerHeight; var ourHeight = Window.innerHeight;
var text = "placeholder"; var text = "placeholder";
var last_users = GlobalServices.onlineUsers; var last_users = GlobalServices.onlineUsers;
var users =[]; var users = [];
var ctrlIsPressed = false; var ctrlIsPressed = false;
var ready = true; var ready = true;
// When our script shuts down, we should clean up all of our overlays // When our script shuts down, we should clean up all of our overlays
function scriptEnding() { function scriptEnding() {
for (i = 0; i < notifications.length; i++){ for (i = 0; i < notifications.length; i++){
Overlays.deleteOverlay(notifications[i]); Overlays.deleteOverlay(notifications[i]);
Overlays.deleteOverlay(buttons[i]); Overlays.deleteOverlay(buttons[i]);
} }
} }
Script.scriptEnding.connect(scriptEnding); Script.scriptEnding.connect(scriptEnding);
@ -90,164 +90,164 @@ var heights = [];
var myAlpha = []; var myAlpha = [];
var arrays = []; var arrays = [];
// This function creates and sizes the overlays // This function creates and sizes the overlays
function createNotification(text){ function createNotification(text){
var count = (text.match(/\n/g) || []).length; var count = (text.match(/\n/g) || []).length;
var breakPoint = 43.0; // length when new line is added var breakPoint = 43.0; // length when new line is added
var extraLine = 0; var extraLine = 0;
var breaks = 0; var breaks = 0;
var height = 40.0; var height = 40.0;
var stack = 0; var stack = 0;
if (text.length >= breakPoint){ if (text.length >= breakPoint){
breaks = count; breaks = count;
} }
var extraLine = breaks * 16.0; var extraLine = breaks * 16.0;
for (i = 0; i < heights.length; i++){ for (i = 0; i < heights.length; i++){
stack = stack + heights[i]; stack = stack + heights[i];
} }
var level = (stack + 20.0 ); var level = (stack + 20.0 );
height = height + extraLine; height = height + extraLine;
var overlayProperties = { var overlayProperties = {
x: overlayLocationX, x: overlayLocationX,
y: level, y: level,
width: width, width: width,
height: height, height: height,
color: textColor, color: textColor,
backgroundColor: backColor, backgroundColor: backColor,
alpha: backgroundAlpha, alpha: backgroundAlpha,
topargin: topMargin, topMargin: topMargin,
leftMargin: leftMargin, leftMargin: leftMargin,
font: {size: fontSize}, font: {size: fontSize},
text: text, text: text,
}; };
var bLevel = level + 12.0; var bLevel = level + 12.0;
var buttonProperties = { var buttonProperties = {
x: buttonLocationX, x: buttonLocationX,
y: bLevel, y: bLevel,
width: 15.0,//37 width: 15.0,
height: 15.0,//35 height: 15.0,
subImage: { x: 0, y: 0, width: 10, height: 10 }, subImage: { x: 0, y: 0, width: 10, height: 10 },
imageURL: "http://hifi-public.s3.amazonaws.com/images/close-small-light.svg", imageURL: "http://hifi-public.s3.amazonaws.com/images/close-small-light.svg",
color: { red: 255, green: 255, blue: 255}, color: { red: 255, green: 255, blue: 255},
visible: true, visible: true,
alpha: backgroundAlpha, alpha: backgroundAlpha,
}; };
Notify(overlayProperties, buttonProperties, height); Notify(overlayProperties, buttonProperties, height);
} }
// Pushes data to each array and sets up data for 2nd dimension array // Pushes data to each array and sets up data for 2nd dimension array
// to handle auxiliary data not carried by the overlay class // to handle auxiliary data not carried by the overlay class
// specifically notification "heights", "times" of creation, and . // specifically notification "heights", "times" of creation, and .
function Notify (notice, button, height ){ function Notify(notice, button, height){
notifications.push((Overlays.addOverlay("text",notice))); notifications.push((Overlays.addOverlay("text",notice)));
buttons.push((Overlays.addOverlay("image",button))); buttons.push((Overlays.addOverlay("image",button)));
times.push(new Date().getTime() / 1000); times.push(new Date().getTime() / 1000);
height = height + 1.0; height = height + 1.0;
heights.push(height); heights.push(height);
myAlpha.push(0); myAlpha.push(0);
var last = notifications.length - 1; var last = notifications.length - 1;
createArrays(notifications[last], buttons[last], times[last], heights[last], myAlpha[last]); createArrays(notifications[last], buttons[last], times[last], heights[last], myAlpha[last]);
fadeIn(notifications[last], buttons[last]) fadeIn(notifications[last], buttons[last])
} }
function fadeIn(noticeIn, buttonIn){ function fadeIn(noticeIn, buttonIn){
var myLength = arrays.length; var myLength = arrays.length;
var q = 0; var q = 0;
var pauseTimer = null; var pauseTimer = null;
pauseTimer = Script.setInterval(function() { pauseTimer = Script.setInterval(function() {
q++; q++;
qFade = q / 10.0; qFade = q / 10.0;
Overlays.editOverlay(noticeIn, {alpha: qFade}); Overlays.editOverlay(noticeIn, {alpha: qFade});
Overlays.editOverlay(buttonIn, {alpha: qFade}); Overlays.editOverlay(buttonIn, {alpha: qFade});
if (q >= 9.0) { if (q >= 9.0) {
Script.clearInterval(pauseTimer); Script.clearInterval(pauseTimer);
} }
}, 10); }, 10);
} }
// push data from above to the 2 dimensional array // push data from above to the 2 dimensional array
function createArrays(notice, button, createTime, height, myAlpha){ function createArrays(notice, button, createTime, height, myAlpha){
arrays.push([notice, button, createTime, height, myAlpha]); arrays.push([notice, button, createTime, height, myAlpha]);
} }
// handles mouse clicks on buttons // handles mouse clicks on buttons
function mousePressEvent(event) { function mousePressEvent(event) {
var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y}); //identify which overlay was clicked var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y}); //identify which overlay was clicked
for (i = 0; i < buttons.length; i++){ //if user clicked a button for (i = 0; i < buttons.length; i++){ //if user clicked a button
if(clickedOverlay == buttons[i]){ if(clickedOverlay == buttons[i]){
Overlays.deleteOverlay(notifications[i]); Overlays.deleteOverlay(notifications[i]);
Overlays.deleteOverlay(buttons[i]); Overlays.deleteOverlay(buttons[i]);
notifications.splice(i, 1); notifications.splice(i, 1);
buttons.splice(i, 1); buttons.splice(i, 1);
times.splice(i, 1); times.splice(i, 1);
heights.splice(i, 1); heights.splice(i, 1);
myAlpha.splice(i, 1); myAlpha.splice(i, 1);
arrays.splice(i, 1); arrays.splice(i, 1);
} }
} }
} }
// Control key remains active only while key is held down // Control key remains active only while key is held down
function keyReleaseEvent(key){ function keyReleaseEvent(key){
if (key.key == 16777249){ if (key.key == 16777249){
ctrlIsPressed = false; ctrlIsPressed = false;
} }
} }
// Triggers notification on specific key driven events // Triggers notification on specific key driven events
function keyPressEvent(key) { function keyPressEvent(key) {
if (key.key == 16777249){ if (key.key == 16777249){
ctrlIsPressed = true; ctrlIsPressed = true;
} }
if (key.text == "a") { if (key.text == "a") {
var noteString = "Turning to the Left"; var noteString = "Turning to the Left";
createNotification(noteString); createNotification(noteString);
} }
if (key.text == "d") { if (key.text == "d") {
var noteString = "Turning to the Right"; var noteString = "Turning to the Right";
createNotification(noteString); createNotification(noteString);
} }
if (key.text == "s") { if (key.text == "s") {
if (ctrlIsPressed == true){ if (ctrlIsPressed == true){
var noteString = "You have taken a snapshot"; var noteString = "You have taken a snapshot";
createNotification(noteString); createNotification(noteString);
} }
} }
if (key.text == "q") { if (key.text == "q") {
var noteString = "Enable Scripted Motor control is now on."; var noteString = "Enable Scripted Motor control is now on.";
wordWrap(noteString); wordWrap(noteString);
} }
if (key.text == "w") { if (key.text == "w") {
var noteString = "This notification spans 2 lines. The overlay will resize to fit new lines."; var noteString = "This notification spans 2 lines. The overlay will resize to fit new lines.";
var noteString = "editVoxels.js stopped, editModels.js stopped, selectAudioDevice.js stopped."; var noteString = "editVoxels.js stopped, editModels.js stopped, selectAudioDevice.js stopped.";
wordWrap(noteString); wordWrap(noteString);
} }
if (key.text == "e") { if (key.text == "e") {
var noteString = "This is an example of a multiple line notification. This notification will span 3 lines." var noteString = "This is an example of a multiple line notification. This notification will span 3 lines."
wordWrap(noteString); wordWrap(noteString);
} }
if (key.text == "r") { if (key.text == "r") {
var noteString = "This is a very long line of text that we are going to use in this example to divide it into rows of maximum 43 chars and see how many lines we use."; var noteString = "This is a very long line of text that we are going to use in this example to divide it into rows of maximum 43 chars and see how many lines we use.";
wordWrap(noteString); wordWrap(noteString);
} }
if (key.text == "SPACE") { if (key.text == "SPACE") {
var noteString = "You have pressed the Spacebar, This is an example of a multiple line notification. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam."; var noteString = "You have pressed the Spacebar, This is an example of a multiple line notification. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.";
wordWrap(noteString); wordWrap(noteString);
} }
} }
// formats string to add newline every 43 chars // formats string to add newline every 43 chars
function wordWrap(str){ function wordWrap(str){
var result = stringDivider(str, 43.0, "\n"); var result = stringDivider(str, 43.0, "\n");
createNotification(result); createNotification(result);
} }
// wraps whole word to newline // wraps whole word to newline
function stringDivider(str, slotWidth, spaceReplacer) { function stringDivider(str, slotWidth, spaceReplacer) {
if (str.length>slotWidth) { if (str.length > slotWidth) {
var p=slotWidth; var p = slotWidth;
for (; p > 0 && str[p] != ' '; p--) { for (; p > 0 && str[p] != ' '; p--) {
} }
if (p > 0) { if (p > 0) {
@ -259,27 +259,27 @@ function stringDivider(str, slotWidth, spaceReplacer) {
return str; return str;
} }
//This fires a notification on window resize // This fires a notification on window resize
function checkSize(){ function checkSize(){
if((Window.innerWidth!=ourWidth)||(Window.innerHeight!=ourHeight)){ if((Window.innerWidth!=ourWidth)||(Window.innerHeight!=ourHeight)){
var windowResize = "Window has been resized"; var windowResize = "Window has been resized";
ourWidth = Window.innerWidth; ourWidth = Window.innerWidth;
ourHeight = Window.innerHeight; ourHeight = Window.innerHeight;
windowDimensions = Controller.getViewportDimensions(); windowDimensions = Controller.getViewportDimensions();
overlayLocationX = (windowDimensions.x - (width + 60.0)); overlayLocationX = (windowDimensions.x - (width + 60.0));
buttonLocationX = overlayLocationX + (width - 35.0); buttonLocationX = overlayLocationX + (width - 35.0);
createNotification(windowResize) createNotification(windowResize)
} }
} }
// Triggers notification if a user logs on or off // Triggers notification if a user logs on or off
function onOnlineUsersChanged(users) { function onOnlineUsersChanged(users) {
var joiners = []; var joiners = [];
var leavers = []; var leavers = [];
for (user in users) { for (user in users) {
if (last_users.indexOf(users[user]) == -1.0) { if (last_users.indexOf(users[user]) == -1.0) {
joiners.push(users[user]); joiners.push(users[user]);
createNotification(users[user] + " Has joined"); createNotification(users[user] + " Has joined");
} }
} }
for (user in last_users) { for (user in last_users) {
@ -291,81 +291,80 @@ function onOnlineUsersChanged(users) {
last_users = users; last_users = users;
} }
// Triggers notification if @MyUserName is mentioned in chat and returns the message to the notification. // Triggers notification if @MyUserName is mentioned in chat and returns the message to the notification.
function onIncomingMessage(user, message) { function onIncomingMessage(user, message) {
var myMessage = message; var myMessage = message;
var alertMe = "@" + GlobalServices.myUsername; var alertMe = "@" + GlobalServices.myUsername;
var thisAlert = user + ": " + myMessage; var thisAlert = user + ": " + myMessage;
if (myMessage.indexOf(alertMe) > -1.0) { if (myMessage.indexOf(alertMe) > -1.0) {
wordWrap(thisAlert); wordWrap(thisAlert);
} }
} }
// Triggers mic mute notification // Triggers mic mute notification
function onMuteStateChanged() { function onMuteStateChanged() {
var muteState = AudioDevice.getMuted() ? "Muted" : "Unmuted"; var muteState = AudioDevice.getMuted() ? "Muted" : "Unmuted";
var muteString = "Microphone is set to " + muteState; var muteString = "Microphone is set to " + muteState;
createNotification(muteString); createNotification(muteString);
} }
function update(){ function update(){
frame++; frame++;
if ((frame % 60.0) == 0) { // only update once a second if ((frame % 60.0) == 0) { // only update once a second
checkSize(); // checks for size change to trigger windowResize notification checkSize(); // checks for size change to trigger windowResize notification
locationY = 20.0; locationY = 20.0;
for (var i = 0; i < arrays.length; i++){ //repositions overlays as others fade for (var i = 0; i < arrays.length; i++){ //repositions overlays as others fade
var nextOverlay = Overlays.getOverlayAtPoint({x: overlayLocationX, y: locationY }); var nextOverlay = Overlays.getOverlayAtPoint({x: overlayLocationX, y: locationY });
Overlays.editOverlay(notifications[i], { x:overlayLocationX, y:locationY}); Overlays.editOverlay(notifications[i], { x:overlayLocationX, y:locationY});
Overlays.editOverlay(buttons[i], { x:buttonLocationX, y:locationY + 12.0}); Overlays.editOverlay(buttons[i], { x:buttonLocationX, y:locationY + 12.0});
locationY=locationY + arrays[i][3]; locationY=locationY + arrays[i][3];
} }
} }
// This checks the age of the notification and prepares to fade it after 9.0 seconds (var persistTime - 1) // This checks the age of the notification and prepares to fade it after 9.0 seconds (var persistTime - 1)
for (var i = 0; i < arrays.length; i++){ for (var i = 0; i < arrays.length; i++){
if (ready){ if (ready){
var j = arrays[i][2]; var j = arrays[i][2];
var k = j + persistTime; var k = j + persistTime;
if (k < (new Date().getTime() / 1000)){ if (k < (new Date().getTime() / 1000)){
ready = false; ready = false;
noticeOut = arrays[i][0]; noticeOut = arrays[i][0];
buttonOut = arrays[i][1]; buttonOut = arrays[i][1];
var arraysOut = i; var arraysOut = i;
fadeOut(noticeOut, buttonOut, arraysOut); fadeOut(noticeOut, buttonOut, arraysOut);
} }
} }
} }
} }
// this fades the notification ready for dismissal, and removes it from the arrays // this fades the notification ready for dismissal, and removes it from the arrays
function fadeOut(noticeOut, buttonOut, arraysOut){ function fadeOut(noticeOut, buttonOut, arraysOut){
var myLength = arrays.length; var myLength = arrays.length;
var r = 9.0; var r = 9.0;
var pauseTimer = null; var pauseTimer = null;
pauseTimer = Script.setInterval(function() { pauseTimer = Script.setInterval(function() {
r--; r--;
rFade = r / 10.0; rFade = r / 10.0;
Overlays.editOverlay(noticeOut, {alpha: rFade}); Overlays.editOverlay(noticeOut, {alpha: rFade});
Overlays.editOverlay(buttonOut, {alpha: rFade}); Overlays.editOverlay(buttonOut, {alpha: rFade});
if (r < 0) { if (r < 0) {
dismiss(noticeOut, buttonOut, arraysOut); dismiss(noticeOut, buttonOut, arraysOut);
arrays.splice(arraysOut, 1); arrays.splice(arraysOut, 1);
ready = true; ready = true;
Script.clearInterval(pauseTimer); Script.clearInterval(pauseTimer);
} }
}, 20); }, 20);
} }
// This handles the final dismissal of a notification after fading // This handles the final dismissal of a notification after fading
function dismiss(firstNoteOut, firstButOut, firstOut){ function dismiss(firstNoteOut, firstButOut, firstOut){
var working = firstOut var working = firstOut
Overlays.deleteOverlay(firstNoteOut); Overlays.deleteOverlay(firstNoteOut);
Overlays.deleteOverlay(firstButOut); Overlays.deleteOverlay(firstButOut);
notifications.splice(firstOut, 1); notifications.splice(firstOut, 1);
buttons.splice(firstOut, 1); buttons.splice(firstOut, 1);
times.splice(firstOut, 1); times.splice(firstOut, 1);
heights.splice(firstOut, 1); heights.splice(firstOut, 1);
myAlpha.splice(firstOut,1); myAlpha.splice(firstOut,1);
} }
onMuteStateChanged(); onMuteStateChanged();