import { Optional } from '..'; import { WIN_QUALIFIER } from '../models/winCondition'; import { DEBUG_FLAG, RULE_DIRECTION } from '../util'; export declare enum RULE_MODIFIER { RANDOM = "RANDOM", UP = "UP", DOWN = "DOWN", LEFT = "LEFT", RIGHT = "RIGHT", VERTICAL = "VERTICAL", HORIZONTAL = "HORIZONTAL", ORTHOGONAL = "ORTHOGONAL", PERPENDICULAR = "PERPENDICULAR", PARALLEL = "PARALLEL", MOVING = "MOVING", LATE = "LATE", RIGID = "RIGID" } export declare enum TILE_MODIFIER { NO = "NO", LEFT = "LEFT", RIGHT = "RIGHT", UP = "UP", DOWN = "DOWN", RANDOMDIR = "RANDOMDIR", RANDOM = "RANDOM", STATIONARY = "STATIONARY", MOVING = "MOVING", ACTION = "ACTION", VERTICAL = "VERTICAL", HORIZONTAL = "HORIZONTAL", PERPENDICULAR = "PERPENDICULAR", PARALLEL = "PARALLEL", ORTHOGONAL = "ORTHOGONAL", ARROW_ANY = "ARROW_ANY" } export declare enum SOUND_WHEN { RESTART = "RESTART", UNDO = "UNDO", TITLESCREEN = "TITLESCREEN", STARTGAME = "STARTGAME", STARTLEVEL = "STARTLEVEL", ENDLEVEL = "ENDLEVEL", ENDGAME = "ENDGAME", SHOWMESSAGE = "SHOWMESSAGE", CLOSEMESSAGE = "CLOSEMESSAGE" } export declare enum SOUND_SPRITE_DIRECTION { UP = "UP", DOWN = "DOWN", LEFT = "LEFT", RIGHT = "RIGHT", HORIZONTAL = "HORIZONTAL", VERTICAL = "VERTICAL" } export declare enum SOUND_SPRITE_EVENT { CREATE = "CREATE", DESTROY = "DESTROY", CANTMOVE = "CANTMOVE" } export interface IASTNode { _sourceOffset: number; } export declare enum COLOR_TYPE { HEX8 = "HEX8", HEX6 = "HEX6", NAME = "NAME" } export declare type IColor = IASTNode & ({ type: COLOR_TYPE.HEX8; value: string; } | { type: COLOR_TYPE.HEX6; value: string; } | { type: COLOR_TYPE.NAME; value: string; }); export declare enum SPRITE_TYPE { NO_PIXELS = "NO_PIXELS", WITH_PIXELS = "WITH_PIXELS" } export declare type Sprite = IASTNode & { name: string; mapChar: Optional; colors: IColor[]; } & ({ type: SPRITE_TYPE.NO_PIXELS; } | { type: SPRITE_TYPE.WITH_PIXELS; pixels: Pixel[][]; }); export declare enum TILE_TYPE { SIMPLE = "LEGEND_ITEM_SIMPLE", OR = "LEGEND_ITEM_OR", AND = "LEGEND_ITEM_AND" } export declare type LegendItem = IASTNode & { name: string; } & ({ type: TILE_TYPE.SIMPLE; tile: TileRef; } | { type: TILE_TYPE.OR; tiles: TileRef[]; } | { type: TILE_TYPE.AND; tiles: TileRef[]; }); export declare enum SOUND_TYPE { WHEN = "SOUND_WHEN", SFX = "SOUND_SFX", SPRITE_DIRECTION = "SOUND_SPRITE_DIRECTION", SPRITE_MOVE = "SOUND_SPRITE_MOVE", SPRITE_EVENT = "SOUND_SPRITE_EVENT" } export interface SfxSoundItem { type: SOUND_TYPE.SFX; soundEffect: string; } export interface Soundish { soundCode: number; } export declare type SoundItem = IASTNode & Soundish & ({ type: SOUND_TYPE.WHEN; when: SOUND_WHEN; } | { type: SOUND_TYPE.SPRITE_DIRECTION; sprite: TileRef; spriteDirection: SOUND_SPRITE_DIRECTION; } | { type: SOUND_TYPE.SPRITE_MOVE; sprite: TileRef; } | { type: SOUND_TYPE.SPRITE_EVENT; sprite: TileRef; spriteEvent: SOUND_SPRITE_EVENT; } | SfxSoundItem); export declare type CollisionLayer = IASTNode & { type: 'COLLISION_LAYER'; tiles: TileRef[]; }; export declare type Debuggable = IASTNode & { debugFlag: Optional; }; export declare enum RULE_TYPE { GROUP = "RULE_GROUP", LOOP = "RULE_LOOP", SIMPLE = "RULE_SIMPLE" } export declare type Rule = RuleGroup | RuleLoop | SimpleRule; export declare type RuleGroup = Debuggable & { type: RULE_TYPE.GROUP; rules: SimpleRuleRef[]; isRandom: boolean; }; export declare type RuleLoop = Debuggable & { type: RULE_TYPE.LOOP; rules: RuleGroupRef[]; }; export declare type SimpleRule = Debuggable & { type: RULE_TYPE.SIMPLE; conditions: BracketRef[]; actions: BracketRef[]; commands: CommandRef[]; directions: RULE_MODIFIER[]; isRandom: Optional; isLate: boolean; isRigid: boolean; }; export declare enum BRACKET_TYPE { SIMPLE = "BRACKET_SIMPLE", ELLIPSIS = "BRACKET_ELLIPSIS" } export declare type Bracket = Debuggable & ({ type: BRACKET_TYPE.SIMPLE; direction: RULE_DIRECTION; neighbors: NeighborRef[]; } | { type: BRACKET_TYPE.ELLIPSIS; direction: RULE_DIRECTION; beforeNeighbors: NeighborRef[]; afterNeighbors: NeighborRef[]; }); export declare type Neighbor = Debuggable & { tileWithModifiers: TileWithModifierRef[]; }; export declare type TileWithModifier = Debuggable & { direction: Optional; isNegated: boolean; isRandom: boolean; tile: TileRef; }; export declare enum COMMAND_TYPE { MESSAGE = "COMMAND_MESSAGE", AGAIN = "COMMAND_AGAIN", CANCEL = "COMMAND_CANCEL", CHECKPOINT = "COMMAND_CHECKPOINT", RESTART = "COMMAND_RESTART", WIN = "COMMAND_WIN", SFX = "COMMAND_SFX" } export declare type Command = MessageCommand | AgainCommand | CancelCommand | CheckpointCommand | RestartCommand | WinCommand | SFXCommand; export declare type MessageCommand = IASTNode & { type: COMMAND_TYPE.MESSAGE; message: string; }; export declare type AgainCommand = IASTNode & { type: COMMAND_TYPE.AGAIN; }; export declare type CancelCommand = IASTNode & { type: COMMAND_TYPE.CANCEL; }; export declare type CheckpointCommand = IASTNode & { type: COMMAND_TYPE.CHECKPOINT; }; export declare type RestartCommand = IASTNode & { type: COMMAND_TYPE.RESTART; }; export declare type WinCommand = IASTNode & { type: COMMAND_TYPE.WIN; }; export declare type SFXCommand = IASTNode & { type: COMMAND_TYPE.SFX; sound: SoundRef; }; export declare enum WIN_CONDITION_TYPE { SIMPLE = "WINCONDITION_SIMPLE", ON = "WINCONDITION_ON" } export declare type WinCondition = IASTNode & { qualifier: WIN_QUALIFIER; tile: TileRef; } & ({ type: WIN_CONDITION_TYPE.SIMPLE; } | { type: WIN_CONDITION_TYPE.ON; onTile: TileRef; }); export declare enum LEVEL_TYPE { MESSAGE = "LEVEL_MESSAGE", MAP = "LEVEL_MAP" } export declare type Level = IASTNode & ({ type: LEVEL_TYPE.MESSAGE; message: string; } | { type: LEVEL_TYPE.MAP; cells: TileRef[][]; }); export interface IDimension { type: 'WIDTH_AND_HEIGHT'; width: number; height: number; } declare type B1 = Bracket>>; export interface IASTGame { title: string; metadata: Array<{ type: string; value: string | boolean | IDimension | IColor; }>; sprites: Array>; legendItems: Array>; collisionLayers: Array>; sounds: Array>; rules: Array, Command>>, SimpleRule, Command>, B1, Command>>; winConditions: Array>; levels: Array>; } export {};