Skip to content

feat: процедурный ghost-превью ленты (с поворотами)#18

Merged
AntonDot merged 2 commits into
mainfrom
feat/belt-procedural-ghost
Jul 24, 2026
Merged

feat: процедурный ghost-превью ленты (с поворотами)#18
AntonDot merged 2 commits into
mainfrom
feat/belt-procedural-ghost

Conversation

@AntonDot

Copy link
Copy Markdown
Member

Что

Ghost-превью инструмента belt больше не старый спрайт belt.png, а тот же процедурный рендер, что и настоящие ленты (экспортированы beltShape/makePath/drawTrack из belts.ts):

  • на ховере — одиночный тайл нового вида; форма считается с учётом уже стоящих лент → сразу показывает поворот/стыковку, если наводишь впритык к существующей ленте;
  • при протяжке — превью всей линии целиком с углами (rasterizeLine), как ляжет после отпускания;
  • ok → обычные цвета ленты (полупрозрачные), bad (наезд на станок) → красный тинт;
  • статично, без бегущих шевронов (превью). Спрайтовый ghost остаётся для всех не-belt инструментов.

Проверка

  • pnpm typecheck ✓, pnpm build
  • Слит с актуальным main (фикс первичной отрисовки после persist затронул belts.ts) — авто-мердж стратегией ort, конфликтов нет, оба изменения сохранены

🤖 Generated with Claude Code

dotsenko-rgb and others added 2 commits July 25, 2026 01:35
Ghost инструмента belt теперь рисуется тем же кодом, что и настоящие ленты
(экспортированы beltShape/makePath/drawTrack из belts.ts):
- на ховере — одиночный тайл нового вида, форма считается с учётом уже
  стоящих лент → сразу показывает поворот/стыковку;
- при протяжке — превью всей линии целиком с углами (rasterizeLine);
- ok → обычные цвета ленты (alpha), bad (наезд на станок) → красный тинт.
Статично, без бегущих шевронов. Старый спрайтовый ghost — только не-лента.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 24, 2026 17:37
@AntonDot
AntonDot merged commit d317530 into main Jul 24, 2026
1 check passed
@AntonDot
AntonDot deleted the feat/belt-procedural-ghost branch July 24, 2026 17:37

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

This PR updates the belt tool ghost preview to use the same procedural belt rendering as real belts, so the preview reflects correct corner/connection shapes (including when dragging a full line).

Changes:

  • Exported beltShape, makePath, and drawTrack from web/src/game/belts.ts for reuse.
  • Added a belt-specific procedural ghost renderer in web/src/game/input.ts (single-tile hover and full-line drag preview) with ok/bad tinting.
  • Kept sprite-based ghost behavior for non-belt tools.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
web/src/game/input.ts Adds a Graphics-pool-based procedural belt ghost preview (hover + dragged line), and routes belt tool ghost handling through it.
web/src/game/belts.ts Exports belt shape/path/track helpers so belt ghost preview can reuse the real belt renderer.
Comments suppressed due to low confidence (1)

web/src/game/input.ts:216

  • updateBeltGhost перерисовывает Graphics (через drawTrack(g, ...)) на каждый pointermove, даже если форма тайла не изменилась. Для длинной линии это может быть заметно дорого. Можно кэшировать shapeKey на самом Graphics (например, через g.name) и вызывать drawTrack только когда kind/enter/exit изменились.
      const ent: Entity = { id: 'ghost', kind: 'belt', pos: t.pos, dir: t.dir, config: {} };
      const shape = beltShape(ent, byTile);
      drawTrack(g, shape, makePath(shape));
      g.position.set(t.pos.x * TILE, t.pos.y * TILE);

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

Comment thread web/src/game/input.ts
Comment on lines +196 to +203
let ok = true;
for (const t of tiles) {
const test: Entity = { id: 'ghost', kind: 'belt', pos: t.pos, dir: t.dir, config: {} };
if (!(canPlace(store.entities, test) || beltAt(t.pos) !== null)) {
ok = false;
break;
}
}
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