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

Further progress on the energy generator / wires, fix translations

This commit is contained in:
tobspr
2020-07-01 17:51:11 +02:00
parent 030194f5b8
commit bd899df5fe
53 changed files with 1243 additions and 893 deletions

View File

@@ -9,6 +9,7 @@ import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
import { GameRoot, enumLayer } from "../root";
import { WiredPinsComponent, enumPinSlotType } from "../components/wired_pins";
import { EnergyConsumerComponent } from "../components/energy_consumer";
export class MetaAdvancedProcessorBuilding extends MetaBuilding {
constructor() {
@@ -61,6 +62,14 @@ export class MetaAdvancedProcessorBuilding extends MetaBuilding {
],
})
);
entity.addComponent(
new EnergyConsumerComponent({
bufferSize: 3,
perCharge: 1,
batteryPosition: new Vector(4, 6.5),
})
);
entity.addComponent(
new WiredPinsComponent({
slots: [

View File

@@ -1,13 +1,13 @@
import { enumDirection, Vector } from "../../core/vector";
import { enumItemType } from "../base_item";
import { EnergyGeneratorComponent } from "../components/energy_generator";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { ItemEjectorComponent } from "../components/item_ejector";
import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
import { GameRoot, enumLayer } from "../root";
import { enumLayer, GameRoot } from "../root";
import { enumHubGoalRewards } from "../tutorial_goals";
import { EnergyGeneratorComponent } from "../components/energy_generator";
import { WiredPinsComponent, enumPinSlotType } from "../components/wired_pins";
import { enumItemType } from "../base_item";
import { ItemEjectorComponent } from "../components/item_ejector";
export class MetaEnergyGenerator extends MetaBuilding {
constructor() {
@@ -51,17 +51,6 @@ export class MetaEnergyGenerator extends MetaBuilding {
entity.addComponent(
new ItemAcceptorComponent({
slots: [
{
pos: new Vector(0, 0),
directions: [enumDirection.top],
filter: enumItemType.shape,
},
{
pos: new Vector(1, 0),
directions: [enumDirection.top],
filter: enumItemType.shape,
},
{
pos: new Vector(0, 1),
directions: [enumDirection.bottom],
@@ -72,7 +61,6 @@ export class MetaEnergyGenerator extends MetaBuilding {
directions: [enumDirection.bottom],
filter: enumItemType.shape,
},
{
pos: new Vector(1, 0),
directions: [enumDirection.top],
@@ -99,6 +87,7 @@ export class MetaEnergyGenerator extends MetaBuilding {
new EnergyGeneratorComponent({
// Set by the energy generator system later
requiredKey: null,
acceptorSlotIndex: 2,
})
);

View File

@@ -12,6 +12,7 @@ import { HubComponent } from "./components/hub";
import { StorageComponent } from "./components/storage";
import { EnergyGeneratorComponent } from "./components/energy_generator";
import { WiredPinsComponent } from "./components/wired_pins";
import { EnergyConsumerComponent } from "./components/energy_consumer";
export function initComponentRegistry() {
gComponentRegistry.register(StaticMapEntityComponent);
@@ -27,6 +28,7 @@ export function initComponentRegistry() {
gComponentRegistry.register(StorageComponent);
gComponentRegistry.register(EnergyGeneratorComponent);
gComponentRegistry.register(WiredPinsComponent);
gComponentRegistry.register(EnergyConsumerComponent);
// IMPORTANT ^^^^^ UPDATE ENTITY COMPONENT STORAGE AFTERWARDS

View File

@@ -0,0 +1,34 @@
import { Component } from "../component";
import { types } from "../../savegame/serialization";
import { Vector } from "../../core/vector";
export class EnergyConsumerComponent extends Component {
static getId() {
return "EnergyConsumer";
}
static getSchema() {
return {
bufferSize: types.uint,
perCharge: types.uint,
stored: types.uint,
batteryPosition: types.vector,
};
}
/**
*
* @param {object} param0
* @param {number} param0.bufferSize How much energy this consumer can store
* @param {number} param0.perCharge How much energy this consumer needs per charge
* @param {Vector} param0.batteryPosition world space render offset of the battery icon
*/
constructor({ bufferSize = 3, perCharge = 1, batteryPosition = new Vector() }) {
super();
this.bufferSize = bufferSize;
this.perCharge = perCharge;
this.batteryPosition = batteryPosition;
this.stored = 0;
}
}

View File

@@ -5,9 +5,6 @@ import { ShapeItem } from "../items/shape_item";
const maxQueueSize = 20;
export const ENERGY_GENERATOR_EJECT_SLOT = 0;
export const ENERGY_GENERATOR_ACCEPT_SLOT = 4;
export class EnergyGeneratorComponent extends Component {
static getId() {
return "EnergyGenerator";
@@ -24,8 +21,9 @@ export class EnergyGeneratorComponent extends Component {
*
* @param {object} param0
* @param {string} param0.requiredKey Which shape this generator needs, can be null if not computed yet
* @param {number} param0.acceptorSlotIndex
*/
constructor({ requiredKey }) {
constructor({ requiredKey, acceptorSlotIndex = 0 }) {
super();
this.requiredKey = requiredKey;
@@ -34,6 +32,12 @@ export class EnergyGeneratorComponent extends Component {
* @type {number}
*/
this.itemsInQueue = 0;
/**
* Stores which slot accepts the waste
* @type {number}
*/
this.acceptorSlotIndex = acceptorSlotIndex;
}
/**
@@ -42,7 +46,7 @@ export class EnergyGeneratorComponent extends Component {
* @param {number} slot
*/
tryTakeItem(item, slot) {
if (slot === ENERGY_GENERATOR_ACCEPT_SLOT) {
if (slot === this.acceptorSlotIndex) {
// this is the acceptor slot on the wires layer
// just destroy it
return true;

View File

@@ -405,6 +405,7 @@ export class GameCore {
systems.hub.draw(params);
systems.energyGenerator.draw(params);
systems.storage.draw(params);
systems.energyConsumer.draw(params);
}
root.hud.parts.wiresOverlay.draw(params);

View File

@@ -12,6 +12,7 @@ import { HubComponent } from "./components/hub";
import { StorageComponent } from "./components/storage";
import { EnergyGeneratorComponent } from "./components/energy_generator";
import { WiredPinsComponent } from "./components/wired_pins";
import { EnergyConsumerComponent } from "./components/energy_consumer";
/* typehints:end */
/**
@@ -61,6 +62,9 @@ export class EntityComponentStorage {
/** @type {WiredPinsComponent} */
this.WiredPins;
/** @type {EnergyConsumerComponent} */
this.EnergyConsumer;
/* typehints:end */
}
}

View File

@@ -15,6 +15,7 @@ import { ItemAcceptorSystem } from "./systems/item_acceptor";
import { StorageSystem } from "./systems/storage";
import { EnergyGeneratorSystem } from "./systems/energy_generator";
import { WiredPinsSystem } from "./systems/wired_pins";
import { EnergyConsumerSystem } from "./systems/energy_consumer";
const logger = createLogger("game_system_manager");
@@ -64,6 +65,9 @@ export class GameSystemManager {
/** @type {WiredPinsSystem} */
wiredPins: null,
/** @type {EnergyConsumerSystem} */
energyConsumer: null,
/* typehints:end */
};
this.systemUpdateOrder = [];
@@ -104,6 +108,8 @@ export class GameSystemManager {
add("wiredPins", WiredPinsSystem);
add("energyConsumer", EnergyConsumerSystem);
// IMPORTANT: Must be after belt system since belt system can change the
// orientation of an entity after it is placed -> the item acceptor cache
// then would be invalid

View File

@@ -546,7 +546,6 @@ export class BeltSystem extends GameSystemWithFilter {
return;
}
parameters.context.globalAlpha = 0.5;
const contents = chunk.wireContents;
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
@@ -564,7 +563,6 @@ export class BeltSystem extends GameSystemWithFilter {
}
}
}
parameters.context.globalAlpha = 1;
}
/**

View File

@@ -0,0 +1,48 @@
import { GameSystemWithFilter } from "../game_system_with_filter";
import { EnergyConsumerComponent } from "../components/energy_consumer";
import { Loader } from "../../core/loader";
import { DrawParameters } from "../../core/draw_parameters";
import { Entity } from "../entity";
import { enableImageSmoothing } from "../../core/buffer_utils";
export class EnergyConsumerSystem extends GameSystemWithFilter {
constructor(root) {
super(root, [EnergyConsumerComponent]);
this.batterySprites = [
Loader.getSprite("sprites/wires/battery_empty.png"),
Loader.getSprite("sprites/wires/battery_low.png"),
Loader.getSprite("sprites/wires/battery_medium.png"),
Loader.getSprite("sprites/wires/battery_full.png"),
];
}
/**
* Draws everything
* @param {DrawParameters} parameters
*/
draw(parameters) {
this.forEachMatchingEntityOnScreen(parameters, this.drawSingleEntity.bind(this));
}
/**
* Draws a given entity
* @param {DrawParameters} parameters
* @param {Entity} entity
*/
drawSingleEntity(parameters, entity) {
const staticComp = entity.components.StaticMapEntity;
const consumerComp = entity.components.EnergyConsumer;
const position = staticComp
.getTileSpaceBounds()
.getCenter()
.toWorldSpace()
.add(consumerComp.batteryPosition);
const percentage = consumerComp.stored / consumerComp.bufferSize;
const index = Math.floor(percentage * this.batterySprites.length);
this.batterySprites[index].drawCachedCentered(parameters, position.x, position.y, 12);
}
}

View File

@@ -1,7 +1,7 @@
import { DrawParameters } from "../../core/draw_parameters";
import { formatBigNumber } from "../../core/utils";
import { T } from "../../translations";
import { EnergyGeneratorComponent, ENERGY_GENERATOR_EJECT_SLOT } from "../components/energy_generator";
import { EnergyGeneratorComponent } from "../components/energy_generator";
import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
import { POSITIVE_ENERGY_ITEM_SINGLETON } from "../items/positive_energy_item";
@@ -36,7 +36,8 @@ export class EnergyGeneratorSystem extends GameSystemWithFilter {
}
if (energyGenComp.itemsInQueue > 0) {
if (ejectorComp.tryEject(ENERGY_GENERATOR_EJECT_SLOT, POSITIVE_ENERGY_ITEM_SINGLETON)) {
// FIXME: Find slot dynamically
if (ejectorComp.tryEject(0, POSITIVE_ENERGY_ITEM_SINGLETON)) {
energyGenComp.itemsInQueue -= 1;
}
}

View File

@@ -27,7 +27,7 @@ export class WiredPinsSystem extends GameSystemWithFilter {
}
/**
* Draws the given layer
* Draws the pins
* @param {DrawParameters} parameters
*/
draw(parameters) {
@@ -35,7 +35,7 @@ export class WiredPinsSystem extends GameSystemWithFilter {
}
/**
* Draws a given chunk
* Draws a given entity
* @param {DrawParameters} parameters
* @param {Entity} entity
*/