plays sounds and stuff

This commit is contained in:
James B. Pollack 2016-03-10 17:09:16 -08:00
parent 09cccd563d
commit 0733cd4bda
3 changed files with 204 additions and 64 deletions

View file

@ -44,8 +44,8 @@ var PICK_WITH_HAND_RAY = true;
var DISTANCE_HOLDING_RADIUS_FACTOR = 3.5; // multiplied by distance between hand and object
var DISTANCE_HOLDING_ACTION_TIMEFRAME = 0.1; // how quickly objects move to their new position
var DISTANCE_HOLDING_UNITY_MASS = 1200; // The mass at which the distance holding action timeframe is unmodified
var DISTANCE_HOLDING_UNITY_DISTANCE = 6; // The distance at which the distance holding action timeframe is unmodified
var DISTANCE_HOLDING_UNITY_MASS = 1200; // The mass at which the distance holding action timeframe is unmodified
var DISTANCE_HOLDING_UNITY_DISTANCE = 6; // The distance at which the distance holding action timeframe is unmodified
var DISTANCE_HOLDING_ROTATION_EXAGGERATION_FACTOR = 2.0; // object rotates this much more than hand did
var MOVE_WITH_HEAD = true; // experimental head-control of distantly held objects
var FAR_TO_NEAR_GRAB_PADDING_FACTOR = 1.2;
@ -346,7 +346,7 @@ function MyController(hand) {
this.grabSphereOff();
if (WANT_DEBUG || WANT_DEBUG_STATE) {
print("STATE (" + this.hand + "): " + stateToName(this.state) + " --> " +
stateToName(newState) + ", hand: " + this.hand);
stateToName(newState) + ", hand: " + this.hand);
}
this.state = newState;
};
@ -425,11 +425,15 @@ function MyController(hand) {
}
this.grabSphereOn = function() {
var color = {red: 0, green: 255, blue: 0};
var color = {
red: 0,
green: 255,
blue: 0
};
if (this.grabSphere === null) {
var sphereProperties = {
position: this.getHandPosition(),
size: GRAB_RADIUS*2,
size: GRAB_RADIUS * 2,
color: color,
alpha: 0.1,
solid: true,
@ -439,7 +443,7 @@ function MyController(hand) {
} else {
Overlays.editOverlay(this.grabSphere, {
position: this.getHandPosition(),
size: GRAB_RADIUS*2,
size: GRAB_RADIUS * 2,
color: color,
alpha: 0.1,
solid: true,
@ -492,12 +496,10 @@ function MyController(hand) {
}
var searchSphereLocation = Vec3.sum(distantPickRay.origin,
Vec3.multiply(distantPickRay.direction, this.searchSphereDistance));
this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance,
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
Vec3.multiply(distantPickRay.direction, this.searchSphereDistance));
this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance, (this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
if ((USE_OVERLAY_LINES_FOR_SEARCHING === true) && PICK_WITH_HAND_RAY) {
this.overlayLineOn(handPosition, searchSphereLocation,
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
this.overlayLineOn(handPosition, searchSphereLocation, (this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
}
}
@ -824,8 +826,8 @@ function MyController(hand) {
var distantPickRay = {
origin: PICK_WITH_HAND_RAY ? handPosition : Camera.position,
direction: PICK_WITH_HAND_RAY ? Quat.getUp(this.getHandRotation()) : Vec3.mix(Quat.getUp(this.getHandRotation()),
Quat.getFront(Camera.orientation),
HAND_HEAD_MIX_RATIO),
Quat.getFront(Camera.orientation),
HAND_HEAD_MIX_RATIO),
length: PICK_MAX_DISTANCE
};
@ -1149,9 +1151,9 @@ function MyController(hand) {
// double delta controller rotation
var handChange = Quat.multiply(Quat.slerp(this.previousControllerRotation,
controllerRotation,
DISTANCE_HOLDING_ROTATION_EXAGGERATION_FACTOR),
Quat.inverse(this.previousControllerRotation));
controllerRotation,
DISTANCE_HOLDING_ROTATION_EXAGGERATION_FACTOR),
Quat.inverse(this.previousControllerRotation));
// update the currentObject position and rotation.
this.currentObjectPosition = Vec3.sum(this.currentObjectPosition, handMoved);
@ -1279,7 +1281,9 @@ function MyController(hand) {
};
this.hasPresetOffsets = function() {
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {
joints: {}
});
if ("joints" in wearableData) {
var allowedJoints = wearableData.joints;
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
@ -1291,7 +1295,9 @@ function MyController(hand) {
}
this.getPresetPosition = function() {
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {
joints: {}
});
var allowedJoints = wearableData.joints;
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
if (handJointName in allowedJoints) {
@ -1300,7 +1306,9 @@ function MyController(hand) {
}
this.getPresetRotation = function() {
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {
joints: {}
});
var allowedJoints = wearableData.joints;
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
if (handJointName in allowedJoints) {
@ -1319,12 +1327,12 @@ function MyController(hand) {
roll: false
}
}
var constraints = getEntityCustomData(GRAB_CONSTRAINTS_USER_DATA_KEY, this.grabbedEntity,defaultConstraints);
var constraints = getEntityCustomData(GRAB_CONSTRAINTS_USER_DATA_KEY, this.grabbedEntity, defaultConstraints);
return constraints;
}
this.nearGrabbing = function() {
print('NEAR GRAB')
print('NEAR GRAB')
var now = Date.now();
var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
@ -1451,7 +1459,7 @@ function MyController(hand) {
Vec3.length(props.localPosition) > NEAR_PICK_MAX_DISTANCE * 2.0) {
// for whatever reason, the held/equipped entity has been pulled away. ungrab or unequip.
print("handControllerGrab -- autoreleasing held or equipped item because it is far from hand." +
props.parentID + " " + vec3toStr(props.position));
props.parentID + " " + vec3toStr(props.position));
this.setState(STATE_RELEASE);
this.callEntityMethodOnGrabbed(this.state == STATE_NEAR_GRABBING ? "releaseGrab" : "releaseEquip");
return;
@ -1483,10 +1491,10 @@ function MyController(hand) {
var constraints = this.getGrabConstraints();
if(constraints.positionLocked===true){
if (constraints.positionLocked === true) {
print('IT HAS ITS POSITION LOCKED!!')
}
if(constraints.rotationMod!==false){
if (constraints.rotationMod !== false) {
print('IT HAS A ROTATION MOD!!!')
}
@ -1529,7 +1537,7 @@ function MyController(hand) {
}
this.callEntityMethodOnGrabbed("startNearTrigger");
this.setState(STATE_CONTINUE_NEAR_TRIGGER);
print('START NEAR TRIGGER')
print('START NEAR TRIGGER')
};
@ -1551,8 +1559,8 @@ function MyController(hand) {
return;
}
var constraints = this.getGrabConstraints();
var constraints = this.getGrabConstraints();
if (constraints.rotationMod !== false) {
//implement the rotation modifier
var grabbedProps = Entities.getEntityProperties(this.grabbedEntity);
@ -1561,9 +1569,7 @@ function MyController(hand) {
var modTypes = [];
print('rotation constrained')
if (constraints.rotationMod.pitch !== false) {
print('HAS PITCH MOD')
modTypes.push('pitch')
}
if (constraints.rotationMod.yaw !== false) {
@ -1585,14 +1591,16 @@ function MyController(hand) {
var min1 = constraints.rotationMod[modType].startingPoint;
var finalAngle = scale(value, min1, constraints.rotationMod[modType].distanceToMax, constraints.rotationMod[modType].min, constraints.rotationMod[modType].max)
print('VARS: ')
print('CONSTRAINTS:: ' + JSON.stringify(constraints))
print('value: ' + value)
print('min1:' + min1)
print('max1:' + constraints.rotationMod[modType].distanceToMax)
print('min2: ' + constraints.rotationMod[modType].min)
print('max2: ' + constraints.rotationMod[modType].max)
print('FINAL ANGLE::' + finalAngle)
// print('VARS: ')
// print('CONSTRAINTS:: ' + JSON.stringify(constraints))
// print('value: ' + value)
// print('min1:' + min1)
// print('max1:' + constraints.rotationMod[modType].distanceToMax)
// print('min2: ' + constraints.rotationMod[modType].min)
// print('max2: ' + constraints.rotationMod[modType].max)
// print('FINAL ANGLE::' + finalAngle)
if (finalAngle < constraints.rotationMod[modType].min) {
finalAngle = constraints.rotationMod[modType].min;
}
@ -1611,11 +1619,8 @@ function MyController(hand) {
finalRotation.z = finalAngle
}
});
print('FINAL ROTATION::' + JSON.stringify(finalRotation))
Entities.editEntity(this.grabbedEntity, {
rotation: Quat.fromPitchYawRollDegrees(finalRotation.x, finalRotation.y, finalRotation.z)
})
Entities.callEntityMethod(this.grabbedEntity, constraints.callback, [JSON.stringify(finalRotation)]);
}
this.callEntityMethodOnGrabbed("continueNearTrigger");
@ -1731,7 +1736,7 @@ function MyController(hand) {
// sometimes we want things to stay right where they are when we let go.
var grabData = getEntityCustomData(GRAB_USER_DATA_KEY, this.grabbedEntity, {});
var releaseVelocityData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
print('RELEASE DATA::'+ JSON.stringify(releaseVelocityData))
print('RELEASE DATA::' + JSON.stringify(releaseVelocityData))
if (releaseVelocityData.disableReleaseVelocity === true ||
// this next line allowed both:
// (1) far-grab, pull to self, near grab, then throw
@ -1833,7 +1838,9 @@ function MyController(hand) {
// people are holding something and one of them will be able (if the other releases at the right time) to
// bootstrap themselves with the held object. This happens because the meaning of "otherAvatar" in
// the collision mask hinges on who the physics simulation owner is.
Entities.editEntity(entityID, {"collidesWith": COLLIDES_WITH_WHILE_MULTI_GRABBED});
Entities.editEntity(entityID, {
"collidesWith": COLLIDES_WITH_WHILE_MULTI_GRABBED
});
}
}
print('ACTIVATED ENTITY!!!')
@ -1848,7 +1855,9 @@ function MyController(hand) {
var children = Entities.getChildrenIDsOfJoint(MyAvatar.sessionUUID, handJointIndex);
children.forEach(function(childID) {
print("disconnecting stray child of hand: (" + _this.hand + ") " + childID);
Entities.editEntity(childID, {parentID: NULL_UUID});
Entities.editEntity(childID, {
parentID: NULL_UUID
});
});
}
@ -1876,11 +1885,23 @@ function MyController(hand) {
data["dynamic"] &&
data["parentID"] == NULL_UUID &&
!data["collisionless"]) {
deactiveProps["velocity"] = {x: 0.0, y: 0.1, z: 0.0};
deactiveProps["velocity"] = {
x: 0.0,
y: 0.1,
z: 0.0
};
}
if (noVelocity) {
deactiveProps["velocity"] = {x: 0.0, y: 0.0, z: 0.0};
deactiveProps["angularVelocity"] = {x: 0.0, y: 0.0, z: 0.0};
deactiveProps["velocity"] = {
x: 0.0,
y: 0.0,
z: 0.0
};
deactiveProps["angularVelocity"] = {
x: 0.0,
y: 0.0,
z: 0.0
};
}
Entities.editEntity(entityID, deactiveProps);
@ -1890,13 +1911,31 @@ function MyController(hand) {
var deactiveProps = {
parentID: this.previousParentID,
parentJointIndex: this.previousParentJointIndex,
velocity: {x: 0.0, y: 0.0, z: 0.0},
angularVelocity: {x: 0.0, y: 0.0, z: 0.0}
velocity: {
x: 0.0,
y: 0.0,
z: 0.0
},
angularVelocity: {
x: 0.0,
y: 0.0,
z: 0.0
}
};
Entities.editEntity(entityID, deactiveProps);
} else if (noVelocity) {
Entities.editEntity(entityID, {velocity: {x: 0.0, y: 0.0, z: 0.0},
angularVelocity: {x: 0.0, y: 0.0, z: 0.0}});
Entities.editEntity(entityID, {
velocity: {
x: 0.0,
y: 0.0,
z: 0.0
},
angularVelocity: {
x: 0.0,
y: 0.0,
z: 0.0
}
});
}
} else {
data = null;

View file

@ -56,6 +56,8 @@ var LID_REGISTRATION_POINT = {
z: 1
}
var LID_SCRIPT_URL = Script.resolvePath('lid.js?'+Math.random());
var base, lid;
@ -84,9 +86,11 @@ function createLid() {
position: lidPosition,
registrationPoint: LID_REGISTRATION_POINT,
dynamic: false,
collidesWith: '',
script:LID_SCRIPT_URL,
collidesWith: 'myAvatar,otherAvatar',
userData: JSON.stringify({
grabConstraintsKey: {
callback:'rotateLid',
positionLocked: true,
rotationLocked: false,
positionMod: false,
@ -97,8 +101,6 @@ function createLid() {
startingAxis:'y',
startingPoint:lidPosition.y,
distanceToMax:lidPosition.y+0.35,
trigger:20,
triggerFunction:'toggleMusic'
},
yaw: false,
roll: false

View file

@ -7,23 +7,122 @@
return this;
}
var MUSIC_URL = 'https://hifi-content.s3.amazonaws.com/DomainContent/Home/Sounds/aquarium_small.L.wav';
var SHUT_SOUND_URL = 'http://hifi-content.s3.amazonaws.com/DomainContent/Home/Sounds/book_fall.L.wav';
var OPEN_SOUND_URL = 'http://public.highfidelity.io/sounds/Switches%20and%20sliders/lamp_switch_2.wav'
Lid.prototype = {
preload: function() {
preload: function(entityID) {
print('PRELOAD LID')
_this.entityID = entityID;
_this.music = SoundCache.getSound(MUSIC_URL);
_this.shutSound = SoundCache.getSound(SHUT_SOUND_URL);
_this.openSound = SoundCache.getSound(OPEN_SOUND_URL);
_this.musicIsPlaying = false;
_this.shut = true;
_this.shutSoundInjector = {
isPlaying: false
};
_this.musicInjector = null;
_this.openSoundInjector = {
isPlaying: false
}
},
initialize: function() {
continueNearTrigger: function() {
var properties = Entities.getEntityProperties(this.entityID);
},
playMusic: function() {
if (this.musicIsPlaying !== true) {
var properties = Entities.getEntityProperties(this.entityID);
var audioOptions = {
position: properties.position,
volume: 0.75,
loop: true
}
this.musicInjector = Audio.playSound(this.music, audioOptions);
this.musicIsPlaying = true;
}
},
stopMusic: function() {
this.musicInjector.stop();
this.musicIsPlaying = false;
},
playOpenSound: function() {
if (this.openSoundInjector.isPlaying !== true) {
var properties = Entities.getEntityProperties(this.entityID);
var audioOptions = {
position: properties.position,
volume: 1,
loop: false
}
this.openSoundInjector = Audio.playSound(this.openSound, audioOptions);
}
},
playShutSound: function() {
if (this.shutSoundInjector.isPlaying !== true) {
var properties = Entities.getEntityProperties(this.entityID);
var audioOptions = {
position: properties.position,
volume: 1,
loop: false
}
this.shutSoundInjector = Audio.playSound(this.shutSound, audioOptions);
}
},
rotateLid: function(myID, paramsArray) {
var finalRotation;
paramsArray.forEach(function(param) {
var p;
// print('param is:' + param)
try {
p = JSON.parse(param);
finalRotation = p;
} catch (err) {
// print('not a json param')
return;
p = param;
}
});
if (finalRotation.x > 20 && this.musicIsPlaying === false) {
this.playMusic();
print('play music!!')
}
if (finalRotation.x <= 20 && this.musicIsPlaying === true) {
print('stop music!!')
this.stopMusic();
}
if (finalRotation.x > 0 && this.shut === true) {
print('play open sound!!')
this.shut = false;
this.playOpenSound();
} else if (finalRotation.x <= 0 && this.shut === false) {
print('play shut sound!!')
this.shut = true;
this.playShutSound();
}
Entities.editEntity(this.entityID, {
rotation: Quat.fromPitchYawRollDegrees(finalRotation.x, finalRotation.y, finalRotation.z)
})
},
startNearGrab: function() {
},
releaseGrab: function() {
},
unload: function() {
this.musicInjector.stop();
},
}