Needs a lot of cleanup. Data has been de-duplicated, and where identical copies existed, one of them has been replaced with a symlink. Some files have been excluded, such as binaries, installers and debug dumps. Some of that may still be present.
155 lines
No EOL
5.1 KiB
JavaScript
155 lines
No EOL
5.1 KiB
JavaScript
// arcBallEntityScript.js
|
|
//
|
|
// Script Type: Entity
|
|
// Created by Eric Levin on 12/17/15.
|
|
// Copyright 2015 High Fidelity, Inc.
|
|
//
|
|
// This entity script handles the logic for the arcBall rave toy
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
(function() {
|
|
Script.include("../../libraries/utils.js");
|
|
var _this;
|
|
var ArcBall = function() {
|
|
_this = this;
|
|
this.colorPalette = [{
|
|
red: 25,
|
|
green: 20,
|
|
blue: 162
|
|
}, {
|
|
red: 200,
|
|
green: 10,
|
|
blue: 10
|
|
}];
|
|
|
|
this.searchRadius = 10;
|
|
};
|
|
|
|
ArcBall.prototype = {
|
|
isGrabbed: false,
|
|
startDistantGrab: function() {
|
|
this.searchForNearbyArcBalls();
|
|
},
|
|
|
|
startNearGrab: function() {
|
|
this.searchForNearbyArcBalls();
|
|
},
|
|
|
|
searchForNearbyArcBalls: function() {
|
|
//Search for nearby balls and create an arc to it if one is found
|
|
var position = Entities.getEntityProperties(this.entityID, "position").position
|
|
var entities = Entities.findEntities(position, this.searchRadius);
|
|
entities.forEach(function(entity) {
|
|
var props = Entities.getEntityProperties(entity, ["position", "name"]);
|
|
if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) {
|
|
_this.target = entity;
|
|
_this.createBeam(position, props.position);
|
|
|
|
}
|
|
});
|
|
},
|
|
|
|
createBeam: function(startPosition, endPosition) {
|
|
|
|
// Creates particle arc from start position to end position
|
|
var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation;
|
|
var sourceToTargetVec = Vec3.subtract(endPosition, startPosition);
|
|
var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec);
|
|
emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation);
|
|
|
|
var color = this.colorPalette[randInt(0, this.colorPalette.length)];
|
|
var props = {
|
|
type: "ParticleEffect",
|
|
name: "Particle Arc",
|
|
parentID: this.entityID,
|
|
parentJointIndex: -1,
|
|
// position: startPosition,
|
|
isEmitting: true,
|
|
colorStart: color,
|
|
color: {
|
|
red: 200,
|
|
green: 200,
|
|
blue: 255
|
|
},
|
|
colorFinish: color,
|
|
maxParticles: 100000,
|
|
lifespan: 1,
|
|
emitRate: 1000,
|
|
emitOrientation: emitOrientation,
|
|
emitSpeed: 1,
|
|
speedSpread: 0.02,
|
|
emitDimensions: {
|
|
x: .01,
|
|
y: .01,
|
|
z: .01
|
|
},
|
|
polarStart: 0,
|
|
polarFinish: 0,
|
|
azimuthStart: 0.02,
|
|
azimuthFinish: .01,
|
|
emitAcceleration: {
|
|
x: 0,
|
|
y: 0,
|
|
z: 0
|
|
},
|
|
accelerationSpread: {
|
|
x: 0,
|
|
y: 0,
|
|
z: 0
|
|
},
|
|
radiusStart: 0.01,
|
|
radiusFinish: 0.005,
|
|
radiusSpread: 0.005,
|
|
alpha: 0.5,
|
|
alphaSpread: 0.1,
|
|
alphaStart: 0.5,
|
|
alphaFinish: 0.5,
|
|
textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png",
|
|
emitterShouldTrail: true
|
|
}
|
|
this.particleArc = Entities.addEntity(props);
|
|
},
|
|
|
|
updateBeam: function() {
|
|
if(!this.target) {
|
|
return;
|
|
}
|
|
var startPosition = Entities.getEntityProperties(this.entityID, "position").position;
|
|
var targetPosition = Entities.getEntityProperties(this.target, "position").position;
|
|
var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation;
|
|
var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition);
|
|
var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec);
|
|
Entities.editEntity(this.particleArc, {
|
|
emitOrientation: emitOrientation
|
|
});
|
|
},
|
|
|
|
continueNearGrab: function() {
|
|
this.updateBeam();
|
|
},
|
|
|
|
continueDistantGrab: function() {
|
|
this.updateBeam();
|
|
},
|
|
|
|
releaseGrab: function() {
|
|
Entities.editEntity(this.particleArc, {
|
|
isEmitting: false
|
|
});
|
|
this.target = null;
|
|
},
|
|
|
|
unload: function() {
|
|
if (this.particleArc) {
|
|
Entities.deleteEntity(this.particleArc);
|
|
}
|
|
},
|
|
|
|
preload: function(entityID) {
|
|
this.entityID = entityID;
|
|
},
|
|
};
|
|
return new ArcBall();
|
|
}); |