diff --git a/star.js b/star.js index 2c910aa..bfb01a2 100644 --- a/star.js +++ b/star.js @@ -4,51 +4,51 @@ const utils = require('./utils'); const data = require('./data.json'); function Star(name, seed, position) { - this.name = name; - this.seed = seed; - this.position = position; - return this; -} -Star.prototype.detail = function() { - var pseudoRandom = new PRNG(this.seed) - , detail = {} - , spectralClass = pseudoRandom.pick(["O", "B", "A", "F", "G", "K", "M"], [0.0001, 0.2, 1, 3, 8, 12, 20]) - , spectralIndex = pseudoRandom.range(0, 9) - , stellarTemplate = data.starTypes[spectralClass]; - detail.spectralType = spectralClass + spectralIndex; - detail.luminosity = stellarTemplate.luminosity * (4 / (spectralIndex + 2)) * 50; - detail.radius = Math.sqrt(detail.luminosity); - detail.numberOfPlanets = pseudoRandom.range(stellarTemplate.planets[0], stellarTemplate.planets[1]); - detail.planetSeed = pseudoRandom.range(0, 1000000); - detail.template = stellarTemplate; - return detail; + var pseudoRandom = new PRNG(this.seed), + spectralClass = pseudoRandom.pick(["O", "B", "A", "F", "G", "K", "M"], [0.0001, 0.2, 1, 3, 8, 12, 20]), + spectralIndex = pseudoRandom.range(0, 9), + stellarTemplate = data.starTypes[spectralClass]; + + this.name = name; + this.seed = seed; + this.position = position; + this.spectralType = spectralClass + spectralIndex; + this.luminosity = stellarTemplate.luminosity * (4 / (spectralIndex + 2)) * 50; + this.radius = Math.sqrt(this.luminosity); + this.numberOfPlanets = pseudoRandom.range(stellarTemplate.planets[0], stellarTemplate.planets[1]); + this.planetSeed = pseudoRandom.range(0, 1000000); + this.color = stellarTemplate.color; + + return this; } + Star.prototype.planets = function() { - var detail = this.detail() - , planets = [] - , pseudoRandom = new PRNG(detail.planetSeed) - , radius_min = 0.4 * pseudoRandom.realRange(0.5, 2) - , radius_max = 50 * pseudoRandom.realRange(0.5, 2) - , total_weight = (Math.pow(detail.numberOfPlanets, 2) + detail.numberOfPlanets) * 0.5 - , r = radius_min; - for (var i = 0; i < detail.numberOfPlanets; i++) { - r += i / total_weight * pseudoRandom.realRange(0.5, 1) * (radius_max - radius_min); - planets.push(new Planet(utils.kappatalize(this.name) + "-" + utils.romanNumeral(i + 1),pseudoRandom.range(0, 100000),r,detail.luminosity / Math.pow(r, 2))); - } - return planets; + var planets = [], + pseudoRandom = new PRNG(this.planetSeed), + radius_min = 0.4 * pseudoRandom.realRange(0.5, 2), + radius_max = 50 * pseudoRandom.realRange(0.5, 2), + total_weight = (Math.pow(this.numberOfPlanets, 2) + this.numberOfPlanets) * 0.5, + r = radius_min; + + for (var i = 0; i < this.numberOfPlanets; i++) { + r += i / total_weight * pseudoRandom.realRange(0.5, 1) * (radius_max - radius_min); + planets.push(new Planet(utils.kappatalize(this.name) + "-" + utils.romanNumeral(i + 1), pseudoRandom.range(0, 100000), r, this.luminosity / Math.pow(r, 2))); + } + + return planets; } + Star.prototype.description = function() { - let planets = []; + let planets = []; - for (planet of this.planets()) { - planet.description = planet.description(); - planets.push(planet); - } + for (planet of this.planets()) { + planet.description = planet.description(); + planets.push(planet); + } - return { - "detail": this.detail(), - "planets": planets - } + return { + "planets": planets + } } module.exports = Star;