// // securityCamera.js // examples/example // // Created by Thijs Wenker on November 4, 2015 // Copyright 2015 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // const CAMERA_OFFSET = {x: 0, y: 4, z: -14}; const LOOKAT_START_OFFSET = {x: -10, y: 0, z: 14}; const LOOKAT_END_OFFSET = {x: 10, y: 0, z: 14}; const TINY_VALUE = 0.001; var lookatTargets = [Vec3.sum(MyAvatar.position, LOOKAT_START_OFFSET), Vec3.sum(MyAvatar.position, LOOKAT_END_OFFSET)]; var currentTarget = 0; var forward = true; var oldCameraMode = Camera.mode; var cameraLookAt = function(cameraPos, lookAtPos) { var lookAtRaw = Quat.lookAt(cameraPos, lookAtPos, Vec3.UP); lookAtRaw.w = -lookAtRaw.w; return lookAtRaw; }; cameraEntity = Entities.addEntity({ type: "Box", visible: false, position: Vec3.sum(MyAvatar.position, CAMERA_OFFSET) }); Camera.mode = "entity"; Camera.cameraEntity = cameraEntity; Script.update.connect(function(deltaTime) { var cameraProperties = Entities.getEntityProperties(cameraEntity, ["position", "rotation"]); var targetOrientation = cameraLookAt(cameraProperties.position, lookatTargets[currentTarget]); if (Math.abs(targetOrientation.x - cameraProperties.rotation.x) < TINY_VALUE && Math.abs(targetOrientation.y - cameraProperties.rotation.y) < TINY_VALUE && Math.abs(targetOrientation.z - cameraProperties.rotation.z) < TINY_VALUE && Math.abs(targetOrientation.w - cameraProperties.rotation.w) < TINY_VALUE) { currentTarget = (currentTarget + 1) % lookatTargets.length; return; } Entities.editEntity(cameraEntity, {rotation: Quat.mix(cameraProperties.rotation, targetOrientation, deltaTime / 3)}); }); Script.scriptEnding.connect(function() { Entities.deleteEntity(cameraEntity); Camera.mode = oldCameraMode; Camera.cameraEntity = null; });