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:
76
src/js/game/systems/energy_generator.js
Normal file
76
src/js/game/systems/energy_generator.js
Normal 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
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
51
src/js/game/systems/wired_pins.js
Normal file
51
src/js/game/systems/wired_pins.js
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user