refactor(slay-the-spire-like): clean up barrel exports and formatting
- Convert explicit barrel exports to `export *` patterns in several systems - Create a new `utils/index.ts` barrel for the system utils - Rename `validatePlacement` to `validateShapePlacement` for clarity - Reformat `shape-collision.ts` to use 2-space indentation and consistent styling - Fix import paths in `index.ts`
This commit is contained in:
parent
03d367c7b0
commit
97ff61985a
|
|
@ -3,5 +3,5 @@ export * from "./system/deck";
|
|||
export * from "./system/encounter";
|
||||
export * from "./system/grid-inventory";
|
||||
export * from "./system/map";
|
||||
export * from "./system/utils/parse-shape";
|
||||
export * from "./system/utils";
|
||||
export * from "./system/types";
|
||||
|
|
|
|||
|
|
@ -1,7 +1,2 @@
|
|||
export type { GameCard, GameCardMeta, PlayerDeck, DeckRegions } from './types';
|
||||
export {
|
||||
generateDeckFromInventory,
|
||||
createCard,
|
||||
createPlayerDeck,
|
||||
generateCardId,
|
||||
} from './factory';
|
||||
export * from "./factory";
|
||||
export * from "./types";
|
||||
|
|
|
|||
|
|
@ -1,24 +1,3 @@
|
|||
export type {
|
||||
CellCoordinate,
|
||||
CellKey,
|
||||
GridInventory,
|
||||
InventoryItem,
|
||||
MutationResult,
|
||||
PlacementResult,
|
||||
} from "./types";
|
||||
export type { GameItemMeta, GameItem } from "./types";
|
||||
|
||||
export {
|
||||
createGridInventory,
|
||||
flipItem,
|
||||
getAdjacentItems,
|
||||
getItemAtCell,
|
||||
getOccupiedCellSet,
|
||||
moveItem,
|
||||
placeItem,
|
||||
removeItem,
|
||||
rotateItem,
|
||||
validatePlacement,
|
||||
} from "./transform";
|
||||
|
||||
export * from "./types";
|
||||
export * from "./transform";
|
||||
export * from "./factory";
|
||||
|
|
|
|||
|
|
@ -1,24 +1,3 @@
|
|||
export { MapNodeType, MapLayerType } from "./types";
|
||||
export type {
|
||||
MapNode,
|
||||
MapLayer,
|
||||
PointCrawlMap,
|
||||
MapGenerationConfig,
|
||||
} from "./types";
|
||||
|
||||
export { generatePointCrawlMap } from "./generator";
|
||||
export {
|
||||
getNode,
|
||||
getChildren,
|
||||
getParents,
|
||||
hasPath,
|
||||
findAllPaths,
|
||||
} from "./generator";
|
||||
|
||||
export {
|
||||
canMoveTo,
|
||||
moveToNode,
|
||||
getReachableChildren,
|
||||
isAtEndNode,
|
||||
isAtStartNode,
|
||||
} from "./navigation";
|
||||
export * from "./generator";
|
||||
export * from "./navigation";
|
||||
export * from "./types";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
export * from "./parse-shape";
|
||||
export * from "./shape-collision";
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import type { ParsedShape } from './parse-shape';
|
||||
import type { ParsedShape } from "./parse-shape";
|
||||
|
||||
/**
|
||||
* Represents a 2D point in grid coordinates.
|
||||
|
|
@ -54,7 +54,7 @@ export function transformPoint(
|
|||
point: Point2D,
|
||||
transform: Transform2D,
|
||||
shapeWidth: number,
|
||||
shapeHeight: number
|
||||
shapeHeight: number,
|
||||
): Point2D {
|
||||
let { x, y } = point;
|
||||
|
||||
|
|
@ -96,10 +96,13 @@ export function transformPoint(
|
|||
/**
|
||||
* Transforms a shape and returnss its occupied cells in world coordinates.
|
||||
*/
|
||||
export function transformShape(shape: ParsedShape, transform: Transform2D): Point2D[] {
|
||||
export function transformShape(
|
||||
shape: ParsedShape,
|
||||
transform: Transform2D,
|
||||
): Point2D[] {
|
||||
const cells = getOccupiedCells(shape);
|
||||
return cells.map(cell =>
|
||||
transformPoint(cell, transform, shape.width, shape.height)
|
||||
return cells.map((cell) =>
|
||||
transformPoint(cell, transform, shape.width, shape.height),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -110,12 +113,12 @@ export function checkCollision(
|
|||
shapeA: ParsedShape,
|
||||
transformA: Transform2D,
|
||||
shapeB: ParsedShape,
|
||||
transformB: Transform2D
|
||||
transformB: Transform2D,
|
||||
): boolean {
|
||||
const cellsA = transformShape(shapeA, transformA);
|
||||
const cellsB = transformShape(shapeB, transformB);
|
||||
|
||||
const setA = new Set(cellsA.map(c => `${c.x},${c.y}`));
|
||||
const setA = new Set(cellsA.map((c) => `${c.x},${c.y}`));
|
||||
|
||||
for (const cell of cellsB) {
|
||||
if (setA.has(`${cell.x},${cell.y}`)) {
|
||||
|
|
@ -135,7 +138,7 @@ export function checkCollision(
|
|||
export function checkBoardCollision(
|
||||
shape: ParsedShape,
|
||||
transform: Transform2D,
|
||||
occupiedCells: Set<string>
|
||||
occupiedCells: Set<string>,
|
||||
): boolean {
|
||||
const cells = transformShape(shape, transform);
|
||||
|
||||
|
|
@ -159,12 +162,17 @@ export function checkBounds(
|
|||
shape: ParsedShape,
|
||||
transform: Transform2D,
|
||||
boardWidth: number,
|
||||
boardHeight: number
|
||||
boardHeight: number,
|
||||
): boolean {
|
||||
const cells = transformShape(shape, transform);
|
||||
|
||||
for (const cell of cells) {
|
||||
if (cell.x < 0 || cell.x >= boardWidth || cell.y < 0 || cell.y >= boardHeight) {
|
||||
if (
|
||||
cell.x < 0 ||
|
||||
cell.x >= boardWidth ||
|
||||
cell.y < 0 ||
|
||||
cell.y >= boardHeight
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -176,19 +184,19 @@ export function checkBounds(
|
|||
* Validates that a placement is both in bounds and collision-free.
|
||||
* @returns Object with `valid` flag and optional `reason` string
|
||||
*/
|
||||
export function validatePlacement(
|
||||
export function validateShapePlacement(
|
||||
shape: ParsedShape,
|
||||
transform: Transform2D,
|
||||
boardWidth: number,
|
||||
boardHeight: number,
|
||||
occupiedCells: Set<string>
|
||||
occupiedCells: Set<string>,
|
||||
): { valid: true } | { valid: false; reason: string } {
|
||||
if (!checkBounds(shape, transform, boardWidth, boardHeight)) {
|
||||
return { valid: false, reason: '超出边界' };
|
||||
return { valid: false, reason: "超出边界" };
|
||||
}
|
||||
|
||||
if (checkBoardCollision(shape, transform, occupiedCells)) {
|
||||
return { valid: false, reason: '与已有形状重叠' };
|
||||
return { valid: false, reason: "与已有形状重叠" };
|
||||
}
|
||||
|
||||
return { valid: true };
|
||||
|
|
@ -199,10 +207,13 @@ export function validatePlacement(
|
|||
* @param current The current transform
|
||||
* @param degrees Degrees to rotate (typically 90, 180, or 270)
|
||||
*/
|
||||
export function rotateTransform(current: Transform2D, degrees: number): Transform2D {
|
||||
export function rotateTransform(
|
||||
current: Transform2D,
|
||||
degrees: number,
|
||||
): Transform2D {
|
||||
return {
|
||||
...current,
|
||||
rotation: ((current.rotation + degrees) % 360 + 360) % 360,
|
||||
rotation: (((current.rotation + degrees) % 360) + 360) % 360,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue