@real_one_chess_king/game-logic
Version:
R.O.C.K. chess game logic
57 lines • 2 kB
JavaScript
import { AffectType, } from "../affect/affect.types";
const coordinateSeparator = "_";
export function serializeXY(x, y) {
return `${x}${coordinateSeparator}${y}`;
}
export function serializeCoordinate(c) {
return serializeXY(c[0], c[1]);
}
const affectsSeparator = "#";
const serializationOrder = [AffectType.move, AffectType.transformation];
export function serializeAffects(affects) {
const affectsWithChoice = affects.filter((a) => a.userSelected);
return affectsWithChoice
.sort((a, b) => {
return (serializationOrder.indexOf(a.type) - serializationOrder.indexOf(b.type));
})
.map((a) => serializeAffect(a))
.join(affectsSeparator);
}
export function serializeAffect(a) {
switch (a.type) {
case AffectType.move:
return serializeMovementAffect(a);
case AffectType.transformation:
return serializeTransformationAffect(a);
default:
throw new Error("not found affect serialize");
}
}
export function serializeMovementAffect(a) {
return serializeToCoordinate(a.to);
}
export function serializeToCoordinate(to) {
return `${to[0]}${coordinateSeparator}${to[1]}`;
}
export function serializeTransformationAffect(a) {
return `${a.destPieceType[0]}`;
}
// export function deserializeAffects(serialized: string): Affects {
// return serialized.split(affectsSeparator).map((a) => deserializeAffect(a));
// }
// export function parseToKey(key: Hash): TurnChoosableData {
// if (key.length > 3) {
// const [xy, pieceCode] = key.split("-");
// const [x, y] = xy.split(",");
// return [
// Number(x),
// Number(y),
// postfixToPieceType[pieceCode as keyof typeof postfixToPieceType],
// ] as TurnChoosableData;
// }
// return key.split(",").map(Number) as TurnChoosableData;
// }
// export function parseKey(key: Hash): Coordinate {
// return key.split(",").map(Number) as Coordinate;
// }
//# sourceMappingURL=moves-tree.utils.js.map