js13kgames2015-reverse/src/main.js
2015-08-25 16:40:26 +02:00

113 lines
2.9 KiB
JavaScript

// Theme: Reversed
// https://en.wikipedia.org/wiki/Asteroid_mining
class Engine {
constructor() {
this.ticks = 0;
this.current_asteroid = new Asteroid();
this.asteroids = [this.current_asteroid];
this.resources = {
dust: 0,
stone: 0,
carbon: 0,
metal: 0
}
}
tick() {
this.ticks++;
}
update() {
document.querySelector('#time').innerHTML = this.ticks + ' hours';
document.querySelector('#asteroid-classification').innerHTML = this.current_asteroid.classification;
document.querySelector('#res-dust').innerHTML = this.resources.dust;
document.querySelector('#res-stone').innerHTML = this.resources.stone;
document.querySelector('#res-carbon').innerHTML = this.resources.carbon;
document.querySelector('#res-metal').innerHTML = this.resources.metal;
}
}
class Player {
constructor(engine) {
this.engine = engine;
this.equipment = ['probe'];
}
mine() {
let type = this.engine.current_asteroid.mine_resource();
this.engine.resources[type]++;
}
}
class Asteroid {
constructor() {
// Determine the class
this.classification = [
'A', // small, stone, dust, random
'C', // dark carbon
'S', // stone
'X' // metal
][Helper.random_number(0, 4)];
}
mine_resource(player) {
let resources = {
'A': ['dust', 'dust', 'stone'],
'C': ['dust', 'carbon', 'carbon', 'carbon'],
'S': ['dust', 'stone', 'stone'],
'X': ['metal']
}[this.classification];
let res_type = resources[Helper.random_number(0, resources.length)];
// TODO: gain!
}
}
class Station {
constructor() {
this.inventory = [
// take probes from the asteroid
'probe': {'A': 1, 'C': 1, 'S': 1, 'X': 1},
// mine on surface
'conveyor': {'A': 2, 'C': 8, 'S': 4, 'X': 1},
// shaft mining into the asteroid
'pipe-drill': {'A': 3, 'C': 15, 'S': 12, 'X': 2},
// pick up loose grains with magnet, x-class asteroids only
'magnet': {'A': 3, 'C': 1, 'S': 1, 'X': 20},
// melt the matrix
'vaporizer': {'A': 4, 'C': 7, 'S': 6, 'X': 5}
];
}
buy(player, item) {
if (this.inventory.indexOf(item) !== -1 &&
player.equipment.indexOf(item) === -1)
player.equipment.push(item);
}
}
var engine = new Engine();
var player = new Player(engine);
var station = new Station();
var bootstrap = function() {
setInterval(() => {
engine.tick();
engine.update();
}, 1000);
document.querySelector('#btn-mine').onclick = () => {
player.mine();
engine.update();
};
engine.update();
};