mirror of
https://github.com/tobspr/shapez.io.git
synced 2026-03-02 03:39:21 +00:00
Further take on logic wires
This commit is contained in:
@@ -33,15 +33,6 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
[enumDirection.right]: Loader.getSprite("sprites/belt/right_0.png"),
|
||||
};
|
||||
|
||||
/**
|
||||
* @type {Object.<enumDirection, Array<AtlasSprite>>}
|
||||
*/
|
||||
this.wireSprites = {
|
||||
[enumDirection.top]: Loader.getSprite("sprites/buildings/wire_top.png"),
|
||||
[enumDirection.left]: Loader.getSprite("sprites/buildings/wire_left.png"),
|
||||
[enumDirection.right]: Loader.getSprite("sprites/buildings/wire_right.png"),
|
||||
};
|
||||
|
||||
/**
|
||||
* @type {Object.<enumDirection, Array<AtlasSprite>>}
|
||||
*/
|
||||
@@ -485,10 +476,6 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
* @param {MapChunkView} chunk
|
||||
*/
|
||||
drawChunk(parameters, chunk) {
|
||||
if (parameters.zoomLevel < globalConfig.mapChunkOverviewMinZoom) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Limit speed to avoid belts going backwards
|
||||
const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
|
||||
|
||||
@@ -511,7 +498,6 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
}
|
||||
}
|
||||
}
|
||||
1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,8 +10,6 @@ export class MapResourcesSystem extends GameSystem {
|
||||
* @param {MapChunkView} chunk
|
||||
*/
|
||||
drawChunk(parameters, chunk) {
|
||||
const renderItems = parameters.zoomLevel >= globalConfig.mapChunkOverviewMinZoom;
|
||||
|
||||
parameters.context.globalAlpha = 0.5;
|
||||
|
||||
const layer = chunk.lowerLayer;
|
||||
@@ -37,31 +35,14 @@ export class MapResourcesSystem extends GameSystem {
|
||||
|
||||
parameters.context.fillStyle = lowerItem.getBackgroundColorAsResource();
|
||||
parameters.context.fillRect(worldX, worldY, globalConfig.tileSize, globalConfig.tileSize);
|
||||
if (renderItems) {
|
||||
lowerItem.draw(
|
||||
worldX + globalConfig.halfTileSize,
|
||||
worldY + globalConfig.halfTileSize,
|
||||
parameters
|
||||
);
|
||||
}
|
||||
lowerItem.draw(
|
||||
worldX + globalConfig.halfTileSize,
|
||||
worldY + globalConfig.halfTileSize,
|
||||
parameters
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
parameters.context.globalAlpha = 1;
|
||||
|
||||
if (!renderItems) {
|
||||
// Render patches instead
|
||||
const patches = chunk.patches;
|
||||
for (let i = 0; i < patches.length; ++i) {
|
||||
const { pos, item, size } = patches[i];
|
||||
|
||||
item.draw(
|
||||
(chunk.tileX + pos.x + 0.5) * globalConfig.tileSize,
|
||||
(chunk.tileY + pos.y + 0.5) * globalConfig.tileSize,
|
||||
parameters,
|
||||
80
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,11 @@
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { DrawParameters } from "../../core/draw_parameters";
|
||||
import { Loader } from "../../core/loader";
|
||||
import { enumDirection } from "../../core/vector";
|
||||
import { GameSystem } from "../game_system";
|
||||
import { MapChunkView } from "../map_chunk_view";
|
||||
|
||||
export class StaticMapEntitySystem extends GameSystem {
|
||||
constructor(root) {
|
||||
super(root);
|
||||
|
||||
this.beltOverviewSprites = {
|
||||
[enumDirection.top]: Loader.getSprite("sprites/map_overview/belt_forward.png"),
|
||||
[enumDirection.right]: Loader.getSprite("sprites/map_overview/belt_right.png"),
|
||||
[enumDirection.left]: Loader.getSprite("sprites/map_overview/belt_left.png"),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,8 +18,6 @@ export class StaticMapEntitySystem extends GameSystem {
|
||||
return;
|
||||
}
|
||||
|
||||
const drawOutlinesOnly = parameters.zoomLevel < globalConfig.mapChunkOverviewMinZoom;
|
||||
|
||||
const drawnUids = new Set();
|
||||
|
||||
const contents = chunk.contents;
|
||||
@@ -41,26 +31,10 @@ export class StaticMapEntitySystem extends GameSystem {
|
||||
}
|
||||
drawnUids.add(entity.uid);
|
||||
const staticComp = entity.components.StaticMapEntity;
|
||||
if (drawOutlinesOnly) {
|
||||
const rect = staticComp.getTileSpaceBounds();
|
||||
parameters.context.fillStyle = staticComp.getSilhouetteColor() || "#aaa";
|
||||
const beltComp = entity.components.Belt;
|
||||
if (beltComp) {
|
||||
const sprite = this.beltOverviewSprites[beltComp.direction];
|
||||
staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 0);
|
||||
} else {
|
||||
parameters.context.fillRect(
|
||||
rect.x * globalConfig.tileSize,
|
||||
rect.y * globalConfig.tileSize,
|
||||
rect.w * globalConfig.tileSize,
|
||||
rect.h * globalConfig.tileSize
|
||||
);
|
||||
}
|
||||
} else {
|
||||
const sprite = staticComp.getSprite();
|
||||
if (sprite) {
|
||||
staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2);
|
||||
}
|
||||
|
||||
const sprite = staticComp.getSprite();
|
||||
if (sprite) {
|
||||
staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
36
src/js/game/systems/wire.js
Normal file
36
src/js/game/systems/wire.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import { GameSystemWithFilter } from "../game_system_with_filter";
|
||||
import { WireComponent, enumWireType } from "../components/wire";
|
||||
import { MapChunkView } from "../map_chunk_view";
|
||||
import { globalConfig } from "../../core/config";
|
||||
import { Loader } from "../../core/loader";
|
||||
|
||||
export class WireSystem extends GameSystemWithFilter {
|
||||
constructor(root) {
|
||||
super(root, [WireComponent]);
|
||||
|
||||
this.wireSprites = {
|
||||
[enumWireType.regular]: Loader.getSprite("sprites/buildings/wire.png"),
|
||||
[enumWireType.turn]: Loader.getSprite("sprites/buildings/wire-turn.png"),
|
||||
[enumWireType.split]: Loader.getSprite("sprites/buildings/wire-split.png"),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a given chunk
|
||||
* @param {import("../../core/draw_utils").DrawParameters} parameters
|
||||
* @param {MapChunkView} chunk
|
||||
*/
|
||||
drawChunk(parameters, chunk) {
|
||||
const contents = chunk.wireContents;
|
||||
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
|
||||
for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
|
||||
const entity = contents[x][y];
|
||||
if (entity && entity.components.Wire) {
|
||||
const wireType = entity.components.Wire.type;
|
||||
const sprite = this.wireSprites[wireType];
|
||||
entity.components.StaticMapEntity.drawSpriteOnFullEntityBounds(parameters, sprite, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,8 @@ export class WiredPinsSystem extends GameSystemWithFilter {
|
||||
super(root, [WiredPinsComponent]);
|
||||
|
||||
this.pinSprites = {
|
||||
[enumPinSlotType.logicalEjector]: Loader.getSprite("sprites/wires/pin_negative_eject.png"),
|
||||
[enumPinSlotType.logicalAcceptor]: Loader.getSprite("sprites/wires/pin_negative_accept.png"),
|
||||
[enumPinSlotType.logicalEjector]: Loader.getSprite("sprites/wires/logical_ejector.png"),
|
||||
[enumPinSlotType.logicalAcceptor]: Loader.getSprite("sprites/wires/logical_acceptor.png"),
|
||||
};
|
||||
|
||||
this.root.signals.prePlacementCheck.add(this.prePlacementCheck, this);
|
||||
|
||||
Reference in New Issue
Block a user