content/hifi-public/animations/ArmSwingTest/flourish-augmentation-simple.js
Dale Glass 0d14e5a379 Initial data.
Needs a lot of cleanup. Data has been de-duplicated, and where identical copies existed, one of them
has been replaced with a symlink.

Some files have been excluded, such as binaries, installers and debug dumps. Some of that may still
be present.
2022-02-13 18:59:11 +01:00

349 lines
No EOL
10 KiB
JavaScript

//
// flourish-augmentation-simple.js
//
//
// Created by Davedub, August 2014
//
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
// always at the top...
var pathToOverlays = "/Users/ozan/Documents/Assets/Animations/ArmSwingTest/flourish-augmentation/overlays";
// print out some joint information
var jointList = MyAvatar.getJointNames();
var jointMappings = "\n# Avatar joint list start";
for (var i = 0; i < jointList.length; i++) {
jointMappings = jointMappings + "\njointIndex = " + jointList[i] + " = " + i;
}
print(jointMappings + "\n# walk.js avatar joint list end");
resetJoints();
var hipsToFeetDistance = MyAvatar.getJointPosition("Hips").y - MyAvatar.getJointPosition("RightFoot").y;
print('\nHips to feet: '+hipsToFeetDistance); // not needed yet, but will be
// animation stuff
var handleValue = 0;
var filterStrength = 0;
MyAvatar.setJointData("LeftArm", Quat.fromPitchYawRollDegrees( 80, 0, 0));
// overlays
var controlPosX = Window.innerWidth/2;
var controlPosY = 0;
var minSliderX = controlPosX+18;
var sliderRangeX = 190;
var minHandleX = controlPosX+77;
var handleRangeX = 190;
var handlePosition = 0;
var controllerBackground = Overlays.addOverlay("image", {
bounds: { x: controlPosX, y: controlPosY, width: 250, height: 380},
imageURL: pathToOverlays+"flourish-augmentation-control-overlay.png",
color: { red: 255, green: 255, blue: 255},
alpha: 1
});
var controllerHandle = Overlays.addOverlay("image", {
bounds: { x: minHandleX, y: controlPosY+225, width: 79, height: 100},
imageURL: pathToOverlays+"flourish-augmentation-handle-overlay.png",
color: { red: 255, green: 255, blue: 255},
alpha: 1
});
var controllerSlider = Overlays.addOverlay("image", {
bounds: { x: minSliderX, y: controlPosY+178, width: 25, height: 25},
imageURL: pathToOverlays+"ddao-slider-handle.png",
color: { red: 255, green: 255, blue: 255},
alpha: 1
});
// main loop - using crude averaging filters for quick implementation
//var shoulderPDampingFilter = [0,0,0,0];
//var shoulderYDampingFilter = [0,0,0,0];
//var shoulderRDampingFilter = [0,0,0,0];
var upperArmPDampingFilter = [0,0,0,0,0,0,0,0,0,0,0,0];
//var upperArmYDampingFilter = [0,0,0,0,0,0];
//var upperArmRDampingFilter = [0,0,0,0,0,0];
var lowerArmPDampingFilter = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
//var lowerArmYDampingFilter = [0,0,0,0,0,0,0,0];
//var lowerArmRDampingFilter = [0,0,0,0,0,0,0,0];
//var handDampingPFilter = [0,0,0,0,0,0,0,0,0,0];
//var handDampingYFilter = [0,0,0,0,0,0,0,0,0,0];
//var handDampingRFilter = [0,0,0,0,0,0,0,0,0,0];
Script.update.connect(function(deltaTime) {
// blend three keyframes using handle position for weighting
var keyframeOneWeight = 0;
var keyframeTwoWeight = 0;
var keyframeThreeWeight = 0;
if(handleValue>0 && movingHandle) {
// right
keyframeOneWeight = 0;
keyframeTwoWeight = handleValue;
keyframeThreeWeight = 1-handleValue;
}
else if (handleValue<=0 && movingHandle) {
// left
keyframeOneWeight = 0;
keyframeTwoWeight = 1-handleValue;
keyframeThreeWeight = handleValue;
}
else if(!movingHandle) {
// idle
keyframeOneWeight = 1;
keyframeTwoWeight = 0;
keyframeThreeWeight = 0;
}
var shoulderPitch =
keyframeOneWeight * keyFrameOne.joints[0].pitch +
keyframeTwoWeight * keyFrameTwo.joints[0].pitch +
keyframeThreeWeight * keyFrameThree.joints[0].pitch;
var upperArmPitch =
keyframeOneWeight * keyFrameOne.joints[1].pitch +
keyframeTwoWeight * keyFrameTwo.joints[1].pitch +
keyframeThreeWeight * keyFrameThree.joints[1].pitch;
var lowerArmPitch =
keyframeOneWeight * keyFrameOne.joints[2].pitch +
keyframeTwoWeight * keyFrameTwo.joints[2].pitch +
keyframeThreeWeight * keyFrameThree.joints[2].pitch;
var handPitch =
keyframeOneWeight * keyFrameOne.joints[3].pitch +
keyframeTwoWeight * keyFrameTwo.joints[3].pitch +
keyframeThreeWeight * keyFrameThree.joints[3].pitch;
var shoulderYaw =
keyframeOneWeight * keyFrameOne.joints[0].yaw +
keyframeTwoWeight * keyFrameTwo.joints[0].yaw +
keyframeThreeWeight * keyFrameThree.joints[0].yaw;
var upperArmYaw =
keyframeOneWeight * keyFrameOne.joints[1].yaw +
keyframeTwoWeight * keyFrameTwo.joints[1].yaw +
keyframeThreeWeight * keyFrameThree.joints[1].yaw;
var lowerArmYaw =
keyframeOneWeight * keyFrameOne.joints[2].yaw +
keyframeTwoWeight * keyFrameTwo.joints[2].yaw +
keyframeThreeWeight * keyFrameThree.joints[2].yaw;
var handYaw =
keyframeOneWeight * keyFrameOne.joints[3].yaw +
keyframeTwoWeight * keyFrameTwo.joints[3].yaw +
keyframeThreeWeight * keyFrameThree.joints[3].yaw;
var shoulderRoll =
keyframeOneWeight * keyFrameOne.joints[0].roll +
keyframeTwoWeight * keyFrameTwo.joints[0].roll +
keyframeThreeWeight * keyFrameThree.joints[0].roll;
var upperArmRoll =
keyframeOneWeight * keyFrameOne.joints[1].roll +
keyframeTwoWeight * keyFrameTwo.joints[1].roll +
keyframeThreeWeight * keyFrameThree.joints[1].roll;
var lowerArmRoll =
keyframeOneWeight * keyFrameOne.joints[2].roll +
keyframeTwoWeight * keyFrameTwo.joints[2].roll +
keyframeThreeWeight * keyFrameThree.joints[2].roll;
var handRoll =
keyframeOneWeight * keyFrameOne.joints[3].roll +
keyframeTwoWeight * keyFrameTwo.joints[3].roll +
keyframeThreeWeight * keyFrameThree.joints[3].roll;
// filter upper arm pitch
upperArmPDampingFilter.push(upperArmPitch);
upperArmPDampingFilter.shift();
var upperArmPitchFinal = 0;
for(ea in upperArmPDampingFilter) upperArmPitchFinal += upperArmPDampingFilter[ea];
upperArmPitchFinal /= upperArmPDampingFilter.length;
upperArmPitch = (filterStrength*upperArmPitchFinal) + ((1-filterStrength) * upperArmPitch);
// filter forearm pitch
lowerArmPDampingFilter.push(lowerArmPitch);
lowerArmPDampingFilter.shift();
var lowerArmPitchFinal = 0;
for(ea in lowerArmPDampingFilter) lowerArmPitchFinal += lowerArmPDampingFilter[ea];
lowerArmPitchFinal /= lowerArmPDampingFilter.length;
lowerArmPitch = (filterStrength*lowerArmPitchFinal) + ((1-filterStrength) * lowerArmPitch);
MyAvatar.setJointData("RightShoulder", Quat.fromPitchYawRollDegrees( shoulderPitch, shoulderYaw, shoulderRoll));
MyAvatar.setJointData("RightArm", Quat.fromPitchYawRollDegrees( upperArmPitch, upperArmYaw, upperArmRoll));
MyAvatar.setJointData("RightForeArm", Quat.fromPitchYawRollDegrees( lowerArmPitch, lowerArmYaw, lowerArmRoll));
MyAvatar.setJointData("RightHand", Quat.fromPitchYawRollDegrees( handPitch, handYaw, handRoll));
});
// mouse stuff
var movingHandle = false;
var movingSlider = false;
function mousePressEvent(event) {
var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y});
if(clickedOverlay===controllerHandle) movingHandle = true;
else if(clickedOverlay===controllerSlider) movingSlider = true;
}
function mouseMoveEvent(event) {
if(movingHandle) {
var thumbClickOffsetX = event.x - minHandleX;
var thumbPositionNormalised = thumbClickOffsetX / handleRangeX;
if(thumbPositionNormalised<-2) thumbPositionNormalised = -2;
if(thumbPositionNormalised>2) thumbPositionNormalised = 2;
handleValue = (thumbPositionNormalised+2.001)/4;
var handleX = (thumbPositionNormalised * sliderRangeX); // sets range
Overlays.editOverlay(controllerHandle, { x: handleX + minHandleX} ); }
else if(movingSlider) {
var thumbClickOffsetX = event.x - minSliderX;
var thumbPositionNormalised = thumbClickOffsetX / sliderRangeX;
if(thumbPositionNormalised<0) thumbPositionNormalised = 0;
if(thumbPositionNormalised>1) thumbPositionNormalised = 1;
filterStrength = thumbPositionNormalised;
var sliderX = thumbPositionNormalised * sliderRangeX ; // sets range
Overlays.editOverlay(controllerSlider, { x: sliderX + minSliderX} );
}
}
function mouseReleaseEvent(event) {
//var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y});
if(movingHandle) {
movingHandle = false;
handleValue = 0;
Overlays.editOverlay(controllerHandle, { x: minHandleX} );
}
else if(movingSlider) movingSlider = false;
}
Controller.mouseMoveEvent.connect(mouseMoveEvent);
Controller.mousePressEvent.connect(mousePressEvent);
Controller.mouseReleaseEvent.connect(mouseReleaseEvent);
// zero out all joints
function resetJoints() {
var avatarJointNames = MyAvatar.getJointNames();
for (var i = 0; i < avatarJointNames.length; i++) {
//MyAvatar.setJointData(avatarJointNames[i], Quat.fromPitchYawRollDegrees(0,0,0));
MyAvatar.clearJointData(avatarJointNames[i]);
}
}
// Script ending
Script.scriptEnding.connect(function() {
Overlays.deleteOverlay(controllerSlider);
Overlays.deleteOverlay(controllerHandle);
Overlays.deleteOverlay(controllerBackground);
// leave the avi in zeroed out stance
resetJoints();
});
// standing - middle
var keyFrameOne =
{
"joints":[
{
"name":"RightShoulder",
"pitch":0,
"yaw":0,
"roll":0
},
{
"name":"RightArm",
"pitch":80,
"yaw":0,
"roll":0
},
{
"name":"RightForeArm",
"pitch":0,
"yaw":0,
"roll":0
},
{
"name":"RightHand",
"pitch":0,
"yaw":0,
"roll":0
}
]
}
// arm wave right
var keyFrameTwo =
{
"joints":[
{
"name":"RightShoulder",
"pitch":-23,
"yaw":-10.5,
"roll":-0.5
},
{
"name":"RightArm",
"pitch":-0.5,
"yaw":-32,
"roll":-1.5
},
{
"name":"RightForeArm",
"pitch":-40,
"yaw":30,
"roll":7.5
},
{
"name":"RightHand",
"pitch":0,
"yaw":90,
"roll":0
}
]
}
// arm wave left
var keyFrameThree =
{
"joints":[
{
"name":"RightShoulder",
"pitch":-23,
"yaw":-10.5,
"roll":-0.5
},
{
"name":"RightArm",
"pitch":-10.5,
"yaw":-32,
"roll":-1.5
},
{
"name":"RightForeArm",
"pitch":-110,
"yaw":30,
"roll":7.5
},
{
"name":"RightHand",
"pitch":0,
"yaw":90,
"roll":0
}
]
}