Andrew Meadowsarchive remaining JS scriptsc0b446c10 years agoHistory
124 lines · 4.7 KB · JavaScript
RawDownload
// //  Blocks.js //  //  Created by Philip Rosedale on January 26, 2015//  Copyright 2015 High Fidelity, Inc.//  //  Create a bunch of building blocks and drop them onto a playing surface in front of you. // //  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html//var FLOOR_SIZE = 7.5;var FLOOR_THICKNESS = 0.10;var EDGE_THICKESS = 0.25;var SCALE = 0.25;  var NUM_BLOCKS = 25; var DROP_HEIGHT = SCALE * 8.0; var GRAVITY = -1.0;var LIFETIME = 6000;    var DAMPING = 0.50; var blockTypes = [];blockTypes.push({ x: 1, y: 1, z: 1, red: 255, green: 0, blue: 0 });blockTypes.push({ x: 1, y: 1, z: 2, red: 0, green: 255, blue: 0 });blockTypes.push({ x: 1, y: 2, z: 5, red: 0, green: 0, blue: 255 });blockTypes.push({ x: 1, y: 2, z: 2, red: 255, green: 255, blue: 0 });blockTypes.push({ x: 1, y: 1, z: 5, red: 0, green: 255, blue: 255 }); var center = Vec3.sum(MyAvatar.position, Vec3.multiply(FLOOR_SIZE * 2.0, Quat.getFront(Camera.getOrientation()))); var floor = Entities.addEntity(            { type: "Box",            position: Vec3.subtract(center, { x: 0, y: SCALE / 2.0, z: 0 }),             dimensions: { x: FLOOR_SIZE, y: FLOOR_THICKNESS, z: FLOOR_SIZE },               color: { red: 128, green: 128, blue: 128 },              gravity: {  x: 0, y: 0, z: 0 },            ignoreCollisions: false,            locked: true,            lifetime: LIFETIME }); var edge1 = Entities.addEntity(            { type: "Box",            position: Vec3.sum(center, { x: FLOOR_SIZE / 2.0, y: FLOOR_THICKNESS / 2.0, z: 0 }),             dimensions: { x: EDGE_THICKESS, y: EDGE_THICKESS, z: FLOOR_SIZE + EDGE_THICKESS },               color: { red: 100, green: 100, blue: 100 },              gravity: {  x: 0, y: 0, z: 0 },            ignoreCollisions: false,            visible: true,            locked: true,            lifetime: LIFETIME }); var edge2 = Entities.addEntity(            { type: "Box",            position: Vec3.sum(center, { x: -FLOOR_SIZE / 2.0, y: FLOOR_THICKNESS / 2.0, z: 0 }),             dimensions: { x: EDGE_THICKESS, y: EDGE_THICKESS, z: FLOOR_SIZE + EDGE_THICKESS },               color: { red: 100, green: 100, blue: 100 },              gravity: {  x: 0, y: 0, z: 0 },            ignoreCollisions: false,            visible: true,            locked: true,            lifetime: LIFETIME }); var edge3 = Entities.addEntity(            { type: "Box",            position: Vec3.sum(center, { x: 0, y: FLOOR_THICKNESS / 2.0, z: -FLOOR_SIZE / 2.0 }),             dimensions: { x: FLOOR_SIZE + EDGE_THICKESS, y: EDGE_THICKESS, z: EDGE_THICKESS },               color: { red: 100, green: 100, blue: 100 },              gravity: {  x: 0, y: 0, z: 0 },            ignoreCollisions: false,            visible: true,            locked: true,            lifetime: LIFETIME }); var edge4 = Entities.addEntity(            { type: "Box",            position: Vec3.sum(center, { x: 0, y: FLOOR_THICKNESS / 2.0, z: FLOOR_SIZE / 2.0 }),             dimensions: { x: FLOOR_SIZE + EDGE_THICKESS, y: EDGE_THICKESS, z: EDGE_THICKESS },               color: { red: 100, green: 100, blue: 100 },              gravity: {  x: 0, y: 0, z: 0 },            ignoreCollisions: false,            visible: true,            locked: true,            lifetime: LIFETIME }); blocks = []; for (var i = 0; i < NUM_BLOCKS; i++) {    var which = Math.floor(Math.random() * blockTypes.length);    var type = blockTypes[which];      blocks.push(Entities.addEntity(            { type: "Box",            position: { x: center.x + (Math.random() - 0.5) * (FLOOR_SIZE * 0.75),                         y: center.y + DROP_HEIGHT,                         z: center.z + (Math.random() - 0.5) * (FLOOR_SIZE * 0.75) },              dimensions: { x: type.x * SCALE, y: type.y * SCALE, z: type.z * SCALE },               color: { red: type.red, green: type.green, blue: type.blue },              gravity: {  x: 0, y: GRAVITY, z: 0 },              velocity: { x: 0, y: 0.05, z: 0 },            ignoreCollisions: false,            damping: DAMPING,            lifetime: LIFETIME,            dynamic: true })); } function scriptEnding() {    Entities.editEntity(edge1, { locked: false });    Entities.editEntity(edge2, { locked: false });    Entities.editEntity(edge3, { locked: false });    Entities.editEntity(edge4, { locked: false });    Entities.editEntity(floor, { locked: false });    Entities.deleteEntity(edge1);    Entities.deleteEntity(edge2);    Entities.deleteEntity(edge3);    Entities.deleteEntity(edge4);    Entities.deleteEntity(floor);     for (var i = 0; i < NUM_BLOCKS; i++) {        Entities.deleteEntity(blocks[i]);    }} Script.scriptEnding.connect(scriptEnding);