@maximeij/css-brickout
Version:
Classic Brickout Game Engine implemented in Typescript and rendered with CSS. No dependencies.
37 lines (36 loc) • 1.62 kB
TypeScript
import { Brick, CompositeBrick, GameObject, Level, MovingGameObject, MovingGameObjectConfig, Paddle } from './';
export type BallConfig = Omit<MovingGameObjectConfig, 'elementId' | 'shape'> & {
idx: number;
radius: number;
damage?: number;
};
export declare class Ball extends MovingGameObject {
destroyed: boolean;
damage: number;
antiJuggling: string | false;
readonly dx: number;
readonly dy: number;
constructor({ idx, radius, movement, damage, ...objConfig }: BallConfig);
setD(): void;
/**
* Detects collisions between this ball and the boundaries, level bricks, and paddle (in that order)
* @param level The level with the bricks and strips
* @param paddle The player's paddle
* @returns true if the position has been updated already
*/
handleLevelCollision(level: Level, paddle: Paddle, frameFraction: number): boolean;
handleBoundaryCollision(): true | undefined;
resolveCollision(object: GameObject, frameFraction?: number): true | undefined;
handleBrickCollision(brick: Brick, frameFraction?: number, composite?: CompositeBrick): true | undefined;
handlePaddleCollision(paddle: Paddle, frameFraction?: number): true | undefined;
isColliding(object: GameObject): boolean;
processFrame(frameFraction?: number, level?: Level, paddle?: Paddle): void;
dispatchCollisionEvent(object?: GameObject): void;
destroy(forReal?: boolean): void;
toString(): string;
}
export type BallDestroyedEvent = CustomEvent<Ball>;
export type BallCollisionEvent = CustomEvent<{
ball: Ball;
object?: GameObject;
}>;