Implement currency
This commit is contained in:
parent
dac9619ffa
commit
7ae55ab377
2 changed files with 60 additions and 19 deletions
|
@ -7,17 +7,17 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav>
|
<nav>
|
||||||
Cargo:
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Dust: <strong class="res-dust">0</strong></li>
|
<li>Dust: <strong class="res-dust">0</strong></li>
|
||||||
<li>Stone: <strong class="res-stone">0</strong></li>
|
<li>Stone: <strong class="res-stone">0</strong></li>
|
||||||
<li>Carbon: <strong class="res-carbon">0</strong></li>
|
<li>Carbon: <strong class="res-carbon">0</strong></li>
|
||||||
<li>Metal: <strong class="res-metal">0</strong></li>
|
<li>Metal: <strong class="res-metal">0</strong></li>
|
||||||
|
<li>cBTC: <strong class="cbtc">200</strong></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div id="ship">
|
<div id="ship">
|
||||||
Active tool: <strong id="active-tool">Probe</strong>
|
Active tool: <strong id="active-tool">Probe</strong><br>
|
||||||
Equipment:
|
Equipment:
|
||||||
<ul id="ship-equipment"></ul>
|
<ul id="ship-equipment"></ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
73
src/main.js
73
src/main.js
|
@ -9,7 +9,7 @@ class Engine {
|
||||||
this.ticks = 0;
|
this.ticks = 0;
|
||||||
this.current_asteroid = new Asteroid();
|
this.current_asteroid = new Asteroid();
|
||||||
this.station = new Station();
|
this.station = new Station();
|
||||||
this.ship = new Ship(this.current_asteroid);
|
this.ship = new Ship(this.current_asteroid, this.station);
|
||||||
this.asteroids = [this.current_asteroid];
|
this.asteroids = [this.current_asteroid];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,13 +22,14 @@ class Engine {
|
||||||
_.eachObj(this.ship.resources, (key, value) => {
|
_.eachObj(this.ship.resources, (key, value) => {
|
||||||
$('nav .res-' + key).fill(value);
|
$('nav .res-' + key).fill(value);
|
||||||
});
|
});
|
||||||
|
$('nav .cbtc').fill(this.ship.cbtc);
|
||||||
|
|
||||||
// The ship
|
// The ship
|
||||||
$('#active-tool').fill(this.ship.active_tool);
|
$('#active-tool').fill(this.ship.active_tool);
|
||||||
|
|
||||||
if (_.keys(engine.ship.equipment).length > $('#ship-equipment > li').length) {
|
if (_.keys(engine.ship.equipment).length > $('#ship-equipment > li').length) {
|
||||||
$('#ship-equipment').fill();
|
$('#ship-equipment').fill();
|
||||||
_.eachObj(engine.ship.equipment, (tool, props) => {
|
_.eachObj(engine.ship.equipment, (tool) => {
|
||||||
// Add the tool to the DOM inventory and add a mount button
|
// Add the tool to the DOM inventory and add a mount button
|
||||||
let mount_button = EE('a', {'@href': '#', '%tool': tool}, 'mount').onClick((e) => {
|
let mount_button = EE('a', {'@href': '#', '%tool': tool}, 'mount').onClick((e) => {
|
||||||
engine.ship.active_tool = tool;
|
engine.ship.active_tool = tool;
|
||||||
|
@ -58,12 +59,12 @@ class Engine {
|
||||||
}
|
}
|
||||||
|
|
||||||
class Ship {
|
class Ship {
|
||||||
constructor(asteroid) {
|
constructor(asteroid, station) {
|
||||||
this.docked_to = asteroid;
|
this.docked_to = asteroid;
|
||||||
this.active_tool = 'probe';
|
this.active_tool = 'probe';
|
||||||
|
|
||||||
this.equipment = {
|
this.equipment = {
|
||||||
'probe': {'A': 1, 'C': 1, 'S': 1, 'X': 1}
|
'probe': station.inventory['probe']
|
||||||
};
|
};
|
||||||
this.resources = {
|
this.resources = {
|
||||||
dust: 0,
|
dust: 0,
|
||||||
|
@ -71,6 +72,7 @@ class Ship {
|
||||||
carbon: 0,
|
carbon: 0,
|
||||||
metal: 0
|
metal: 0
|
||||||
}
|
}
|
||||||
|
this.cbtc = 450;
|
||||||
}
|
}
|
||||||
|
|
||||||
mount(tool) {
|
mount(tool) {
|
||||||
|
@ -110,7 +112,7 @@ class Asteroid {
|
||||||
'X': ['metal']
|
'X': ['metal']
|
||||||
}[this.classification];
|
}[this.classification];
|
||||||
let res_type = resources[Helper.random_number(0, resources.length)];
|
let res_type = resources[Helper.random_number(0, resources.length)];
|
||||||
let amount = ship.equipment[ship.active_tool][this.classification];
|
let amount = ship.equipment[ship.active_tool]['capability'][this.classification];
|
||||||
return [res_type, amount];
|
return [res_type, amount];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,31 +121,70 @@ class Station {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.inventory = {
|
this.inventory = {
|
||||||
// take probes from the asteroid
|
// take probes from the asteroid
|
||||||
'probe': {'A': 1, 'C': 1, 'S': 1, 'X': 1},
|
'probe': {
|
||||||
|
'price': 10,
|
||||||
|
'capability': {'A': 1, 'C': 1, 'S': 1, 'X': 1}
|
||||||
|
},
|
||||||
|
|
||||||
// mine on surface
|
// mine on surface
|
||||||
'conveyor': {'A': 2, 'C': 8, 'S': 4, 'X': 1},
|
'conveyor': {
|
||||||
|
'price': 500,
|
||||||
|
'capability': {'A': 2, 'C': 8, 'S': 4, 'X': 1}
|
||||||
|
},
|
||||||
|
|
||||||
// shaft mining into the asteroid
|
// shaft mining into the asteroid
|
||||||
'pipe-drill': {'A': 3, 'C': 15, 'S': 12, 'X': 2},
|
'pipe-drill': {
|
||||||
|
'price': 3000,
|
||||||
|
'capability': {'A': 3, 'C': 15, 'S': 12, 'X': 2}
|
||||||
|
},
|
||||||
|
|
||||||
// pick up loose grains with magnet, x-class asteroids only
|
// pick up loose grains with magnet, x-class asteroids only
|
||||||
'magnet': {'A': 3, 'C': 1, 'S': 1, 'X': 20},
|
'magnet': {
|
||||||
|
'price': 4500,
|
||||||
|
'capability': {'A': 3, 'C': 1, 'S': 1, 'X': 20}
|
||||||
|
},
|
||||||
|
|
||||||
// melt the matrix
|
// melt the matrix
|
||||||
'vaporizer': {'A': 4, 'C': 7, 'S': 6, 'X': 5}
|
'vaporizer': {
|
||||||
|
'price': 4000,
|
||||||
|
'capability': {'A': 4, 'C': 7, 'S': 6, 'X': 5}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.market = {
|
||||||
|
'dust': 1,
|
||||||
|
'stone': 3,
|
||||||
|
'carbon': 20,
|
||||||
|
'metal': 45
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
sell(ship, tool) {
|
sell(ship, tool) {
|
||||||
if (_.keys(this.inventory).contains(tool) &&
|
// Tools can't be buy several times
|
||||||
!_.keys(ship.equipment).contains(tool))
|
if (!_.keys(this.inventory).contains(tool) ||
|
||||||
|
_.keys(ship.equipment).contains(tool)) {
|
||||||
|
alert('You already own this tool.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let price = this.inventory[tool].price;
|
||||||
|
if (price > ship.cbtc) {
|
||||||
|
alert('You have not enough cBTC!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ship.equip(tool, this.inventory[tool]);
|
ship.equip(tool, this.inventory[tool]);
|
||||||
|
ship.cbtc -= price;
|
||||||
}
|
}
|
||||||
|
|
||||||
buy(ship, resource, amount) {
|
buy(ship, resource, amount) {
|
||||||
// TODO: Check if the ship has enough resources loaded
|
if (ship.resources[resource] < amount) {
|
||||||
console.log(ship, resource, amount);
|
alert('You have not enough resources loaded');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let price = this.market[resource];
|
||||||
|
ship.cbtc += price*amount;
|
||||||
|
ship.resources[resource] -= amount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,12 +215,12 @@ $(() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
_.eachObj(engine.station.inventory, (tool, props) => {
|
_.eachObj(engine.station.inventory, (tool, props) => {
|
||||||
let buy_button = EE('a', {'@href': '#', '%tool': tool}, 'buy').onClick((e) => {
|
let buy_button = EE('a', {'@href': '#', '%tool': tool}, ' buy for '+props.price+' cBTC').onClick((e) => {
|
||||||
let tool = $(e.target).get('%tool');
|
let tool = $(e.target).get('%tool');
|
||||||
engine.station.sell(engine.ship, tool);
|
engine.station.sell(engine.ship, tool);
|
||||||
engine.update();
|
engine.update();
|
||||||
})
|
})
|
||||||
$('#station-inventory').add(EE('li', tool+' ').add(buy_button));
|
$('#station-inventory').add(EE('li', tool).add(buy_button));
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#ship-inventory a').onClick((e) => {
|
$('#ship-inventory a').onClick((e) => {
|
||||||
|
|
Loading…
Reference in a new issue