Shared join module for transport pieces; belt drawing uses it (t67 phase 1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,36 +2,17 @@
|
||||
let slopeBeltJoins = new Uint8Array(0), slopeBeltHalo = new Uint8Array(0), beltCaps = new Uint8Array(0);
|
||||
let slopeAcross = 0, slopeAlong = 0, slopeDistance = 0;
|
||||
function slopeBeltConnections(bx, by, code, planned = null) {
|
||||
const grade = beltGrade(code);
|
||||
let joins = 0;
|
||||
for (let end = 0; end < 2; end++) {
|
||||
const side = end ? 1 : -1, nx = bx + side, ny = by + side * grade;
|
||||
const nb = ny * BW + nx, next = planned && planned.get(nb);
|
||||
if (nx >= 0 && nx < BW && ny >= 0 && ny < BH && beltGrade(next ? next[0] : blockP[nb]) === grade) {
|
||||
joins |= 4 << end; continue;
|
||||
}
|
||||
const fy = by + (end ? grade > 0 : grade < 0), fb = fy * BW + nx;
|
||||
if (nx < 0 || nx >= BW || fy < 0 || fy >= BH) continue;
|
||||
const flat = planned && planned.get(fb), c = flat ? flat[0] : blockP[fb], v = flat ? flat[1] : blockV[fb];
|
||||
if (c === BP_BELT || c === BP_FILTER || (c === BP_SCREW && (v === 1 || v === 3))) joins |= 1 << end;
|
||||
const join = endJoin(bx, by, end, planned);
|
||||
if (join < 0) continue;
|
||||
const nb = join >> 1, next = planned && planned.get(nb);
|
||||
joins |= (isSlopeBelt(next ? next[0] : blockP[nb]) ? 4 : 1) << end;
|
||||
}
|
||||
return joins;
|
||||
}
|
||||
function flatBeltCaps(b) {
|
||||
const bx = b % BW, by = (b / BW) | 0;
|
||||
let caps = 0;
|
||||
for (let end = 0; end < 2; end++) {
|
||||
const x = bx + (end ? 1 : -1);
|
||||
let joined = false;
|
||||
if (x >= 0 && x < BW) for (let dy = -1; dy <= 0; dy++) {
|
||||
if (by + dy < 0) continue;
|
||||
const n = (by + dy) * BW + x, c = blockP[n], g = beltGrade(c);
|
||||
if ((!dy && (c === BP_BELT || c === BP_FILTER || (c === BP_SCREW && (blockV[n] === 1 || blockV[n] === 3 || blockV[n] >= 4)))) ||
|
||||
(g && dy === -(end ? g < 0 : g > 0))) joined = true;
|
||||
}
|
||||
if (!joined) caps |= 1 << end;
|
||||
}
|
||||
return caps;
|
||||
function flatBeltCaps(b, planned = null) {
|
||||
return 3 ^ pieceJoins(b % BW, (b / BW) | 0, planned);
|
||||
}
|
||||
function prepareSlopeBelts(x0, y0, x1, y1) {
|
||||
if (slopeBeltJoins.length !== NB) { slopeBeltJoins = new Uint8Array(NB); slopeBeltHalo = new Uint8Array(NB); beltCaps = new Uint8Array(NB); }
|
||||
|
||||
Reference in New Issue
Block a user