overte/unpublishedScripts/DomainContent/Home/cuckooClock/wrapper.js
2016-05-11 10:33:06 -07:00

238 lines
No EOL
6.9 KiB
JavaScript

//
// wrapper.js
// For cuckooClock
//
// Created by Eric Levin on 3/15/16.
// Copyright 2016 High Fidelity, Inc.
//
// This entity script handles the logic for growing a plant when it has water poured on it
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
var MINUTE_HAND_CLOCK_SCRIPT_URL = Script.resolvePath("cuckooClockMinuteHandEntityScript.js")
var CLOCK_BODY_URL = "atp:/cuckooClock/cuckoo2_BODY.fbx";
var CLOCK_BODY_COLLISION_HULL_URL = "atp:/cuckooClock/clockHull.obj";
var CLOCK_FACE_URL = "atp:/cuckooClock/cuckooClock2_FACE.fbx";
var CLOCK_HOUR_HAND_URL = "atp:/cuckooClock/cuckooClock2_HOUR_HAND.fbx";
var CLOCK_MINUTE_HAND_URL = "atp:/cuckooClock/cuckooClock2_MINUTE_HAND.fbx";
var CLOCK_SECOND_HAND_URL = "atp:/cuckooClock/secondHand.fbx";
MyCuckooClock = function(spawnPosition, spawnRotation) {
var clockBody, clockFace, clockMinuteHand, clockHourHand, clockSecondHand;
function createClock() {
var clockRotation = Quat.fromPitchYawRollDegrees(spawnRotation.x, spawnRotation.y, spawnRotation.z);
clockBody = Entities.addEntity({
type: "Model",
modelURL: CLOCK_BODY_URL,
shapeType: "compound",
compoundShapeURL: CLOCK_BODY_COLLISION_HULL_URL,
name: "home_model_clockBody",
animation: {
url: CLOCK_BODY_URL,
running: false,
currentFrame: 0,
firstFrame: 0,
lastFrame: 100,
loop: false
},
position: spawnPosition,
rotation: clockRotation,
dimensions: Vec3.multiply(0.5, {
x: 0.8181,
y: 1.3662,
z: 0.8181
}),
userData: JSON.stringify({
hifiHomeKey: {
reset: true
}
})
})
var forwardOffset = 0.5 * -0.13;
var upOffset = 0.5 * 0.255;
var sideOffset = 0.5 * -0.03;
var clockFacePosition = spawnPosition;
clockFacePosition = Vec3.sum(clockFacePosition, Vec3.multiply(Quat.getFront(clockRotation), forwardOffset));
clockFacePosition = Vec3.sum(clockFacePosition, Vec3.multiply(Quat.getUp(clockRotation), upOffset));
clockFacePosition = Vec3.sum(clockFacePosition, Vec3.multiply(Quat.getRight(clockRotation), sideOffset));
clockFace = Entities.addEntity({
type: "Model",
parentID: clockBody,
rotation: clockRotation,
name: "home_model_clockFace",
modelURL: CLOCK_FACE_URL,
position: clockFacePosition,
dimensions: Vec3.multiply(0.5, {
x: 0.2397,
y: 0.2402,
z: 0.0212
}),
userData: JSON.stringify({
hifiHomeKey: {
reset: true
}
})
});
// CLOCK HANDS
// __________
// _\|/_
// /|\
// ___________
var myDate = new Date()
// HOUR HAND *************************
var clockHandForwardOffset = (0.5 * -0.017);
var hourHandPosition = Vec3.sum(clockFacePosition, Vec3.multiply(Quat.getFront(clockRotation), clockHandForwardOffset));
var DEGREES_FOR_HOUR = 30
var hours = myDate.getHours();
var hourRollDegrees = -hours * DEGREES_FOR_HOUR;
var localClockHandRotation = Quat.fromPitchYawRollDegrees(0, 0, hourRollDegrees);
var worldClockHandRotation = Quat.multiply(clockRotation, localClockHandRotation);
var ANGULAR_ROLL_SPEED_HOUR_RADIANS = 0.000029098833;
var localAngularVelocity = {
x: 0,
y: 0,
z: -ANGULAR_ROLL_SPEED_HOUR_RADIANS
};
var worldAngularVelocity = Vec3.multiplyQbyV(clockRotation, localAngularVelocity);
clockHourHand = Entities.addEntity({
type: "Model",
name: "home_model_clockHourHand",
parentID: clockFace,
modelURL: CLOCK_HOUR_HAND_URL,
position: hourHandPosition,
registrationPoint: {
x: 0.5,
y: 0.05,
z: 0.5
},
rotation: worldClockHandRotation,
angularDamping: 0,
angularVelocity: worldAngularVelocity,
dimensions: Vec3.multiply(0.5, {
x: 0.0263,
y: 0.0982,
z: 0.0024
}),
userData: JSON.stringify({
hifiHomeKey: {
reset: true
}
})
});
// **************** SECOND HAND *********************
var DEGREES_FOR_SECOND = 6;
var seconds = myDate.getSeconds();
secondRollDegrees = -seconds * DEGREES_FOR_SECOND;
var localClockHandRotation = Quat.fromPitchYawRollDegrees(0, 0, secondRollDegrees);
var worldClockHandRotation = Quat.multiply(clockRotation, localClockHandRotation);
var ANGULAR_ROLL_SPEED_SECOND_RADIANS = 0.10472
var localAngularVelocity = {
x: 0,
y: 0,
z: -ANGULAR_ROLL_SPEED_SECOND_RADIANS
};
var worldAngularVelocity = Vec3.multiplyQbyV(clockRotation, localAngularVelocity);
clockSecondHand = Entities.addEntity({
type: "Model",
parentID: clockBody,
modelURL: CLOCK_SECOND_HAND_URL,
name: "home_model_clockSecondHand",
position: hourHandPosition,
dimensions: Vec3.multiply(0.5, {
x: 0.0043,
y: 0.1117,
z: 0.0008
}),
color: {
red: 200,
green: 10,
blue: 200
},
registrationPoint: {
x: 0.5,
y: 0.05,
z: 0.5
},
rotation: worldClockHandRotation,
angularDamping: 0,
angularVelocity: worldAngularVelocity,
userData: JSON.stringify({
hifiHomeKey: {
reset: true
}
})
});
// MINUTE HAND ************************
var DEGREES_FOR_MINUTE = 6;
var minutes = myDate.getMinutes();
var minuteRollDegrees = -minutes * DEGREES_FOR_MINUTE;
var localClockHandRotation = Quat.fromPitchYawRollDegrees(0, 0, minuteRollDegrees);
var worldClockHandRotation = Quat.multiply(clockRotation, localClockHandRotation);
var ANGULAR_ROLL_SPEED_MINUTE_RADIANS = 0.00174533;
var localAngularVelocity = {
x: 0,
y: 0,
z: -ANGULAR_ROLL_SPEED_MINUTE_RADIANS
};
var worldAngularVelocity = Vec3.multiplyQbyV(clockRotation, localAngularVelocity);
clockMinuteHand = Entities.addEntity({
type: "Model",
modelURL: CLOCK_HOUR_HAND_URL,
name: 'home_model_clockMinuteHand',
parentID: clockFace,
position: hourHandPosition,
registrationPoint: {
x: 0.5,
y: 0.05,
z: 0.5
},
rotation: worldClockHandRotation,
angularDamping: 0,
angularVelocity: worldAngularVelocity,
dimensions: Vec3.multiply(0.5, {
x: 0.0251,
y: 0.1179,
z: 0.0032
}),
script: MINUTE_HAND_CLOCK_SCRIPT_URL,
userData: JSON.stringify({
clockBody: clockBody,
secondHand: clockSecondHand,
hifiHomeKey: {
reset: true
}
})
});
}
createClock();
function cleanup() {
print('cuckoo cleanup')
Entities.deleteEntity(clockBody);
Entities.deleteEntity(clockFace);
Entities.deleteEntity(clockHourHand);
Entities.deleteEntity(clockMinuteHand);
Entities.deleteEntity(clockSecondHand);
}
this.cleanup = cleanup;
return this
}