@maximeij/css-brickout
Version:
Classic Brickout Game Engine implemented in Typescript and rendered with CSS. No dependencies.
92 lines (91 loc) • 2.92 kB
TypeScript
import { BoundingBox, Vector } from '../util';
import { Game } from './Game';
import { Responsive } from './Responsive';
export type GameObjectConfig = Vector & {
game: Game;
parent?: Responsive;
elementId?: string;
className?: string;
width?: number;
height?: number;
angle?: number;
startingBonuses?: Array<BonusConfig>;
showTitle?: boolean;
permanent?: boolean;
shape?: 'circle' | 'rectangle';
};
export type PartialGameObjectConfig = Required<Pick<GameObjectConfig, 'game'>> & Partial<GameObjectConfig>;
export type BonusConfig = {
cssClass: string;
duration: number;
effect: (object: GameObject) => (object: GameObject) => void;
};
type StyleKey = 'top' | 'left' | 'transform';
export declare class GameObject {
x: number;
y: number;
width: number;
height: number;
area: number;
private _angle;
bonuses: Array<BonusConfig>;
element: HTMLDivElement;
game: Game;
parent: Responsive;
boundingBox: BoundingBox;
permanent: boolean;
shape: string;
radius: number;
rx: number;
constructor({ game, parent, elementId, className, x, y, width, height, angle, startingBonuses, showTitle, permanent, shape, ...rest }: GameObjectConfig);
get angle(): number;
set angle(angle: number);
updateCircleShape(): void;
updateElementSize(): void;
updateElement(): void;
updateTitle(): void;
applyBonuses(): void;
updatePosition(x?: number, y?: number): void;
updateBoundingBox(): void;
updateElementPosition(): void;
setStyle(style: StyleKey, value: string): void;
setContent(content: string): void;
emitParticles(count: number, classNames?: Array<string>, recycleCondition?: 'animationend' | 'transitionend' | number, inheriteSize?: boolean): Array<HTMLElement>;
destroy(): void;
toString(): string;
}
export type MovementProps = {
angle: number;
speed: number;
};
export type TurnStep = {
movement: MovementProps;
condition?: (mgo: MovingGameObject) => boolean;
};
export type MovingGameObjectConfig = GameObjectConfig & {
movement?: MovementProps | Array<TurnStep>;
syncAngles?: boolean;
};
export declare class MovingGameObject extends GameObject {
private _speed;
private _movementAngle;
turnSteps: Array<TurnStep>;
dx: number;
dy: number;
active: boolean;
syncAngles: boolean;
get fx(): number;
get fy(): number;
get speed(): number;
set speed(speed: number);
get movementAngle(): number;
set movementAngle(angle: number);
get movement(): MovementProps;
set movement(movementConfig: MovingGameObjectConfig['movement']);
constructor({ movement, syncAngles, ...rest }: MovingGameObjectConfig);
updatePosition(x?: number, y?: number, fraction?: number): void;
setD(): void;
processFrame(frameFraction?: number): void;
toString(): string;
}
export {};