content/hifi-public/philip/boom.js
Dale Glass 0d14e5a379 Initial data.
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.
2022-02-13 18:59:11 +01:00

92 lines
3.4 KiB
JavaScript

//
// boom.js
//
// An object with this entity script will, when grabbed, apply physical forces to any nearby objects
//
// Created by Philip Rosedale on March 7, 2016
// 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
//
(function() {
var entityID,
wantDebug = true,
BLAST_FORCE = 10,
BLAST_RADIUS = 15,
BLAST_STEPDOWN = 2.0,
TIME_TILL_RESTORE = 5.0,
readyToExplode = true,
SOUNDBOOM = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/alan/dev/Audio/bigboom_converted.wav"),
RED = { red:255, green: 0, blue: 0 },
affected = []
function printDebug(message) {
if (wantDebug) {
print(message);
}
}
function blowStuffUp(position, force) {
var stuff = Entities.findEntities(position, BLAST_RADIUS);
for (var i = 0; i < stuff.length; i++) {
var properties = Entities.getEntityProperties(stuff[i]);
if (!properties.locked && (stuff[i] != entityID)) {
// Store original position
affected.push({ entityID: stuff[i],
position: properties.position,
rotation: properties.rotation,
gravity: properties.gravity,
dynamic: properties.dynamic });
//Vec3.print("pos = ", affected[affected.length - 1].position);
var diff = Vec3.subtract(properties.position, position);
var distance = Vec3.length(diff);
var velocity = Vec3.sum(properties.velocity, Vec3.multiply(force, Vec3.normalize(diff)));
var angularVelocity = { x: Math.random() * force, y: Math.random() * force, z: Math.random() * force };
Entities.editEntity(stuff[i], { velocity: velocity,
dynamic: true,
gravity: { x: 0, y: -9, y: 0 },
angularVelocity: angularVelocity });
}
}
}
function replaceStuff() {
for (var i = 0; i < affected.length; i++) {
Entities.editEntity(affected[i].entityID, { position: affected[i].position,
rotation: affected[i].rotation,
gravity: affected[i].gravity,
dynamic: affected[i].dynamic,
velocity: { x: 0, y: 0, z: 0 },
angularVelocity: { x: 0, y: 0, z: 0 } });
}
affected = [];
readyToExplode = true;
}
this.mousePressOnEntity = function() {
if (!readyToExplode) {
return;
}
printDebug("Boom!");
var properties = Entities.getEntityProperties(entityID);
Entities.editEntity(entityID, { color: RED });
Audio.playSound(SOUNDBOOM, {
position: properties.position,
volume: 1.0,
loop: false});
blowStuffUp(Vec3.sum(properties.position, { x: 0, y: -BLAST_STEPDOWN, z: 0 }), BLAST_FORCE)
Script.setTimeout(replaceStuff, TIME_TILL_RESTORE * 1000);
}
this.preload = function(givenEntityID) {
printDebug("load boom...");
entityID = givenEntityID;
};
this.unload = function() {
printDebug("Unload boom...");
};
});