nes-tetris-components
Version:
A set of components and front-end functionality of NES Tetris
36 lines (35 loc) • 2.36 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TetrisGrid = void 0;
const react_1 = __importDefault(require("react"));
require("./representation.css");
const block_1 = __importDefault(require("./block"));
const lodash_1 = __importDefault(require("lodash"));
function getRow(row, blocks, beforeBlocks, blockSizeInRem, getBlockProps, transparentEmptyBlocks) {
const width = blocks.length ? `${100 / blocks.length}%` : 'auto';
return (react_1.default.createElement("div", { className: "tetris-row", key: row, style: { height: `${blockSizeInRem}rem` } }, blocks.map((block, blockIndex) => react_1.default.createElement(block_1.default, Object.assign({ key: row * 20 + blockIndex, row: row, column: blockIndex, value: block, width: width, transparent: transparentEmptyBlocks, showDiff: !!beforeBlocks && !!block && !beforeBlocks[blockIndex] }, (getBlockProps === undefined ? undefined : getBlockProps(row, blockIndex, block)))))));
}
function TetrisGrid({ grid, beforeGrid = null, possiblePiece, blockSizeInRem = 2, onClick, onMouseLeave, getBlockProps, hideTopTwoRows = true, transparentEmptyBlocks = false, className, }) {
let adjustedBeforeGrid = beforeGrid;
let adjustedGrid = grid;
if (possiblePiece) {
adjustedBeforeGrid = grid;
adjustedGrid = lodash_1.default.cloneDeep(grid);
possiblePiece.blocks.forEach(block => {
adjustedGrid[block.row][block.column] = block.value;
});
}
const numberOfRows = grid.length - (hideTopTwoRows ? 2 : 0);
const numberOfColumns = Math.max(...grid.map(row => row.length));
const width = blockSizeInRem * numberOfColumns;
const height = blockSizeInRem * numberOfRows;
return (react_1.default.createElement("div", { style: { height: `${height}rem`, width: `${width}rem` }, onClick: onClick, onMouseLeave: onMouseLeave, className: className }, adjustedGrid.map((row, rowKey) => {
return hideTopTwoRows && rowKey < 2
? null
: getRow(rowKey, row, adjustedBeforeGrid ? adjustedBeforeGrid[rowKey] : null, blockSizeInRem, getBlockProps, transparentEmptyBlocks);
})));
}
exports.TetrisGrid = TetrisGrid;