37 lines
No EOL
1.8 KiB
JavaScript
37 lines
No EOL
1.8 KiB
JavaScript
(function() {
|
|
var LOOKAT_MIX_ALPHA = 0.15;
|
|
var lookAtPoint = undefined;
|
|
var lookingAtAvatarID = undefined;
|
|
var lookingAvatarJointIndex = undefined;
|
|
var getNormalizedLookAtPoint = function(worldLookAtPoint) {
|
|
return Vec3.sum(MyAvatar.getHeadPosition(), Vec3.normalize(Vec3.subtract(worldLookAtPoint, MyAvatar.getHeadPosition())));
|
|
}
|
|
var interpolatedLookAt = getNormalizedLookAtPoint(MyAvatar.getHeadLookAt());
|
|
var mousePressEvent = function(event) {
|
|
if (!event.isLeftButton) return;
|
|
var pickRay = Camera.computePickRay(event.x, event.y);
|
|
var intersection = AvatarManager.findRayIntersection({origin: pickRay.origin, direction: pickRay.direction}, [], [MyAvatar.sessionUUID], false);
|
|
lookingAtAvatarID = intersection.intersects ? intersection.avatarID : undefined;
|
|
if (!lookingAtAvatarID) {
|
|
intersection = Entities.findRayIntersection({origin: pickRay.origin, direction: pickRay.direction}, true);
|
|
lookAtPoint = intersection.intersection;
|
|
} else {
|
|
var avatar = AvatarList.getAvatar(lookingAtAvatarID);
|
|
console.log("Looking at avatar: " + avatar.displayName);
|
|
lookingAvatarJointIndex = intersection.jointIndex;
|
|
}
|
|
}
|
|
|
|
Script.update.connect(function() {
|
|
if (lookAtPoint || lookingAtAvatarID) {
|
|
if (lookingAtAvatarID) {
|
|
lookAtPoint = AvatarList.getAvatar(lookingAtAvatarID).getJointPosition(lookingAvatarJointIndex);
|
|
}
|
|
var normalizedLookAt = getNormalizedLookAtPoint(lookAtPoint);
|
|
interpolatedLookAt = Vec3.mix(interpolatedLookAt, normalizedLookAt, LOOKAT_MIX_ALPHA);
|
|
MyAvatar.setHeadLookAt(interpolatedLookAt);
|
|
}
|
|
});
|
|
|
|
Controller.mousePressEvent.connect(mousePressEvent);
|
|
})(); |