UNPKG

puzzlescript

Version:

Play PuzzleScript games in your terminal!

142 lines (141 loc) 3.93 kB
import { Optional, RULE_DIRECTION } from '..'; import { CollisionLayer } from '../models/collisionLayer'; import { GameData } from '../models/game'; import { Dimension } from '../models/metadata'; import * as ast from './astTypes'; declare type ColorId = string; declare type SpriteId = string; declare type TileId = string; declare type CollisionId = string; declare type BracketId = string; declare type NeighborId = string; declare type TileWithModifierId = string; declare type CommandId = string; declare type RuleId = string; declare type SoundId = string; interface ISourceNode { _sourceOffset: number; } interface IGraphSprite extends ISourceNode { name: string; pixels: Array<Array<Optional<ColorId>>>; collisionLayer: CollisionId; } declare enum TILE_TYPE { OR = "OR", AND = "AND", SIMPLE = "SIMPLE", SPRITE = "SPRITE" } declare type GraphTile = ISourceNode & ({ type: TILE_TYPE.OR; name: string; sprites: SpriteId[]; collisionLayers: CollisionId[]; } | { type: TILE_TYPE.AND; name: string; sprites: SpriteId[]; collisionLayers: CollisionId[]; } | { type: TILE_TYPE.SIMPLE; name: string; sprite: SpriteId; collisionLayers: CollisionId[]; } | { type: TILE_TYPE.SPRITE; name: string; sprite: SpriteId; collisionLayer: CollisionId; }); interface IGraphGameMetadata { author: Optional<string>; homepage: Optional<string>; youtube: Optional<string>; zoomscreen: Optional<Dimension>; flickscreen: Optional<Dimension>; colorPalette: Optional<string>; backgroundColor: Optional<ColorId>; textColor: Optional<ColorId>; realtimeInterval: Optional<number>; keyRepeatInterval: Optional<number>; againInterval: Optional<number>; noAction: boolean; noUndo: boolean; runRulesOnLevelStart: Optional<string>; noRepeatAction: boolean; throttleMovement: boolean; noRestart: boolean; requirePlayerMovement: boolean; verboseLogging: boolean; } export default class Serializer { static fromJson(source: IGraphJson, code: string): GameData; private readonly game; private readonly colorsMap; private readonly spritesMap; private readonly soundMap; private readonly collisionLayerMap; private readonly conditionsMap; private readonly neighborsMap; private readonly tileWithModifierMap; private readonly tileMap; private readonly ruleMap; private readonly commandMap; private readonly winConditions; private orderedRules; private levels; constructor(game: GameData); buildCollisionLayer(item: CollisionLayer): string; metadataToJson(): IGraphGameMetadata; toJson(): IGraphJson; private buildLevel; private recBuildRule; private buildCommand; private buildConditionBracket; private buildNeighbor; private buildTileWithModifier; private buildTile; private buildSprite; private buildColor; private buildSound; } export interface IGraphJson { version: number; title: string; metadata: IGraphGameMetadata; colors: { [key: string]: string; }; sounds: { [key: string]: ast.SoundItem<string>; }; collisionLayers: { [key: string]: ISourceNode; }; commands: { [key: string]: ast.Command<SoundId>; }; sprites: { [key: string]: IGraphSprite; }; tiles: { [key: string]: GraphTile; }; winConditions: Array<ast.WinCondition<TileId>>; tilesWithModifiers: { [key: string]: ast.TileWithModifier<RULE_DIRECTION, TileId>; }; neighbors: { [key: string]: ast.Neighbor<TileWithModifierId>; }; brackets: { [key: string]: ast.Bracket<NeighborId>; }; ruleDefinitions: { [key: string]: ast.Rule<RuleId, RuleId, BracketId, CommandId>; }; rules: RuleId[]; levels: Array<ast.Level<TileId>>; } export {};