overte/examples/libraries/walkInterface.js
2014-11-11 13:21:37 +00:00

2690 lines
No EOL
86 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// walkInterface.js
//
// version 1.001
//
// Created by David Wooldridge, Autumn 2014
//
// Presents the UI for the walk.js script v1.1
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
walkInterface = (function() {
// controller element positions and dimensions
var _backgroundWidth = 350;
var _backgroundHeight = 700;
var _backgroundX = Window.innerWidth - _backgroundWidth - 58;
var _backgroundY = Window.innerHeight / 2 - _backgroundHeight / 2;
var _minSliderX = _backgroundX + 30;
var _sliderRangeX = 295 - 30;
var _jointsControlWidth = 200;
var _jointsControlHeight = 300;
var _jointsControlX = _backgroundX + _backgroundWidth / 2 - _jointsControlWidth / 2;
var _jointsControlY = _backgroundY + 242 - _jointsControlHeight / 2;
var _buttonsY = 20; // distance from top of panel to menu buttons
var _bigButtonsY = 408; // distance from top of panel to top of first big button
// arrays of overlay names
var _sliderThumbOverlays = [];
var _backgroundOverlays = [];
var _buttonOverlays = [];
var _jointsControlOverlays = [];
var _bigbuttonOverlays = [];
// reference to the internal state
var _state = {
editingTranslation: false
};
// reference to the Motion object
var _motion = null;
var _walkAssets = null;
// constants
var MAX_WALK_SPEED = 1257;
// look and feel
var momentaryButtonTimer = null;
// all slider controls have a range (with the exception of phase controls that are always +-180)
var _sliderRanges = {
"joints": [{
"name": "hips",
"pitchRange": 12,
"yawRange": 18,
"rollRange": 12,
"pitchOffsetRange": 25,
"yawOffsetRange": 25,
"rollOffsetRange": 25,
"swayRange": 0.12,
"bobRange": 0.05,
"thrustRange": 0.05,
"swayOffsetRange": 0.25,
"bobOffsetRange": 0.25,
"thrustOffsetRange": 0.25
}, {
"name": "upperLegs",
"pitchRange": 30,
"yawRange": 35,
"rollRange": 35,
"pitchOffsetRange": 20,
"yawOffsetRange": 20,
"rollOffsetRange": 20
}, {
"name": "lowerLegs",
"pitchRange": 10,
"yawRange": 20,
"rollRange": 20,
"pitchOffsetRange": 180,
"yawOffsetRange": 20,
"rollOffsetRange": 20
}, {
"name": "feet",
"pitchRange": 10,
"yawRange": 20,
"rollRange": 20,
"pitchOffsetRange": 180,
"yawOffsetRange": 50,
"rollOffsetRange": 50
}, {
"name": "toes",
"pitchRange": 90,
"yawRange": 20,
"rollRange": 20,
"pitchOffsetRange": 90,
"yawOffsetRange": 20,
"rollOffsetRange": 20
}, {
"name": "spine",
"pitchRange": 40,
"yawRange": 40,
"rollRange": 40,
"pitchOffsetRange": 90,
"yawOffsetRange": 50,
"rollOffsetRange": 50
}, {
"name": "spine1",
"pitchRange": 20,
"yawRange": 40,
"rollRange": 20,
"pitchOffsetRange": 90,
"yawOffsetRange": 50,
"rollOffsetRange": 50
}, {
"name": "spine2",
"pitchRange": 20,
"yawRange": 40,
"rollRange": 20,
"pitchOffsetRange": 90,
"yawOffsetRange": 50,
"rollOffsetRange": 50
}, {
"name": "shoulders",
"pitchRange": 35,
"yawRange": 40,
"rollRange": 20,
"pitchOffsetRange": 180,
"yawOffsetRange": 180,
"rollOffsetRange": 180
}, {
"name": "upperArms",
"pitchRange": 90,
"yawRange": 90,
"rollRange": 90,
"pitchOffsetRange": 180,
"yawOffsetRange": 180,
"rollOffsetRange": 180
}, {
"name": "lowerArms",
"pitchRange": 90,
"yawRange": 90,
"rollRange": 120,
"pitchOffsetRange": 180,
"yawOffsetRange": 180,
"rollOffsetRange": 180
}, {
"name": "hands",
"pitchRange": 90,
"yawRange": 180,
"rollRange": 90,
"pitchOffsetRange": 180,
"yawOffsetRange": 180,
"rollOffsetRange": 180
}, {
"name": "head",
"pitchRange": 20,
"yawRange": 20,
"rollRange": 20,
"pitchOffsetRange": 90,
"yawOffsetRange": 90,
"rollOffsetRange": 90
}]
};
// load overlay images
var _controlsMinimisedTab = Overlays.addOverlay("image", {
x: Window.innerWidth - 58,
y: Window.innerHeight - 145,
width: 50,
height: 50,
imageURL: pathToAssets + 'overlay-images/ddao-minimise-tab.png',
visible: true,
alpha: 0.9
});
var _controlsBackground = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX,
y: _backgroundY,
width: _backgroundWidth,
height: _backgroundHeight
},
imageURL: pathToAssets + "overlay-images/ddao-background.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_backgroundOverlays.push(_controlsBackground);
var _controlsBackgroundWalkEditStyles = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX,
y: _backgroundY,
width: _backgroundWidth,
height: _backgroundHeight
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-styles.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_backgroundOverlays.push(_controlsBackgroundWalkEditStyles);
var _controlsBackgroundWalkEditTweaks = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX,
y: _backgroundY,
width: _backgroundWidth,
height: _backgroundHeight
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-tweaks.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_backgroundOverlays.push(_controlsBackgroundWalkEditTweaks);
var _controlsBackgroundWalkEditHipTrans = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX,
y: _backgroundY,
width: _backgroundWidth,
height: _backgroundHeight
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-translation.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_backgroundOverlays.push(_controlsBackgroundWalkEditHipTrans);
var _controlsBackgroundWalkEditJoints = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX,
y: _backgroundY,
width: _backgroundWidth,
height: _backgroundHeight
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-joints.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_backgroundOverlays.push(_controlsBackgroundWalkEditJoints);
// load character joint selection control images
var _hipsJointsTranslation = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-hips-translation.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_hipsJointsTranslation);
var _hipsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-hips.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_hipsJointControl);
var _upperLegsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-upper-legs.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_upperLegsJointControl);
var _lowerLegsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-lower-legs.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_lowerLegsJointControl);
var _feetJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-feet.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_feetJointControl);
var _toesJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-toes.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_toesJointControl);
var _spineJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-spine.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_spineJointControl);
var _spine1JointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-spine1.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_spine1JointControl);
var _spine2JointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-spine2.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_spine2JointControl);
var _shouldersJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-shoulders.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_shouldersJointControl);
var _upperArmsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-upper-arms.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_upperArmsJointControl);
var _forearmsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-forearms.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_forearmsJointControl);
var _handsJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-hands.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_handsJointControl);
var _headJointControl = Overlays.addOverlay("image", {
bounds: {
x: _jointsControlX,
y: _jointsControlY,
width: 200,
height: 300
},
imageURL: pathToAssets + "overlay-images/ddao-background-edit-head.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_jointsControlOverlays.push(_headJointControl);
// slider thumb overlays
var _sliderOne = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderOne);
var _sliderTwo = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderTwo);
var _sliderThree = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderThree);
var _sliderFour = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderFour);
var _sliderFive = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderFive);
var _sliderSix = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderSix);
var _sliderSeven = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderSeven);
var _sliderEight = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderEight);
var _sliderNine = Overlays.addOverlay("image", {
bounds: {
x: 0,
y: 0,
width: 25,
height: 25
},
imageURL: pathToAssets + "overlay-images/ddao-slider-handle.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_sliderThumbOverlays.push(_sliderNine);
// button overlays
var _onButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 20,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-on-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_onButton);
var _offButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 20,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-off-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_offButton);
var _configWalkButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-walk-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkButton);
var _configWalkButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-walk-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkButtonSelected);
var _configStandButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-stand-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configStandButton);
var _configStandButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-stand-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configStandButtonSelected);
var _configFlyingButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingButton);
var _configFlyingButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingButtonSelected);
var _configFlyingUpButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-up-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingUpButton);
var _configFlyingUpButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-up-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingUpButtonSelected);
var _configFlyingDownButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-down-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingDownButton);
var _configFlyingDownButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-fly-down-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configFlyingDownButtonSelected);
var _hideButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 272,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-hide-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_hideButton);
var _hideButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 272,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-hide-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_hideButtonSelected);
var _configWalkStylesButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-walk-styles-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkStylesButton);
var _configWalkStylesButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-walk-styles-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkStylesButtonSelected);
var _configWalkTweaksButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-walk-tweaks-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkTweaksButton);
var _configWalkTweaksButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 146,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-walk-tweaks-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkTweaksButtonSelected);
var _configSideStepLeftButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-sidestep-left-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configSideStepLeftButton);
var _configSideStepLeftButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 83,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-sidestep-left-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configSideStepLeftButtonSelected);
var _configSideStepRightButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-sidestep-right-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configSideStepRightButton);
var _configSideStepRightButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-edit-sidestep-right-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configSideStepRightButtonSelected);
var _configWalkJointsButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-joints-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkJointsButton);
var _configWalkJointsButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 209,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-joints-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_configWalkJointsButtonSelected);
var _backButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 272,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-back-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_backButton);
var _backButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + 272,
y: _backgroundY + _buttonsY,
width: 60,
height: 47
},
imageURL: pathToAssets + "overlay-images/ddao-back-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_buttonOverlays.push(_backButtonSelected);
// big button overlays - front panel
var _femaleBigButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-female-big-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_femaleBigButton);
var _femaleBigButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-female-big-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_femaleBigButtonSelected);
var _maleBigButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 60,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-male-big-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_maleBigButton);
var _maleBigButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 60,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-male-big-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_maleBigButtonSelected);
var _armsFreeBigButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 120,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-arms-free-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_armsFreeBigButton);
var _armsFreeBigButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 120,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-arms-free-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_armsFreeBigButtonSelected);
var _footstepsBigButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 180,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-footsteps-big-button.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_footstepsBigButton);
var _footstepsBigButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY + 180,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-footsteps-big-button-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_footstepsBigButtonSelected);
// walk styles
_bigButtonsY = 121;
var _standardWalkBigButton = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-walk-select-button-standard.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_standardWalkBigButton);
var _standardWalkBigButtonSelected = Overlays.addOverlay("image", {
bounds: {
x: _backgroundX + _backgroundWidth / 2 - 115,
y: _backgroundY + _bigButtonsY,
width: 230,
height: 36
},
imageURL: pathToAssets + "overlay-images/ddao-walk-select-button-standard-selected.png",
color: {
red: 255,
green: 255,
blue: 255
},
alpha: 1,
visible: false
});
_bigbuttonOverlays.push(_standardWalkBigButtonSelected);
// various show / hide GUI element functions
function minimiseDialog(minimise) {
if (momentaryButtonTimer) {
Script.clearInterval(momentaryButtonTimer);
momentaryButtonTimer = null;
}
if (minimise) {
setBackground();
hideMenuButtons();
setSliderThumbsVisible(false);
hideJointSelectors();
initialiseFrontPanel(false);
Overlays.editOverlay(_controlsMinimisedTab, {
visible: true
});
} else {
Overlays.editOverlay(_controlsMinimisedTab, {
visible: false
});
}
};
function setBackground(backgroundID) {
for (var i in _backgroundOverlays) {
if (_backgroundOverlays[i] === backgroundID) {
Overlays.editOverlay(_backgroundOverlays[i], {
visible: true
});
} else {
Overlays.editOverlay(_backgroundOverlays[i], { visible: false });
}
}
};
// top row menu type buttons (on | walk | stand | fly | hide)
function hideMenuButtons() {
for (var i in _buttonOverlays) {
Overlays.editOverlay(_buttonOverlays[i], { visible: false });
}
};
function hideJointSelectors() {
for (var i in _jointsControlOverlays) {
Overlays.editOverlay(_jointsControlOverlays[i], {
visible: false
});
}
};
function setSliderThumbsVisible(thumbsVisible) {
for (var i = 0; i < _sliderThumbOverlays.length; i++) {
Overlays.editOverlay(_sliderThumbOverlays[i], {
visible: thumbsVisible
});
}
};
function setButtonOverlayVisible(buttonOverlayName) {
for (var i in _buttonOverlays) {
if (_buttonOverlays[i] === buttonOverlayName) {
Overlays.editOverlay(buttonOverlayName, { visible: true });
}
}
};
function initialiseFrontPanel(showButtons) {
if (_motion.avatarGender === FEMALE) {
Overlays.editOverlay(_femaleBigButtonSelected, {
visible: showButtons
});
Overlays.editOverlay(_femaleBigButton, {
visible: false
});
Overlays.editOverlay(_maleBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_maleBigButton, {
visible: showButtons
});
} else {
Overlays.editOverlay(_femaleBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_femaleBigButton, {
visible: showButtons
});
Overlays.editOverlay(_maleBigButtonSelected, {
visible: showButtons
});
Overlays.editOverlay(_maleBigButton, {
visible: false
});
}
if (_motion.armsFree) {
Overlays.editOverlay(_armsFreeBigButtonSelected, {
visible: showButtons
});
Overlays.editOverlay(_armsFreeBigButton, {
visible: false
});
} else {
Overlays.editOverlay(_armsFreeBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_armsFreeBigButton, {
visible: showButtons
});
}
if (_motion.makesFootStepSounds) {
Overlays.editOverlay(_footstepsBigButtonSelected, {
visible: showButtons
});
Overlays.editOverlay(_footstepsBigButton, {
visible: false
});
} else {
Overlays.editOverlay(_footstepsBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_footstepsBigButton, {
visible: showButtons
});
}
};
function initialiseWalkStylesPanel(showButtons) {
// set all big buttons to hidden, but skip the first 8, as are used by the front panel
for (var i = 8; i < _bigbuttonOverlays.length; i++) {
Overlays.editOverlay(_bigbuttonOverlays[i], {
visible: false
});
}
if (!showButtons) {
return;
}
// set all the non-selected ones to showing
for (var i = 8; i < _bigbuttonOverlays.length; i += 2) {
Overlays.editOverlay(_bigbuttonOverlays[i], { visible: true });
}
// set the currently selected one
if (_motion.selWalk === _walkAssets.femaleStandardWalk ||
_motion.selWalk === _walkAssets.maleStandardWalk) {
Overlays.editOverlay(_standardWalkBigButtonSelected, {
visible: true
});
Overlays.editOverlay(_standardWalkBigButton, {
visible: false
});
}
};
function initialiseWalkTweaksPanel() {
// sliders for commonly required walk adjustments
var i = 0;
var yLocation = _backgroundY + 71;
// walk speed
var sliderXPos = _motion.curAnim.calibration.frequency / MAX_WALK_SPEED * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// lean (hips pitch offset)
sliderXPos = (((_sliderRanges.joints[0].pitchOffsetRange + _motion.curAnim.joints[0].pitchOffset) / 2) /
_sliderRanges.joints[0].pitchOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// stride (upper legs pitch)
sliderXPos = _motion.curAnim.joints[1].pitch / _sliderRanges.joints[1].pitchRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Legs separation (upper legs roll offset)
sliderXPos = (((_sliderRanges.joints[1].rollOffsetRange + _motion.curAnim.joints[1].rollOffset) / 2) /
_sliderRanges.joints[1].rollOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Legs forward (upper legs pitch offset)
sliderXPos = (((_sliderRanges.joints[1].pitchOffsetRange + _motion.curAnim.joints[1].pitchOffset) / 2) /
_sliderRanges.joints[1].pitchOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Lower legs splay (lower legs roll offset)
sliderXPos = (((_sliderRanges.joints[2].rollOffsetRange + _motion.curAnim.joints[2].rollOffset) / 2) /
_sliderRanges.joints[2].rollOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Arms forward (upper arms yaw offset)
sliderXPos = (((_sliderRanges.joints[9].yawOffsetRange + _motion.curAnim.joints[9].yawOffset) / 2) /
_sliderRanges.joints[9].yawOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Arms out (upper arm pitch offset)
sliderXPos = (((_sliderRanges.joints[9].pitchOffsetRange - _motion.curAnim.joints[9].pitchOffset) / 2) /
_sliderRanges.joints[9].pitchOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
// Lower arms splay (lower arm pitch offset)
sliderXPos = (((_sliderRanges.joints[10].pitchOffsetRange - _motion.curAnim.joints[10].pitchOffset) / 2) /
_sliderRanges.joints[10].pitchOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 60,
visible: true
});
};
function initialiseJointsEditingPanel() {
var i = 0;
var yLocation = _backgroundY + 359;
hideJointSelectors();
if (_state.editingTranslation) {
// display the joint control selector for hips translations
Overlays.editOverlay(_hipsJointsTranslation, {visible: true});
// Hips sway
var sliderXPos = _motion.curAnim.joints[0].sway / _sliderRanges.joints[0].swayRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// Hips bob
sliderXPos = _motion.curAnim.joints[0].bob / _sliderRanges.joints[0].bobRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// Hips thrust
sliderXPos = _motion.curAnim.joints[0].thrust / _sliderRanges.joints[0].thrustRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// Sway Phase
sliderXPos = (90 + _motion.curAnim.joints[0].swayPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// Bob Phase
sliderXPos = (90 + _motion.curAnim.joints[0].bobPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// Thrust Phase
sliderXPos = (90 + _motion.curAnim.joints[0].thrustPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// offset ranges are also -ve thr' zero to +ve, so we centre them
sliderXPos = (((_sliderRanges.joints[0].swayOffsetRange + _motion.curAnim.joints[0]
.swayOffset) / 2) / _sliderRanges.joints[0].swayOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (((_sliderRanges.joints[0].bobOffsetRange + _motion.curAnim.joints[0]
.bobOffset) / 2) / _sliderRanges.joints[0].bobOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (((_sliderRanges.joints[0].thrustOffsetRange + _motion.curAnim.joints[0]
.thrustOffset) / 2) / _sliderRanges.joints[0].thrustOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
} else {
switch (_motion.curJointIndex) {
case 0:
Overlays.editOverlay(_hipsJointControl, {
visible: true
});
break;
case 1:
Overlays.editOverlay(_upperLegsJointControl, {
visible: true
});
break;
case 2:
Overlays.editOverlay(_lowerLegsJointControl, {
visible: true
});
break;
case 3:
Overlays.editOverlay(_feetJointControl, {
visible: true
});
break;
case 4:
Overlays.editOverlay(_toesJointControl, {
visible: true
});
break;
case 5:
Overlays.editOverlay(_spineJointControl, {
visible: true
});
break;
case 6:
Overlays.editOverlay(_spine1JointControl, {
visible: true
});
break;
case 7:
Overlays.editOverlay(_spine2JointControl, {
visible: true
});
break;
case 8:
Overlays.editOverlay(_shouldersJointControl, {
visible: true
});
break;
case 9:
Overlays.editOverlay(_upperArmsJointControl, {
visible: true
});
break;
case 10:
Overlays.editOverlay(_forearmsJointControl, {
visible: true
});
break;
case 11:
Overlays.editOverlay(_handsJointControl, {
visible: true
});
break;
case 12:
Overlays.editOverlay(_headJointControl, {
visible: true
});
break;
}
var sliderXPos = _motion.curAnim.joints[_motion.curJointIndex].pitch /
_sliderRanges.joints[_motion.curJointIndex].pitchRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = _motion.curAnim.joints[_motion.curJointIndex].yaw /
_sliderRanges.joints[_motion.curJointIndex].yawRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = _motion.curAnim.joints[_motion.curJointIndex].roll /
_sliderRanges.joints[_motion.curJointIndex].rollRange * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// set phases (full range, -180 to 180)
sliderXPos = (90 + _motion.curAnim.joints[_motion.curJointIndex].pitchPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (90 + _motion.curAnim.joints[_motion.curJointIndex].yawPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (90 + _motion.curAnim.joints[_motion.curJointIndex].rollPhase / 2) / 180 * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
// offset ranges are also -ve thr' zero to +ve, so we offset
sliderXPos = (((_sliderRanges.joints[_motion.curJointIndex].pitchOffsetRange +
_motion.curAnim.joints[_motion.curJointIndex].pitchOffset) / 2) /
_sliderRanges.joints[_motion.curJointIndex].pitchOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (((_sliderRanges.joints[_motion.curJointIndex].yawOffsetRange +
_motion.curAnim.joints[_motion.curJointIndex].yawOffset) / 2) /
_sliderRanges.joints[_motion.curJointIndex].yawOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
sliderXPos = (((_sliderRanges.joints[_motion.curJointIndex].rollOffsetRange +
_motion.curAnim.joints[_motion.curJointIndex].rollOffset) / 2) /
_sliderRanges.joints[_motion.curJointIndex].rollOffsetRange) * _sliderRangeX;
Overlays.editOverlay(_sliderThumbOverlays[++i], {
x: _minSliderX + sliderXPos,
y: yLocation += 30,
visible: true
});
}
};
// mouse event handlers
var _movingSliderOne = false;
var _movingSliderTwo = false;
var _movingSliderThree = false;
var _movingSliderFour = false;
var _movingSliderFive = false;
var _movingSliderSix = false;
var _movingSliderSeven = false;
var _movingSliderEight = false;
var _movingSliderNine = false;
function mousePressEvent(event) {
var clickedOverlay = Overlays.getOverlayAtPoint({
x: event.x,
y: event.y
});
if (_state.currentState === _state.EDIT_WALK_JOINTS ||
_state.currentState === _state.EDIT_STANDING ||
_state.currentState === _state.EDIT_FLYING ||
_state.currentState === _state.EDIT_FLYING_UP ||
_state.currentState === _state.EDIT_FLYING_DOWN ||
_state.currentState === _state.EDIT_SIDESTEP_LEFT ||
_state.currentState === _state.EDIT_SIDESTEP_RIGHT) {
// check for new joint selection and update display accordingly
var clickX = event.x - _backgroundX - 75;
var clickY = event.y - _backgroundY - 92;
if (clickX > 60 && clickX < 120 && clickY > 123 && clickY < 155) {
_motion.curJointIndex = 0;
initialiseJointsEditingPanel();
return;
} else if (clickX > 63 && clickX < 132 && clickY > 156 && clickY < 202) {
_motion.curJointIndex = 1;
initialiseJointsEditingPanel();
return;
} else if (clickX > 58 && clickX < 137 && clickY > 203 && clickY < 250) {
_motion.curJointIndex = 2;
initialiseJointsEditingPanel();
return;
} else if (clickX > 58 && clickX < 137 && clickY > 250 && clickY < 265) {
_motion.curJointIndex = 3;
initialiseJointsEditingPanel();
return;
} else if (clickX > 58 && clickX < 137 && clickY > 265 && clickY < 280) {
_motion.curJointIndex = 4;
initialiseJointsEditingPanel();
return;
} else if (clickX > 78 && clickX < 121 && clickY > 111 && clickY < 128) {
_motion.curJointIndex = 5;
initialiseJointsEditingPanel();
return;
} else if (clickX > 78 && clickX < 128 && clickY > 89 && clickY < 111) {
_motion.curJointIndex = 6;
initialiseJointsEditingPanel();
return;
} else if (clickX > 85 && clickX < 118 && clickY > 77 && clickY < 94) {
_motion.curJointIndex = 7;
initialiseJointsEditingPanel();
return;
} else if (clickX > 64 && clickX < 125 && clickY > 55 && clickY < 77) {
_motion.curJointIndex = 8;
initialiseJointsEditingPanel();
return;
} else if ((clickX > 44 && clickX < 73 && clickY > 71 && clickY < 94) ||
(clickX > 125 && clickX < 144 && clickY > 71 && clickY < 94)) {
_motion.curJointIndex = 9;
initialiseJointsEditingPanel();
return;
} else if ((clickX > 28 && clickX < 57 && clickY > 94 && clickY < 119) ||
(clickX > 137 && clickX < 170 && clickY > 97 && clickY < 114)) {
_motion.curJointIndex = 10;
initialiseJointsEditingPanel();
return;
} else if ((clickX > 18 && clickX < 37 && clickY > 115 && clickY < 136) ||
(clickX > 157 && clickX < 182 && clickY > 115 && clickY < 136)) {
_motion.curJointIndex = 11;
initialiseJointsEditingPanel();
return;
} else if (clickX > 81 && clickX < 116 && clickY > 12 && clickY < 53) {
_motion.curJointIndex = 12;
initialiseJointsEditingPanel();
return;
} else if (clickX > 188 && clickX < 233 && clickY > 6 && clickY < 34) {
// translation editing radio selection
if (_state.editingTranslation) {
hideJointSelectors();
setBackground(_controlsBackgroundWalkEditJoints);
_state.editingTranslation = false;
} else {
hideJointSelectors();
setBackground(_controlsBackgroundWalkEditHipTrans);
_state.editingTranslation = true;
}
initialiseJointsEditingPanel();
return;
}
}
switch (clickedOverlay) {
case _offButton:
_state.powerOn = true;
Overlays.editOverlay(_offButton, {
visible: false
});
Overlays.editOverlay(_onButton, {
visible: true
});
_state.setInternalState(state.STANDING);
return;
case _controlsMinimisedTab:
_state.minimised = false;
minimiseDialog(_state.minimised);
_state.setInternalState(_state.STANDING);
return;
case _hideButton:
case _hideButtonSelected:
Overlays.editOverlay(_hideButton, {visible: false});
Overlays.editOverlay(_hideButtonSelected, {visible: true});
_state.minimised = true;
momentaryButtonTimer = Script.setInterval(function() {
minimiseDialog(_state.minimised);
}, 80);
return;
case _backButton:
Overlays.editOverlay(_backButton, {
visible: false
});
Overlays.editOverlay(_backButtonSelected, {
visible: true
});
momentaryButtonTimer = Script.setInterval(function() {
_state.setInternalState(_state.STANDING);
Overlays.editOverlay(_backButton, {
visible: false
});
Overlays.editOverlay(_backButtonSelected, {
visible: false
});
Script.clearInterval(momentaryButtonTimer);
momentaryButtonTimer = null;
}, 80);
return;
case _footstepsBigButton:
_motion.makesFootStepSounds = true;
Overlays.editOverlay(_footstepsBigButtonSelected, {
visible: true
});
Overlays.editOverlay(_footstepsBigButton, {
visible: false
});
return;
case _footstepsBigButtonSelected:
_motion.makesFootStepSounds = false;
Overlays.editOverlay(_footstepsBigButton, {
visible: true
});
Overlays.editOverlay(_footstepsBigButtonSelected, {
visible: false
});
return;
case _femaleBigButton:
case _maleBigButtonSelected:
_motion.setGender(FEMALE);
Overlays.editOverlay(_femaleBigButtonSelected, {
visible: true
});
Overlays.editOverlay(_femaleBigButton, {
visible: false
});
Overlays.editOverlay(_maleBigButton, {
visible: true
});
Overlays.editOverlay(_maleBigButtonSelected, {
visible: false
});
return;
case _maleBigButton:
case _femaleBigButtonSelected:
_motion.setGender(MALE);
Overlays.editOverlay(_femaleBigButton, {
visible: true
});
Overlays.editOverlay(_femaleBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_maleBigButtonSelected, {
visible: true
});
Overlays.editOverlay(_maleBigButton, {
visible: false
});
return;
case _armsFreeBigButton:
_motion.armsFree = true;
Overlays.editOverlay(_armsFreeBigButtonSelected, {
visible: true
});
Overlays.editOverlay(_armsFreeBigButton, {
visible: false
});
return;
case _armsFreeBigButtonSelected:
_motion.armsFree = false;
Overlays.editOverlay(_armsFreeBigButtonSelected, {
visible: false
});
Overlays.editOverlay(_armsFreeBigButton, {
visible: true
});
return;
case _standardWalkBigButton:
if (_motion.avatarGender === FEMALE) {
_motion.selWalk = _motion.femaleStandardWalk;
} else {
_motion.selWalk = _motion.maleStandardWalk;
}
_motion.curAnim = _motion.selWalk;
initialiseWalkStylesPanel(true);
return;
case _standardWalkBigButtonSelected:
// toggle forwards / backwards walk display
if (_motion.direction === FORWARDS) {
_motion.direction = BACKWARDS;
} else {
_motion.direction = FORWARDS;
}
return;
case _sliderOne:
_movingSliderOne = true;
return;
case _sliderTwo:
_movingSliderTwo = true;
return;
case _sliderThree:
_movingSliderThree = true;
return;
case _sliderFour:
_movingSliderFour = true;
return;
case _sliderFive:
_movingSliderFive = true;
return;
case _sliderSix:
_movingSliderSix = true;
return;
case _sliderSeven:
_movingSliderSeven = true;
return;
case _sliderEight:
_movingSliderEight = true;
return;
case _sliderNine:
_movingSliderNine = true;
return;
case _configWalkButtonSelected:
case _configStandButtonSelected:
case _configSideStepLeftButtonSelected:
case _configSideStepRightButtonSelected:
case _configFlyingButtonSelected:
case _configFlyingUpButtonSelected:
case _configFlyingDownButtonSelected:
case _configWalkStylesButtonSelected:
case _configWalkTweaksButtonSelected:
case _configWalkJointsButtonSelected:
// exit edit modes
_motion.curAnim = _motion.selStand;
_state.setInternalState(_state.STANDING);
return;
case _onButton:
_state.powerOn = false;
_state.setInternalState(state.STANDING);
Overlays.editOverlay(_offButton, {
visible: true
});
Overlays.editOverlay(_onButton, {
visible: false
});
return;
case _backButton:
case _backButtonSelected:
Overlays.editOverlay(_backButton, {
visible: false
});
Overlays.editOverlay(_backButtonSelected, {
visible: false
});
_state.setInternalState(_state.STANDING);
return;
case _configWalkStylesButton:
_state.setInternalState(_state.EDIT_WALK_STYLES);
return;
case _configWalkTweaksButton:
_state.setInternalState(_state.EDIT_WALK_TWEAKS);
return;
case _configWalkJointsButton:
_state.setInternalState(_state.EDIT_WALK_JOINTS);
return;
case _configWalkButton:
_state.setInternalState(_state.EDIT_WALK_STYLES);
return;
case _configStandButton:
_state.setInternalState(_state.EDIT_STANDING);
return;
case _configSideStepLeftButton:
_state.setInternalState(_state.EDIT_SIDESTEP_LEFT);
return;
case _configSideStepRightButton:
_state.setInternalState(_state.EDIT_SIDESTEP_RIGHT);
return;
case _configFlyingButton:
_state.setInternalState(_state.EDIT_FLYING);
return;
case _configFlyingUpButton:
_state.setInternalState(_state.EDIT_FLYING_UP);
return;
case _configFlyingDownButton:
_state.setInternalState(_state.EDIT_FLYING_DOWN);
return;
}
};
function mouseMoveEvent(event) {
// workaround for bug (https://worklist.net/20160)
if ((event.x > 310 && event.x < 318 && event.y > 1350 && event.y < 1355) ||
(event.x > 423 && event.x < 428 && event.y > 1505 && event.y < 1508 )) {
return;
}
if (_state.currentState === _state.EDIT_WALK_JOINTS ||
_state.currentState === _state.EDIT_STANDING ||
_state.currentState === _state.EDIT_FLYING ||
_state.currentState === _state.EDIT_FLYING_UP ||
_state.currentState === _state.EDIT_FLYING_DOWN ||
_state.currentState === _state.EDIT_SIDESTEP_LEFT ||
_state.currentState === _state.EDIT_SIDESTEP_RIGHT) {
var thumbClickOffsetX = event.x - _minSliderX;
var thumbPositionNormalised = thumbClickOffsetX / _sliderRangeX;
if (thumbPositionNormalised < 0) {
thumbPositionNormalised = 0;
} else if (thumbPositionNormalised > 1) {
thumbPositionNormalised = 1;
}
var sliderX = thumbPositionNormalised * _sliderRangeX; // sets range
if (_movingSliderOne) {
// currently selected joint pitch or sway
Overlays.editOverlay(_sliderOne, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
_motion.curAnim.joints[0].sway =
thumbPositionNormalised * _sliderRanges.joints[0].swayRange;
} else {
_motion.curAnim.joints[_motion.curJointIndex].pitch =
thumbPositionNormalised * _sliderRanges.joints[_motion.curJointIndex].pitchRange;
}
} else if (_movingSliderTwo) {
// currently selected joint yaw or bob
Overlays.editOverlay(_sliderTwo, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
_motion.curAnim.joints[0].bob =
thumbPositionNormalised * _sliderRanges.joints[0].bobRange;
} else {
_motion.curAnim.joints[_motion.curJointIndex].yaw =
thumbPositionNormalised * _sliderRanges.joints[_motion.curJointIndex].yawRange;
}
} else if (_movingSliderThree) {
// currently selected joint roll or thrust
Overlays.editOverlay(_sliderThree, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
_motion.curAnim.joints[0].thrust =
thumbPositionNormalised * _sliderRanges.joints[0].thrustRange;
} else {
_motion.curAnim.joints[_motion.curJointIndex].roll =
thumbPositionNormalised * _sliderRanges.joints[_motion.curJointIndex].rollRange;
}
} else if (_movingSliderFour) {
// currently selected joint pitch phase
Overlays.editOverlay(_sliderFour, {
x: sliderX + _minSliderX
});
var newPhase = 360 * thumbPositionNormalised - 180;
if (_state.editingTranslation) {
_motion.curAnim.joints[0].swayPhase = newPhase;
} else {
_motion.curAnim.joints[_motion.curJointIndex].pitchPhase = newPhase;
}
} else if (_movingSliderFive) {
// currently selected joint yaw phase;
Overlays.editOverlay(_sliderFive, {
x: sliderX + _minSliderX
});
var newPhase = 360 * thumbPositionNormalised - 180;
if (_state.editingTranslation) {
_motion.curAnim.joints[0].bobPhase = newPhase;
} else {
_motion.curAnim.joints[_motion.curJointIndex].yawPhase = newPhase;
}
} else if (_movingSliderSix) {
// currently selected joint roll phase
Overlays.editOverlay(_sliderSix, {
x: sliderX + _minSliderX
});
var newPhase = 360 * thumbPositionNormalised - 180;
if (_state.editingTranslation) {
_motion.curAnim.joints[0].thrustPhase = newPhase;
} else {
_motion.curAnim.joints[_motion.curJointIndex].rollPhase = newPhase;
}
} else if (_movingSliderSeven) {
// currently selected joint pitch offset
Overlays.editOverlay(_sliderSeven, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
var newOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[0].swayOffsetRange;
_motion.curAnim.joints[0].swayOffset = newOffset;
} else {
var newOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[_motion.curJointIndex].pitchOffsetRange;
_motion.curAnim.joints[_motion.curJointIndex].pitchOffset = newOffset;
}
} else if (_movingSliderEight) {
// currently selected joint yaw offset
Overlays.editOverlay(_sliderEight, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
var newOffset = (thumbPositionNormalised - 0.5) *
2 *_sliderRanges.joints[0].bobOffsetRange;
_motion.curAnim.joints[0].bobOffset = newOffset;
} else {
var newOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[_motion.curJointIndex].yawOffsetRange;
_motion.curAnim.joints[_motion.curJointIndex].yawOffset = newOffset;
}
} else if (_movingSliderNine) {
// currently selected joint roll offset
Overlays.editOverlay(_sliderNine, {
x: sliderX + _minSliderX
});
if (_state.editingTranslation) {
var newOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[0].thrustOffsetRange;
_motion.curAnim.joints[0].thrustOffset = newOffset;
} else {
var newOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[_motion.curJointIndex].rollOffsetRange;
_motion.curAnim.joints[_motion.curJointIndex].rollOffset = newOffset;
}
}
// end if editing joints
} else if (_state.currentState === _state.EDIT_WALK_TWEAKS) {
// sliders for commonly required walk adjustments
var thumbClickOffsetX = event.x - _minSliderX;
var thumbPositionNormalised = thumbClickOffsetX / _sliderRangeX;
if (thumbPositionNormalised < 0) thumbPositionNormalised = 0;
if (thumbPositionNormalised > 1) thumbPositionNormalised = 1;
var sliderX = thumbPositionNormalised * _sliderRangeX; // sets range
if (_movingSliderOne) {
// walk speed
Overlays.editOverlay(_sliderOne, {
x: sliderX + _minSliderX
});
_motion.curAnim.calibration.frequency = thumbPositionNormalised * MAX_WALK_SPEED;
} else if (_movingSliderTwo) {
// lean (hips pitch offset)
Overlays.editOverlay(_sliderTwo, {
x: sliderX + _minSliderX
});
var newOffset = (thumbPositionNormalised - 0.5) * 2 * _sliderRanges.joints[0].pitchOffsetRange;
_motion.curAnim.joints[0].pitchOffset = newOffset;
} else if (_movingSliderThree) {
// stride (upper legs pitch)
Overlays.editOverlay(_sliderThree, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[1].pitch = thumbPositionNormalised * _sliderRanges.joints[1].pitchRange;
} else if (_movingSliderFour) {
// legs separation (upper legs roll)
Overlays.editOverlay(_sliderFour, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[1].rollOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[1].rollOffsetRange;
} else if (_movingSliderFive) {
// legs forward (lower legs pitch offset)
Overlays.editOverlay(_sliderFive, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[1].pitchOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[1].pitchOffsetRange;
} else if (_movingSliderSix) {
// lower legs splay (lower legs roll offset)
Overlays.editOverlay(_sliderSix, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[2].rollOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[2].rollOffsetRange;
} else if (_movingSliderSeven) {
// arms forward (upper arms yaw offset)
Overlays.editOverlay(_sliderSeven, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[9].yawOffset = (thumbPositionNormalised - 0.5) *
2 * _sliderRanges.joints[9].yawOffsetRange;
} else if (_movingSliderEight) {
// arms out (upper arm pitch offset)
Overlays.editOverlay(_sliderEight, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[9].pitchOffset = (thumbPositionNormalised - 0.5) *
-2 * _sliderRanges.joints[9].pitchOffsetRange;
} else if (_movingSliderNine) {
// lower arms splay (lower arm pitch offset)
Overlays.editOverlay(_sliderNine, {
x: sliderX + _minSliderX
});
_motion.curAnim.joints[10].pitchOffset = (thumbPositionNormalised - 0.5) *
-2 * _sliderRanges.joints[10].pitchOffsetRange;
}
} // if tweaking
};
function mouseReleaseEvent(event) {
if (_movingSliderOne) {
_movingSliderOne = false;
} else if (_movingSliderTwo) {
_movingSliderTwo = false;
} else if (_movingSliderThree) {
_movingSliderThree = false;
} else if (_movingSliderFour) {
_movingSliderFour = false;
} else if (_movingSliderFive) {
_movingSliderFive = false;
} else if (_movingSliderSix) {
_movingSliderSix = false;
} else if (_movingSliderSeven) {
_movingSliderSeven = false;
} else if (_movingSliderEight) {
_movingSliderEight = false;
} else if (_movingSliderNine) {
_movingSliderNine = false;
}
};
Controller.mousePressEvent.connect(mousePressEvent);
Controller.mouseMoveEvent.connect(mouseMoveEvent);
Controller.mouseReleaseEvent.connect(mouseReleaseEvent);
// Script ending
Script.scriptEnding.connect(function() {
// delete the background overlays
for (var i in _backgroundOverlays) {
Overlays.deleteOverlay(_backgroundOverlays[i]);
}
// delete the button overlays
for (var i in _buttonOverlays) {
Overlays.deleteOverlay(_buttonOverlays[i]);
}
// delete the slider thumb overlays
for (var i in _sliderThumbOverlays) {
Overlays.deleteOverlay(_sliderThumbOverlays[i]);
}
// delete the character joint control overlays
for (var i in _jointsControlOverlays) {
Overlays.deleteOverlay(_jointsControlOverlays[i]);
}
// delete the big button overlays
for (var i in _bigbuttonOverlays) {
Overlays.deleteOverlay(_bigbuttonOverlays[i]);
}
// delete the mimimised tab
Overlays.deleteOverlay(_controlsMinimisedTab);
});
// public methods
return {
// gather references to objects from the walk.js script
initialise: function(state, motion, walkAssets) {
_state = state;
_motion = motion;
_walkAssets = walkAssets;
},
updateMenu: function() {
if (!_state.minimised) {
switch (_state.currentState) {
case _state.EDIT_WALK_STYLES:
case _state.EDIT_WALK_TWEAKS:
case _state.EDIT_WALK_JOINTS: {
hideMenuButtons();
initialiseFrontPanel(false);
hideJointSelectors();
if (_state.currentState === _state.EDIT_WALK_STYLES) {
setBackground(_controlsBackgroundWalkEditStyles);
initialiseWalkStylesPanel(true);
setSliderThumbsVisible(false);
hideJointSelectors();
setButtonOverlayVisible(_configWalkStylesButtonSelected);
setButtonOverlayVisible(_configWalkTweaksButton);
setButtonOverlayVisible(_configWalkJointsButton);
} else if (_state.currentState === _state.EDIT_WALK_TWEAKS) {
setBackground(_controlsBackgroundWalkEditTweaks);
initialiseWalkStylesPanel(false);
setSliderThumbsVisible(true);
hideJointSelectors();
initialiseWalkTweaksPanel();
setButtonOverlayVisible(_configWalkStylesButton);
setButtonOverlayVisible(_configWalkTweaksButtonSelected);
setButtonOverlayVisible(_configWalkJointsButton);
} else if (_state.currentState === _state.EDIT_WALK_JOINTS) {
if (_state.editingTranslation) {
setBackground(_controlsBackgroundWalkEditHipTrans);
} else {
setBackground(_controlsBackgroundWalkEditJoints);
}
initialiseWalkStylesPanel(false);
setSliderThumbsVisible(true);
setButtonOverlayVisible(_configWalkStylesButton);
setButtonOverlayVisible(_configWalkTweaksButton);
setButtonOverlayVisible(_configWalkJointsButtonSelected);
initialiseJointsEditingPanel();
}
setButtonOverlayVisible(_onButton);
setButtonOverlayVisible(_backButton);
return;
}
case _state.EDIT_STANDING:
case _state.EDIT_SIDESTEP_LEFT:
case _state.EDIT_SIDESTEP_RIGHT: {
if (_state.editingTranslation) {
setBackground(_controlsBackgroundWalkEditHipTrans);
} else {
setBackground(_controlsBackgroundWalkEditJoints);
}
hideMenuButtons();
initialiseWalkStylesPanel(false);
initialiseFrontPanel(false);
if (_state.currentState === _state.EDIT_SIDESTEP_LEFT) {
setButtonOverlayVisible(_configSideStepRightButton);
setButtonOverlayVisible(_configSideStepLeftButtonSelected);
setButtonOverlayVisible(_configStandButton);
} else if (_state.currentState === _state.EDIT_SIDESTEP_RIGHT) {
setButtonOverlayVisible(_configSideStepRightButtonSelected);
setButtonOverlayVisible(_configSideStepLeftButton);
setButtonOverlayVisible(_configStandButton);
} else if (_state.currentState === _state.EDIT_STANDING) {
setButtonOverlayVisible(_configSideStepRightButton);
setButtonOverlayVisible(_configSideStepLeftButton);
setButtonOverlayVisible(_configStandButtonSelected);
}
initialiseJointsEditingPanel();
setButtonOverlayVisible(_onButton);
setButtonOverlayVisible(_backButton);
return;
}
case _state.EDIT_FLYING:
case _state.EDIT_FLYING_UP:
case _state.EDIT_FLYING_DOWN: {
setBackground(_controlsBackgroundWalkEditJoints);
hideMenuButtons();
initialiseWalkStylesPanel(false);
initialiseFrontPanel(false);
if (_state.currentState === _state.EDIT_FLYING) {
setButtonOverlayVisible(_configFlyingUpButton);
setButtonOverlayVisible(_configFlyingDownButton);
setButtonOverlayVisible(_configFlyingButtonSelected);
} else if (_state.currentState === _state.EDIT_FLYING_UP) {
setButtonOverlayVisible(_configFlyingUpButtonSelected);
setButtonOverlayVisible(_configFlyingDownButton);
setButtonOverlayVisible(_configFlyingButton);
} else if (_state.currentState === _state.EDIT_FLYING_DOWN) {
setButtonOverlayVisible(_configFlyingUpButton);
setButtonOverlayVisible(_configFlyingDownButtonSelected);
setButtonOverlayVisible(_configFlyingButton);
}
initialiseJointsEditingPanel();
setButtonOverlayVisible(_onButton);
setButtonOverlayVisible(_backButton);
return;
}
case _state.STANDING:
case _state.WALKING:
case _state.FLYING:
case _state.SIDE_STEP:
default: {
hideMenuButtons();
hideJointSelectors();
setBackground(_controlsBackground);
if (_state.powerOn) {
setButtonOverlayVisible(_onButton);
} else {
setButtonOverlayVisible(_offButton);
}
setButtonOverlayVisible(_configWalkButton);
setButtonOverlayVisible(_configStandButton);
setButtonOverlayVisible(_configFlyingButton);
setButtonOverlayVisible(_hideButton);
setSliderThumbsVisible(false);
initialiseFrontPanel(true);
initialiseWalkStylesPanel(false);
return;
}
}
}
}
}; // end public methods (return)
})();