content/hifi-content/luis/test_scripts/LookAtApp/lookAtScript.js
2022-02-14 02:04:11 +01:00

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);
})();