handle overlay lifetime during update, remove color conv

This commit is contained in:
Triplelexx 2017-03-15 10:31:09 +00:00
parent 6971aeb081
commit 84d157ab18

View file

@ -20,31 +20,31 @@
var overlayPosition = Vec3.ZERO; var overlayPosition = Vec3.ZERO;
var tweenPosition = 0; var tweenPosition = 0;
// colors are in HSV, h needs to be a value from 0-1
var startColor = { var startColor = {
h: 0, red: 170,
s: 0, green: 170,
v: 0.67 blue: 170
}; };
var endColor = { var endColor = {
h: 0, red: 255,
s: 1, green: 0,
v: 1 blue: 0
}; };
var overlayID; var overlayID;
AudioDevice.muteToggled.connect(onMuteToggled);
Script.update.connect(update); Script.update.connect(update);
Script.scriptEnding.connect(cleanup); Script.scriptEnding.connect(cleanup);
function update(dt) { function update(dt) {
if (!AudioDevice.getMuted()) { if (!AudioDevice.getMuted()) {
if (overlayID) { if (hasOverlay()) {
deleteOverlay(); deleteOverlay();
} }
return; } else if (!hasOverlay()) {
} createOverlay();
updateOverlay(); } else {
updateOverlay();
}
} }
function lerp(a, b, val) { function lerp(a, b, val) {
@ -55,47 +55,10 @@
return Math.pow(t / 1, 5); return Math.pow(t / 1, 5);
} }
// Adapted from a blog post on http://mjijackson.com
// Michael J. I. Jackson
// Converts an HSV color value to RGB. Conversion formula adapted from http: //en.wikipedia.org/wiki/HSV_color_space.
// Assumes h, s, and v are contained in the set[0, 1]
function hsvToRgb(h, s, v) {
var r, g, b;
var i = Math.floor(h * 6);
var f = h * 6 - i;
var p = v * (1 - s);
var q = v * (1 - f * s);
var t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
return {
red: r * 255,
green: g * 255,
blue: b * 255
}
}
function getOffsetPosition() { function getOffsetPosition() {
return Vec3.sum(Camera.position, Quat.getFront(Camera.orientation)); return Vec3.sum(Camera.position, Quat.getFront(Camera.orientation));
} }
function onMuteToggled() {
if (AudioDevice.getMuted()) {
createOverlay();
} else {
deleteOverlay();
}
}
function createOverlay() { function createOverlay() {
overlayPosition = getOffsetPosition(); overlayPosition = getOffsetPosition();
overlayID = Overlays.addOverlay("sphere", { overlayID = Overlays.addOverlay("sphere", {
@ -108,6 +71,10 @@
}); });
} }
function hasOverlay() {
return Overlays.getProperty(overlayID, "position") !== undefined;
}
function updateOverlay() { function updateOverlay() {
// increase by TWEEN_SPEED until completion // increase by TWEEN_SPEED until completion
if (tweenPosition < 1) { if (tweenPosition < 1) {
@ -128,17 +95,11 @@
overlayPosition.y = lerp(overlayPosition.y, offsetPosition.y, LERP_AMOUNT); overlayPosition.y = lerp(overlayPosition.y, offsetPosition.y, LERP_AMOUNT);
overlayPosition.z = lerp(overlayPosition.z, offsetPosition.z, LERP_AMOUNT); overlayPosition.z = lerp(overlayPosition.z, offsetPosition.z, LERP_AMOUNT);
var rgbColor = hsvToRgb(
lerp(startColor.h, endColor.h, easeIn(tweenPosition)),
lerp(startColor.s, endColor.s, easeIn(tweenPosition)),
lerp(startColor.v, endColor.v, easeIn(tweenPosition))
);
Overlays.editOverlay(overlayID, { Overlays.editOverlay(overlayID, {
color: { color: {
red: rgbColor.red, red: lerp(startColor.red, endColor.red, easeIn(tweenPosition)),
green: rgbColor.green, green: lerp(startColor.green, endColor.green, easeIn(tweenPosition)),
blue: rgbColor.blue blue: lerp(startColor.blue, endColor.blue, easeIn(tweenPosition))
}, },
position: overlayPosition, position: overlayPosition,
rotation: Camera.orientation rotation: Camera.orientation