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