Move couple util funcs to Station, add comments

This commit is contained in:
Tyler Hallada 2018-04-14 18:22:16 -04:00
parent 7c488cf2ca
commit 61642cb70f
2 changed files with 27 additions and 23 deletions

View File

@ -1,6 +1,6 @@
import * as tinycolor from 'tinycolor2'; import * as tinycolor from 'tinycolor2';
import { distance } from './utils'; import { distance, randomPoint } from './utils';
let stationCount = 0; let stationCount = 0;
@ -27,6 +27,28 @@ export default class Station {
); );
} }
public static isPointDistant(point: PIXI.Point, stations: Station[],
minDistance: number): boolean {
for (const station of stations) {
if (distance(point, station.location) < minDistance) {
return false;
}
}
return true;
}
public static randomDistantPoint(stations: Station[], minDistance: number): PIXI.Point | null {
let tries = 100;
while (tries > 0) {
const point = randomPoint();
if (Station.isPointDistant(point, stations, minDistance)) {
return point;
}
tries -= 1;
}
return null;
}
public location: PIXI.Point; public location: PIXI.Point;
public population: number; public population: number;
public connections: Station[]; public connections: Station[];

View File

@ -19,32 +19,11 @@ const TRAIN_CAPACITY = 50;
const trainTexts: PIXI.Text[] = []; const trainTexts: PIXI.Text[] = [];
const isPointDistant = (point: PIXI.Point, stations: Station[], minDistance: number): boolean => {
for (const station of stations) {
if (distance(point, station.location) < minDistance) {
return false;
}
}
return true;
};
const randomDistantPoint = (stations: Station[], minDistance: number): PIXI.Point | null => {
let tries = 100;
while (tries > 0) {
const point = randomPoint();
if (isPointDistant(point, stations, minDistance)) {
return point;
}
tries -= 1;
}
return null;
};
const initStations = (numStations: number): Station[] => { const initStations = (numStations: number): Station[] => {
const stations: Station[] = []; const stations: Station[] = [];
for (let i = 0; i < numStations; i += 1) { for (let i = 0; i < numStations; i += 1) {
stations.push(new Station( stations.push(new Station(
randomDistantPoint(stations, 30), Station.randomDistantPoint(stations, 30),
randomInt(300, 2000), randomInt(300, 2000),
tinycolor.random())); tinycolor.random()));
} }
@ -82,12 +61,15 @@ const moveTrains = (trains: Train[], stations: Station[]) => {
if (pointsAlmostEqual(train.location, train.destination.location)) { if (pointsAlmostEqual(train.location, train.destination.location)) {
train.speed = 0; train.speed = 0;
// average destination color with passenger color weighted by ratio
// (a simulation of culture mixing)
train.destination.color = tinycolor.mix( train.destination.color = tinycolor.mix(
train.destination.color, train.destination.color,
train.origin.color, train.origin.color,
Math.round((train.passengers / train.destination.population) * 100), Math.round((train.passengers / train.destination.population) * 100),
); );
// transfer passengers to destination
train.destination.population += train.passengers; train.destination.population += train.passengers;
train.passengers = 0; train.passengers = 0;