@real_one_chess_king/game-logic
Version:
R.O.C.K. chess game logic
66 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeXY = serializeXY;
exports.serializeCoordinate = serializeCoordinate;
exports.serializeAffects = serializeAffects;
exports.serializeAffect = serializeAffect;
exports.serializeMovementAffect = serializeMovementAffect;
exports.serializeToCoordinate = serializeToCoordinate;
exports.serializeTransformationAffect = serializeTransformationAffect;
const affect_types_1 = require("../affect/affect.types");
const coordinateSeparator = "_";
function serializeXY(x, y) {
return `${x}${coordinateSeparator}${y}`;
}
function serializeCoordinate(c) {
return serializeXY(c[0], c[1]);
}
const affectsSeparator = "#";
const serializationOrder = [affect_types_1.AffectType.move, affect_types_1.AffectType.transformation];
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);
}
function serializeAffect(a) {
switch (a.type) {
case affect_types_1.AffectType.move:
return serializeMovementAffect(a);
case affect_types_1.AffectType.transformation:
return serializeTransformationAffect(a);
default:
throw new Error("not found affect serialize");
}
}
function serializeMovementAffect(a) {
return serializeToCoordinate(a.to);
}
function serializeToCoordinate(to) {
return `${to[0]}${coordinateSeparator}${to[1]}`;
}
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