1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2026-03-02 03:39:21 +00:00

Initial take on wires

This commit is contained in:
tobspr
2020-06-24 22:23:10 +02:00
parent 97ef46bd52
commit 6677ff0a44
40 changed files with 1204 additions and 518 deletions

View File

@@ -0,0 +1,76 @@
import { DrawParameters } from "../../core/draw_parameters";
import { T } from "../../translations";
import { EnergyGeneratorComponent } from "../components/energy_generator";
import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
import { ShapeDefinition } from "../shape_definition";
export class EnergyGeneratorSystem extends GameSystemWithFilter {
constructor(root) {
super(root, [EnergyGeneratorComponent]);
}
draw(parameters) {
this.forEachMatchingEntityOnScreen(parameters, this.drawEntity.bind(this));
}
/**
* Returns which shape is required for a given generator
* @param {Entity} entity
*/
getShapeRequiredForGenerator(entity) {
return "CuCuCuCu";
}
update() {
for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i];
const energyGenComp = entity.components.EnergyGenerator;
if (!energyGenComp.requiredKey) {
// Compute required key for this generator
energyGenComp.requiredKey = this.getShapeRequiredForGenerator(entity);
}
}
}
/**
* @param {DrawParameters} parameters
* @param {Entity} entity
*/
drawEntity(parameters, entity) {
const context = parameters.context;
const staticComp = entity.components.StaticMapEntity;
if (!staticComp.shouldBeDrawn(parameters)) {
return;
}
const energyGenComp = entity.components.EnergyGenerator;
if (!energyGenComp.requiredKey) {
// Not initialized yet
return;
}
const pos = staticComp.getTileSpaceBounds().getCenter().toWorldSpace();
// TESTING
const definition = ShapeDefinition.fromShortKey(energyGenComp.requiredKey);
definition.draw(pos.x, pos.y, parameters, 30);
const energyGenerated = 5;
// deliver: Deliver
// toGenerateEnergy: For <x> energy
context.font = "bold 7px GameFont";
context.fillStyle = "#64666e";
context.textAlign = "left";
context.fillText(T.buildings.energy_generator.deliver.toUpperCase(), pos.x - 25, pos.y - 18);
context.fillText(
T.buildings.energy_generator.toGenerateEnergy.replace("<x>", "" + energyGenerated).toUpperCase(),
pos.x - 25,
pos.y + 28
);
}
}

View File

@@ -261,6 +261,14 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
}
}
const energyGeneratorComp = receiver.components.EnergyGenerator;
if (energyGeneratorComp) {
if (energyGeneratorComp.tryTakeItem(item)) {
// Passed it over
return true;
}
}
return false;
}

View File

@@ -0,0 +1,51 @@
import { GameSystemWithFilter } from "../game_system_with_filter";
import { WiredPinsComponent } from "../components/wired_pins";
import { DrawParameters } from "../../core/draw_parameters";
import { Entity } from "../entity";
import { THEME } from "../theme";
export class WiredPinsSystem extends GameSystemWithFilter {
constructor(root) {
super(root, [WiredPinsComponent]);
}
update() {
// TODO
}
drawWiresLayer(parameters) {
this.forEachMatchingEntityOnScreen(parameters, this.drawEntityPins.bind(this));
}
/**
*
* @param {DrawParameters} parameters
* @param {Entity} entity
*/
drawEntityPins(parameters, entity) {
const staticComp = entity.components.StaticMapEntity;
if (!staticComp.shouldBeDrawn(parameters)) {
return;
}
const pinsComp = entity.components.WiredPins;
const slots = pinsComp.slots;
for (let i = 0; i < slots.length; ++i) {
const slot = slots[i];
const tile = staticComp.localTileToWorld(slot.pos);
const worldPos = tile.toWorldSpaceCenterOfTile();
parameters.context.fillStyle = THEME.map.wires.pins[slot.type];
parameters.context.beginCircle(worldPos.x, worldPos.y, 5);
parameters.context.fill();
parameters.context.lineWidth = 2;
parameters.context.fillStyle = "rgba(0, 0, 0, 0.1)";
parameters.context.stroke();
}
}
}