@minofrk/xelto-diagram-canvas
Version:
An implementation of <xelto-diagram> in TypeScript.
47 lines (36 loc) • 1.31 kB
text/typescript
import { Image } from '../../types';
import iterateAllCells from '../iterate-all-cells';
import { makePieceImage, makeErrorPieceImage } from './make-piece-image';
import { makePlayerImage, makeAllErrorPlayerImage } from './make-player-image';
import { ReadonlyState } from '@minofrk/msf-io-ts';
import {
makeUpperCaptiveImage,
makeLowerCaptiveImage,
makeAllErrorCaptiveImage,
} from './make-captive-image';
export function* makeStateImage(state: ReadonlyState): Image {
// 盤面
for (const { leftTop, index } of iterateAllCells()) {
const name = state.ele[index.y][index.x];
if (name === null) continue;
const rotate = state.korol.find((x): boolean => x === name)
? Math.PI / 2
: 0;
yield* makePieceImage(name, { leftTop, size: { x: 2, y: 2 } }, rotate);
}
// 盤外
yield* makeUpperCaptiveImage(state.sorn);
yield* makeLowerCaptiveImage(state.arxe);
// 手番
yield* makePlayerImage(state.sast);
}
export function* makeErrorStateImage(): Image {
// 盤面
for (const { leftTop } of iterateAllCells()) {
yield* makeErrorPieceImage({ leftTop, size: { x: 2, y: 2 } });
}
// 盤外
yield* makeAllErrorCaptiveImage();
// 手番
yield* makeAllErrorPlayerImage();
}