change color lerp to use HSV color

This commit is contained in:
Triplelexx 2017-03-14 03:59:24 +00:00
parent 2e0cac4676
commit c729ceccb5

View file

@ -20,15 +20,16 @@
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 = {
red: 150, h: 0,
green: 150, s: 0,
blue: 150 v: 0.67
}; };
var endColor = { var endColor = {
red: 255, h: 0,
green: 0, s: 1,
blue: 0 v: 1
}; };
var overlayID; var overlayID;
@ -43,17 +44,39 @@
} }
return; return;
} }
if (!overlayID) { updateOverlay();
createOverlay();
} else {
updateOverlay();
}
} }
function lerp(a, b, val) { function lerp(a, b, val) {
return (1 - val) * a + val * b; return (1 - val) * a + val * b;
} }
// hsv conversion expects 0-1 values
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(MyAvatar.getHeadPosition(), Quat.getFront(Camera.orientation)); return Vec3.sum(MyAvatar.getHeadPosition(), Quat.getFront(Camera.orientation));
} }
@ -98,11 +121,17 @@
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, tweenPosition),
lerp(startColor.s, endColor.s, tweenPosition),
lerp(startColor.v, endColor.v, tweenPosition)
);
Overlays.editOverlay(overlayID, { Overlays.editOverlay(overlayID, {
color: { color: {
red: lerp(startColor.red, endColor.red, tweenPosition), red: rgbColor.red,
green: lerp(startColor.green, endColor.green, tweenPosition), green: rgbColor.green,
blue: lerp(startColor.blue, endColor.blue, tweenPosition) blue: rgbColor.blue
}, },
position: overlayPosition, position: overlayPosition,
rotation: Camera.orientation rotation: Camera.orientation
@ -114,9 +143,7 @@
} }
function cleanup() { function cleanup() {
if (overlayID) { deleteOverlay();
deleteOverlay();
}
AudioDevice.muteToggled.disconnect(onMuteToggled); AudioDevice.muteToggled.disconnect(onMuteToggled);
Script.update.disconnect(update); Script.update.disconnect(update);
} }