1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-12-16 03:31:52 +00:00

only show acceptor belt if connected

This commit is contained in:
EmeraldBlock 2021-11-24 22:43:39 -06:00
parent 97d45e8aa7
commit 24d6238d17

View File

@ -2,7 +2,13 @@ import { globalConfig } from "../../core/config";
import { DrawParameters } from "../../core/draw_parameters";
import { Loader } from "../../core/loader";
import { Rectangle } from "../../core/rectangle";
import { enumDirectionToAngle, enumInvertedDirections } from "../../core/vector";
import {
enumDirection,
enumDirectionToAngle,
enumDirectionToVector,
enumInvertedDirections,
Vector,
} from "../../core/vector";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { GameSystemWithFilter } from "../game_system_with_filter";
import { MapChunkView } from "../map_chunk_view";
@ -20,6 +26,50 @@ export class AcceptorBeltSystem extends GameSystemWithFilter {
}
}
/**
* Checks if a given tile is connected and has an ejector
* @param {Vector} tile
* @param {enumDirection} toDirection
* @returns {boolean}
*/
checkIsEjectorConnected(tile, toDirection) {
const contents = this.root.map.getLayerContentXY(tile.x, tile.y, "regular");
if (!contents) {
return false;
}
const staticComp = contents.components.StaticMapEntity;
// Check if its a belt, since then its simple
const beltComp = contents.components.Belt;
if (beltComp) {
return staticComp.localDirectionToWorld(beltComp.direction) === toDirection;
}
// Check for an ejector
const ejectorComp = contents.components.ItemEjector;
if (ejectorComp) {
// Check each slot to see if its connected
for (let i = 0; i < ejectorComp.slots.length; ++i) {
const slot = ejectorComp.slots[i];
const slotTile = staticComp.localTileToWorld(slot.pos);
// Step 1: Check if the tile matches
if (!slotTile.equals(tile)) {
continue;
}
// Step 2: Check if the direction matches
const slotDirection = staticComp.localDirectionToWorld(slot.direction);
if (slotDirection === toDirection) {
return true;
}
}
}
return false;
}
/**
* Draws a given chunk
* @param {DrawParameters} parameters
@ -76,8 +126,20 @@ export class AcceptorBeltSystem extends GameSystemWithFilter {
const direction = directions[j];
// Extract direction and angle
const worldDirection = staticComp.localDirectionToWorld(direction);
const angle = enumDirectionToAngle[enumInvertedDirections[worldDirection]];
const worldDirection =
enumInvertedDirections[staticComp.localDirectionToWorld(direction)];
const worldDirectionVector = enumDirectionToVector[worldDirection];
const angle = enumDirectionToAngle[worldDirection];
// check if connected
if (
!this.checkIsEjectorConnected(
transformedPos.sub(worldDirectionVector),
worldDirection
)
) {
continue;
}
const clipRect = new Rectangle(0, 1 - beltLength, 1, beltLength);