Fix trail functionality with new classes

This commit is contained in:
bwent 2015-08-06 10:04:30 -07:00
parent 861c9f0ca0
commit e61ba997e5

View file

@ -54,7 +54,7 @@ var panelBackground = Overlays.addOverlay("text", {
// Place the sun // Place the sun
var MAX_RANGE = 80.0; var MAX_RANGE = 50.0;
var SUN_SIZE = 8.0; var SUN_SIZE = 8.0;
var center = Vec3.sum(startingPosition, Vec3.multiply(MAX_RANGE, Quat.getFront(Camera.getOrientation()))); var center = Vec3.sum(startingPosition, Vec3.multiply(MAX_RANGE, Quat.getFront(Camera.getOrientation())));
@ -93,10 +93,17 @@ var planets = [];
var planetCount = 0; var planetCount = 0;
var TRAILS_ENABLED = true; var TRAILS_ENABLED = true;
var MAX_POINTS_PER_LINE = 20; var MAX_POINTS_PER_LINE = 50;
var LINE_DIM = 200;
var LINE_WIDTH = 20;
var VELOCITY_OFFSET_Y = -0.3;
var VELOCITY_OFFSET_Z = 0.9;
var index = 0;
var Planet = function(name, trailColor, radius, size) { var Planet = function(name, trailColor, radius, size) {
this.index = 0;
this.name = name; this.name = name;
this.trailColor = trailColor; this.trailColor = trailColor;
@ -110,8 +117,8 @@ var Planet = function(name, trailColor, radius, size) {
this.initialVelocity = Math.sqrt((GRAVITY * LARGE_BODY_MASS) / radius); this.initialVelocity = Math.sqrt((GRAVITY * LARGE_BODY_MASS) / radius);
this.velocity = Vec3.multiply(this.initialVelocity, Vec3.normalize({ this.velocity = Vec3.multiply(this.initialVelocity, Vec3.normalize({
x: 0, x: 0,
y: -0.2, y: VELOCITY_OFFSET_Y,
z: 0.9 z: VELOCITY_OFFSET_Z
})); }));
this.dimensions = size; this.dimensions = size;
@ -131,7 +138,7 @@ var Planet = function(name, trailColor, radius, size) {
lifetime: LIFETIME, lifetime: LIFETIME,
collisionsWillMove: true, collisionsWillMove: true,
}); });
this.computeAcceleration = function() { this.computeAcceleration = function() {
var acc = -(this.gravity * LARGE_BODY_MASS) * Math.pow(this.radius, (-2.0)); var acc = -(this.gravity * LARGE_BODY_MASS) * Math.pow(this.radius, (-2.0));
return acc; return acc;
@ -161,23 +168,23 @@ var Planet = function(name, trailColor, radius, size) {
this.trail = []; this.trail = [];
this.lineStack = []; this.lineStack = [];
//add the first line to both the line entity stack and the trail //add the first line to both the line entity stack and the trail
this.trail.push(newLine(this.lineStack, this.position, this.period, this.lineColor)); this.trail.push(newLine(this.lineStack, this.position, this.period, this.trailColor));
}; };
this.updateTrail = function() { this.updateTrail = function() {
var point = this.position; var point = this.position;
var linePos = Entities.getEntityProperties(this.lineStack[this.lineStack.length - 1]).position;
var prop = Entities.getEntityProperties(this.lineStack[this.lineStack.length - 1]);
var linePos = prop.position;
this.trail.push(computeLocalPoint(linePos, point)); this.trail.push(computeLocalPoint(linePos, point));
Entities.editEntity(this.lineStack[this.lineStack.length - 1], { Entities.editEntity(this.lineStack[this.lineStack.length - 1], {
linePoints: this.trail linePoints: this.trail
}); });
if (this.trail.length === MAX_POINTS_PER_LINE) {
this.trail = newLine(this.lineStack, point, this.period, this.lineColor); if (this.trail.length == MAX_POINTS_PER_LINE) {
this.trail = newLine(this.lineStack, point, this.period, this.trailColor);
} }
}; };
@ -191,19 +198,31 @@ var Planet = function(name, trailColor, radius, size) {
this.last_alpha = alpha; this.last_alpha = alpha;
} }
this.index++; index++;
this.resetTrails();
} }
planets.push(new Planet("Mercury", {red: 255, green: 255, blue: 255}, 7.0, 1.0));
planets.push(new Planet("Venus", {red: 255, green: 160, blue: 110}, 8.0, 1.2));
planets.push(new Planet("Earth", {red: 10, green: 150, blue: 160}, 9.2, 1.6));
planets.push(new Planet("Mars", {red: 180, green: 70, blue: 10}, 11.0, 2.0));
planets.push(new Planet("Jupiter", {red: 250, green: 140, blue: 0}, 14.5, 4.3));
planets.push(new Planet("Saturn", {red: 235, green: 215, blue: 0}, 21.0, 3.7));
planets.push(new Planet("Uranus", {red: 135, green: 205, blue: 240}, 29.0, 4.0));
planets.push(new Planet("Neptune", {red: 30, green: 140, blue: 255}, 35.0, 4.2));
planets.push(new Planet("Pluto", {red: 255, green: 255, blue: 255}, 58.0, 3.2));
var MERCURY_LINE_COLOR = {red: 255, green: 255, blue: 255};
var VENUS_LINE_COLOR = {red: 255, green: 160, blue: 110};
var EARTH_LINE_COLOR = {red: 10, green: 150, blue: 160};
var MARS_LINE_COLOR = {red: 180, green: 70, blue: 10};
var JUPITER_LINE_COLOR = {red: 250, green: 140, blue: 0};
var SATURN_LINE_COLOR = {red: 235, green: 215, blue: 0};
var URANUS_LINE_COLOR = {red: 135, green: 205, blue: 240};
var NEPTUNE_LINE_COLOR = {red: 30, green: 140, blue: 255};
var PLUTO_LINE_COLOR = {red: 255, green: 255, blue: 255};
planets.push(new Planet("mercury", MERCURY_LINE_COLOR, 7.0, 1.0));
planets.push(new Planet("venus", VENUS_LINE_COLOR, 8.5, 1.2));
planets.push(new Planet("earth", EARTH_LINE_COLOR, 10.2, 1.6));
planets.push(new Planet("mars", MARS_LINE_COLOR, 16.0, 2.0));
planets.push(new Planet("jupiter", JUPITER_LINE_COLOR, 19.5, 4.3));
planets.push(new Planet("saturn", SATURN_LINE_COLOR, 29.0, 3.7));
planets.push(new Planet("uranus", URANUS_LINE_COLOR, 37.0, 4.0));
planets.push(new Planet("neptune", NEPTUNE_LINE_COLOR, 55.0, 4.2));
planets.push(new Planet("pluto", PLUTO_LINE_COLOR, 80.0, 3.2));
var labels = []; var labels = [];
var labelLines = []; var labelLines = [];
@ -285,20 +304,20 @@ var dt = 1.0 / TIME_STEP;
var planetLines = []; var planetLines = [];
var trails = []; var trails = [];
function update(deltaTime) { function update(deltaTime) {
// if (paused) { // if (paused) {
// return; // return;
// } // }
deltaTime = dt; deltaTime = dt;
time++; time++;
if (time % TIME_STEP == 0) {
elapsed++;
}
for (var i = 0; i < planets.length; ++i) { for (var i = 0; i < planets.length; ++i) {
planets[i].update(deltaTime); planets[i].update(deltaTime);
} }
if (time % TIME_STEP == 0) {
elapsed++;
}
} }
function computeLocalPoint(linePos, worldPoint) { function computeLocalPoint(linePos, worldPoint) {