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

@@ -5,6 +5,7 @@ export const CHANGELOG = [
entries: [
"Allow holding ALT in belt planner to reverse direction (by jakobhellermann)",
"Clear cursor when trying to pipette the same building twice (by hexy)",
"Updated the soundtrack again, it is now 20 minutes in total!",
],
},
{

View File

@@ -45,7 +45,7 @@ export const globalConfig = {
// Map
mapChunkSize: 16,
mapChunkPrerenderMinZoom: 1.15,
mapChunkPrerenderMinZoom: 0.7,
mapChunkOverviewMinZoom: 0.7,
// Belt speeds

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
*/