class Scene { constructor(component_size, no_of_components) { this.component_size = component_size; this.no_of_components = no_of_components; this.components = new Array; this.gameArea = {}; this.initGameArea(); this.initComponents(); this.started = false; } initComponents() { for (let i = 0; i < this.no_of_components; i++) { let new_component = new Component( this.component_size, "black", Math.random() * this.gameArea.canvas.width, Math.random() * this.gameArea.canvas.height, Math.random() * 360 ); this.components.push(new_component); } } initGameArea() { this.gameArea = new GameArea(600, 600); this.gameArea.init() } start() { if (this.started) { return; } // Kinda annoying, setInterval is a piece of shite and is always run from global scope // Therefore "this.update" will be undefined unless we bind it const updateMe = this.update.bind(this); this.interval = setInterval(updateMe, 5); this.started = true; } update() { this.gameArea.clear(); for (let i = 0; i < this.no_of_components; i++) { this.components[i].move(this.gameArea.context); } } stop() { if (!this.started) { return; } clearInterval(this.interval); this.interval = null; this.started = false; } reset() { if (this.started) { this.stop(); } this.components = new Array; this.initComponents(); this.gameArea.clear(); this.started = false; } }