asciitorium
Version:
an ASCII CLUI framework
98 lines (97 loc) • 2.65 kB
TypeScript
export interface LegendEntry {
name?: string;
solid: boolean;
showOnMap?: boolean;
entity?: string;
variant?: string;
material: string;
}
export interface LegendArrayEntry {
chars: string[];
name?: string;
solid: boolean;
showOnMap?: boolean;
entity?: string;
variant?: string;
material: string;
}
export interface MaterialLayer {
layer: 'here' | 'near' | 'middle' | 'far';
position: 'left' | 'center' | 'right';
x?: number;
lines: string[];
}
export interface SpriteFrame {
lines: string[][];
meta: {
duration?: number;
sound?: string;
};
}
export interface SpriteDefaults {
duration?: number;
loop?: boolean;
transparent?: string;
}
export interface FontGlyph {
character: string;
lines: string[][];
width: number;
height: number;
}
export interface FontAsset {
glyphs: Map<string, FontGlyph>;
height: number;
}
export interface Asset {
kind: 'map' | 'material' | 'sprite' | 'font';
width: number;
height: number;
data: MapAsset | MaterialAsset | SpriteAsset | FontAsset;
}
export interface MapAsset {
mapData: string[];
legend: Record<string, LegendEntry>;
}
export interface MaterialAsset {
usage: string;
placement?: 'ground' | 'ceiling';
onEnterSound?: string;
onExitSound?: string;
ambientSound?: string;
layers: MaterialLayer[];
}
export interface SpriteAsset {
frames: SpriteFrame[];
defaults: SpriteDefaults;
}
export declare class AssetManager {
private static mapCache;
private static materialCache;
private static spriteCache;
private static fontCache;
static getMap(name: string): Promise<MapAsset>;
static getMaterial(name: string): Promise<MaterialAsset>;
static getSprite(name: string): Promise<SpriteAsset>;
static getFont(name: string): Promise<FontAsset>;
private static calculateMapWidth;
private static calculateMaterialWidth;
private static calculateMaterialHeight;
private static calculateSpriteWidth;
private static calculateSpriteHeight;
private static loadMapAsset;
/**
* Expands legend format from array format to character map
* - Format: { "legend": [ { "chars": [...], ...props } ] }
*/
private static expandLegendFormat;
private static loadMaterialAsset;
private static loadSpriteAsset;
private static loadFontAsset;
private static parseMaterialData;
private static parseLayerSection;
private static parseSpriteData;
private static parseFontData;
private static normalizeBlock;
private static normalizeFontBlock;
}