mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 20:57:09 +02:00
166 lines
4.4 KiB
JavaScript
166 lines
4.4 KiB
JavaScript
// 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);
|