overte-JulianGro/unpublishedScripts/DomainContent/CellScience/Scripts/billboard.js

74 lines
No EOL
1.9 KiB
JavaScript

// Copyright 2016 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
//
var spriteURL = "https://hifi-content/DomainContent/CellScience/Sprites/nucleosomes_sprite.fbx";
var spriteDimensions = {
x: 10,
y: 10,
z: 10
};
var sprite;
var isMouseDown = false;
var RAD_TO_DEG = 180.0 / Math.PI;
var Y_AXIS = {
x: 0,
y: 1,
z: 0
};
var X_AXIS = {
x: 1,
y: 0,
z: 0
};
function MakeSprite() {
sprite = Entities.addEntity({
type: "Model",
name: "sprite",
modelURL: spriteURL,
dimensions: spriteDimensions,
position: Vec3.sum(MyAvatar.position, Quat.getFront(MyAvatar.orientation)),
rotation: Quat.inverse(Quat.getFront(MyAvatar.orientation))
});
}
function UpdateOrientation(event) {
if (isMouseDown && event.isRightButton) {
var direction,
yaw,
pitch,
rot;
direction = Vec3.normalize(Vec3.subtract(MyAvatar.position, Entities.getEntityProperties(sprite).position));
yaw = Quat.angleAxis(Math.atan2(direction.x, direction.z) * RAD_TO_DEG, Y_AXIS);
pitch = Quat.angleAxis(Math.asin(-direction.y) * RAD_TO_DEG, X_AXIS);
rot = Quat.multiply(yaw, pitch);
var avatar = Quat.safeEulerAngles(MyAvatar.orientation);
var printRot = Quat.safeEulerAngles(rot);
print("avatar = (" + avatar.x + ", " + avatar.y + ", " + avatar.z + ")");
print("sprite = (" + printRot.x + ", " + printRot.y + ", " + printRot.z + ")");
Entities.editEntity(sprite, {
rotation: rot
});
}
}
function OnMouseDown(event) {
isMouseDown = true;
}
function OnMouseUp(event) {
isMouseDown = false;
}
MakeSprite();
Controller.mouseMoveEvent.connect(UpdateOrientation);
Controller.mousePressEvent.connect(OnMouseDown);
Controller.mouseReleaseEvent.connect(OnMouseUp);