// makePlanets.js // // Created by Philip Rosedale on March 29, 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 // // Make an earth and moon, where you can grab and throw moon into orbit. Entity // script attached to moon gives it gravitation behavior and will also make it attracted to // other spheres placed nearby. // var SCALE = 3.0; var EARTH_SIZE = 3.959 / SCALE; var MOON_SIZE = 1.079 / SCALE; var BUTTON_SIZE = 32; var PADDING = 3; var earth = null; var moon = null; var SCRIPT_URL = Script.resolvePath("gravity.js"); HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; Script.include(["/~/system/libraries/toolBars.js"]); var toolBar = new ToolBar(0, 0, ToolBar.HORIZONTAL, "highfidelity.makePlanets.js"); var makePlanetsIconURL = Script.resolvePath("gravity.svg"); var button = toolBar.addOverlay("image", { width: BUTTON_SIZE, height: BUTTON_SIZE, imageURL: makePlanetsIconURL, color: { red: 255, green: 255, blue: 255 }, alpha: 1 }); var deleteButton = toolBar.addOverlay("image", { width: BUTTON_SIZE, height: BUTTON_SIZE, imageURL: HIFI_PUBLIC_BUCKET + "images/delete.png", color: { red: 255, green: 255, blue: 255 }, alpha: 1 }); function inFrontOfMe(distance) { return Vec3.sum(Camera.getPosition(), Vec3.multiply(distance, Quat.getFront(Camera.getOrientation()))); } function onButtonClick() { earth = Entities.addEntity({ type: "Model", name: "Earth", modelURL: "https://s3-us-west-1.amazonaws.com/hifi-content/seth/production/NBody/earth.fbx", position: inFrontOfMe(2 * EARTH_SIZE), dimensions: { x: EARTH_SIZE, y: EARTH_SIZE, z: EARTH_SIZE }, shapeType: "sphere", lifetime: 86400, // 1 day angularDamping: 0, angularVelocity: { x: 0, y: 0.1, z: 0 }, }); moon = Entities.addEntity({ type: "Model", name: "Moon", modelURL: "https://s3-us-west-1.amazonaws.com/hifi-content/seth/production/NBody/moon.fbx", position: inFrontOfMe(EARTH_SIZE - MOON_SIZE), dimensions: { x: MOON_SIZE, y: MOON_SIZE, z: MOON_SIZE }, dynamic: true, damping: 0, // 0.01, angularDamping: 0, // 0.01, script: SCRIPT_URL, shapeType: "sphere" }); Entities.addEntity({ "accelerationSpread": { "x": 0, "y": 0, "z": 0 }, "alpha": 1, "alphaFinish": 0, "alphaStart": 1, "azimuthFinish": 0, "azimuthStart": 0, "color": { "blue": 255, "green": 255, "red": 255 }, "colorFinish": { "blue": 255, "green": 255, "red": 255 }, "colorStart": { "blue": 255, "green": 255, "red": 255 }, "dimensions": { "x": 0.10890001058578491, "y": 0.10890001058578491, "z": 0.10890001058578491 }, "emitAcceleration": { "x": 0, "y": 0, "z": 0 }, "emitOrientation": { "w": 0.99999994039535522, "x": 0, "y": 0, "z": 0 }, "emitRate": 300, "emitSpeed": 0, "emitterShouldTrail": 1, "maxParticles": 10000, "name": "moon trail", "parentID": moon, "particleRadius": 0.005, "radiusFinish": 0.005, "radiusSpread": 0.005, "radiusStart": 0.005, "speedSpread": 0, "lifespan": 20, "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", "type": "ParticleEffect", "userData": "{\"grabbableKey\":{\"grabbable\":false}}" }); } function onDeleteButton() { Entities.deleteEntity(earth); Entities.deleteEntity(moon); } function mousePressEvent(event) { var clickedText = false; var clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); if (clickedOverlay == button) { onButtonClick(); } else if (clickedOverlay == deleteButton) { onDeleteButton(); } } function scriptEnding() { toolBar.cleanup(); } Controller.mousePressEvent.connect(mousePressEvent); Script.scriptEnding.connect(scriptEnding);