Skip to content

feat: сборщик 2×2 вместо 3×3#19

Merged
AntonDot merged 1 commit into
mainfrom
feat/assembler-2x2
Jul 24, 2026
Merged

feat: сборщик 2×2 вместо 3×3#19
AntonDot merged 1 commit into
mainfrom
feat/assembler-2x2

Conversation

@AntonDot

Copy link
Copy Markdown
Member

Что

Футпринт assembler ужат 3×3 → 2×2 (занимает меньше клеток, у 3×3 было много пустого пространства вокруг спрайта).

  • Данные/сетка: grid.ts (getSize + входы, убран хардкод 3-го тайла), NODE_DEFS, input.ts SIZES, machines.ts getSize. Порты стали по 2 вместо 3 — адаптируются автоматически (loop по baseSize.w).
  • Спрайт: PNG авторены на 3 тайла (192px idle, 3072×192 work). Резать под 2×2 нельзя — слайсер кадров даст кашу. Поэтому текстуру оставили 3-тайловой и центрируем на 2×2: пивот по размеру текстуры (getSpriteSize), позиция по футпринту; прозрачный бортик арта вылезает наружу, центр заполняет клетку. То же центрирование в ghost-превью.
  • Тесты: 5 ассемблеров в graph.ts переставлены под 2×2-геометрию портов; в demo.json добавлена лента-мостик (8,5) — выход ассемблера сместился на 1 тайл влево.

Проверка

  • pnpm typecheck ✓, pnpm check ✓ (grid, graph 9 тестов, demo, 13 AC движка, stress), pnpm build

🤖 Generated with Claude Code

Футпринт assembler ужат 3×3 → 2×2 (меньше клеток на сетке): grid.ts
(getSize + входы, убран хардкод 3-го тайла), NODE_DEFS, input.ts SIZES,
machines.ts getSize. Порты стали по 2 вместо 3.

Спрайт (PNG авторены на 3 тайла) НЕ режем под 2×2 — иначе слайсер кадров
даёт кашу. Оставили 3-тайловую текстуру и центрируем её на 2×2: пивот по
размеру текстуры (getSpriteSize), позиция по футпринту; прозрачный бортик
арта вылезает наружу, центр заполняет клетку. То же центрирование в ghost.

Тесты: 5 ассемблеров в graph.ts переставлены под 2×2-геометрию портов;
demo.json — лента-мостик (8,5), выход сместился на 1 тайл влево.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 24, 2026 18:07
@AntonDot
AntonDot merged commit 16b6d7e into main Jul 24, 2026
1 check passed
@AntonDot
AntonDot deleted the feat/assembler-2x2 branch July 24, 2026 18:07

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Сжатие футпринта assembler с 3×3 до 2×2 по всему пайплайну (core-grid → node registry → game render/input), при этом фактическая текстура assembler остаётся 3×3 и центрируется на новом 2×2 footprint.

Changes:

  • Обновлены размеры assembler в core (grid.ts, NODE_DEFS) и на клиенте (machines.ts, input.ts).
  • Добавлено центрирование 3×3-текстуры assembler на 2×2 footprint (pivot по размеру текстуры, позиция по footprint) и аналогично для ghost-превью.
  • Подправлены core-checks (__checks__/graph.ts) и демо-мир (public/demo.json) под новую геометрию портов/выходов.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
web/src/game/machines.ts Перенос assembler в 2×2 footprint + отдельный spriteSize для центрирования 3×3 текстуры.
web/src/game/input.ts Обновление размеров ghost для assembler и центрирование ghost с учётом отличия текстуры от footprint.
web/src/core/nodes/index.ts Обновление NODE_DEFS.assembler.size до 2×2.
web/src/core/grid.ts Обновление getSize и входных тайлов assembler под 2×2.
web/src/core/checks/graph.ts Перестановка тестовых entity-координат assembler под новый footprint/порты.
web/public/demo.json Адаптация демо-мира под новый выход assembler (добавлен “мостик” ленты) и сопутствующие правки.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread web/src/game/input.ts
Comment on lines 21 to +23
// Размеры при dir=0 — для пивота ghost (дублирует core/grid, там getSize приватный)
const SIZES: Record<MachineKind, [number, number]> = {
belt: [1, 1], miner: [2, 2], furnace: [2, 2], assembler: [3, 3],
belt: [1, 1], miner: [2, 2], furnace: [2, 2], assembler: [2, 2],
Comment thread web/src/game/input.ts
Comment on lines +273 to 279
// Текстура может быть больше футпринта (assembler: спрайт 3×3, футпринт 2×2) —
// пивот по размеру текстуры, позиция по футпринту → текстура центрируется на клетках.
const [sw, sh] = tool === 'assembler' ? [3, 3] : [w, h];

ghostSprite.visible = true;
// Пивот — центр базовой текстуры, позиция — центр повёрнутого footprint
ghostSprite.pivot.set((w * TILE) / 2, (h * TILE) / 2);
ghostSprite.pivot.set((sw * TILE) / 2, (sh * TILE) / 2);
ghostSprite.position.set(tile.x * TILE + (rw * TILE) / 2, tile.y * TILE + (rh * TILE) / 2);
Comment thread web/src/core/grid.ts
Comment on lines +210 to +214
// BACK входы (весь нижний ряд, 2×2)
inputDirs = [
{
side: 'back',
localTiles: [[0, baseSize.h - 1], [1, baseSize.h - 1], [2, baseSize.h - 1]],
localTiles: [[0, baseSize.h - 1], [1, baseSize.h - 1]],
Comment on lines 59 to 63
assembler: {
kind: 'assembler',
title: 'Сборочный станок / Агент',
size: { w: 3, h: 3 },
size: { w: 2, h: 2 },
outItem: 'text',
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants