0
0
Fork 0
mirror of https://gitlab.com/Oreolek/salet-module.git synced 2024-04-26 06:09:43 +03:00

TypeScript definitions by @hogart

Also see here: https://gitlab.com/hogart/salet-ts
This commit is contained in:
Alexander Yakovlev 2017-07-31 21:50:15 +07:00
parent 153199ee46
commit f39ad09eba
2 changed files with 261 additions and 1 deletions

View file

@ -16,13 +16,13 @@ A copy of the MIT license is found in the LICENSE file.
## List of contributors
The list is alphabetical.
Hopefully it will grow.
* Alexander Yakovlev - Salet's original author
* Andrew Plotkin
* Bruno Dias - Raconteur's original author
* David Eyk
* Dmitry Eliseev
* Konstantin Kitmanov
* Ian Millington - Undum's original author
* Ivan Narozhny
* Juhana Leinonen

260
typings/salet/index.d.ts vendored Normal file
View file

@ -0,0 +1,260 @@
type TStringLike = string | (() => string);
/** Markdown string */
type TMDString = string;
type TRoomName = string;
type TUnitName = string;
type TRoomTag = string;
type TActionName = string;
type TTimerName = string;
type TLink = TRoomName | TActionName | string;
interface Random {
modulo: number;
randn(): number;
randf(): number;
rand(n: number): number;
randomElement(array: any[]): any;
randRange(min: number, max: number): number;
dice(n: number, dx: number, plus: number): number;
diceString(diceDescription: string): number;
odds(value: number, target: number, n: number): number;
seed(n: number): void;
getSeed(): number;
}
interface Salet {
character: Character;
game_id: string;
game_version: string;
autosave: boolean;
rnd: Random;
time: number;
/** epoch */
startTime: number;
linkRe: RegExp;
current: TRoomName;
interactive: boolean;
linkStack: TLink[];
progress: any; // TODO
view: SaletView;
start: TRoomName;
rooms: any; // TODO
timers: any; // TODO
init() : void;
enter(from: TRoomName, to: TRoomName): void;
afterEnter(from: TRoomName, to: TRoomName): void;
beforeAction(name: TRoomName, action: TActionName): boolean | void;
afterAction(name: TRoomName, action: TActionName): boolean | void;
exit(from: TRoomName, to: TRoomName): void;
/**
* Collects rooms by given tag and filters it by size. Gets called for implicit choice autolists
* @param tag
* @param length
*/
getSituationIdChoices(tag: TRoomTag, length: number): SaletRoom[];
getCurrentRoom(): SaletRoom;
/** synonym for getCurrentRoom */
here(): SaletRoom;
getSaveId(): string;
/**
* Saves click timestamp, adds turn to history
*/
processClick(link: TLink): void;
/**
* Adds link to execution stack, calls processOneLink, scrolls to new text
*/
processLink(link: TLink): void;
/**
* Executes transition
*/
processOneLink(link: TLink): void;
/**
* Go to room which was visited `n` turns ago
* n = 1 is current room
* @param [n=2]
*/
goBack(n: number): void;
/**
*
* @param id
* @param [force=false]
*/
doTransitionTo(id: TRoomName, force: boolean): void;
/**
* If `force` is false, shows prompt if user sure to erase save.
* Silently erases save otherwise
* @param [force = false]
*/
eraseSave(force: boolean): void;
getRoomsTagged(tag: TRoomTag): SaletRoom[];
saveGame(): void;
loadGame(saveData: any): void;
/**
* Initializes Salet and starts game. Calls `init` and loads game if there's save and `autoload`
* is true.
*/
beginGame(): void;
/** synonym for `processClick` */
goTo(id: TRoomName): void;
// TODO
isVisited(name: TRoomName): boolean;
/**
*
* @param name
* @param action
* @param [repeat=false]
* @param [step=1]
*/
addTimer(name: TTimerName, action: TStringLike, repeat: boolean, step: number): void;
dropTimer(name: TTimerName): void;
resetTimer(name: TTimerName): void;
/** system handler, called every turn */
checkTimer(): void;
}
interface Character {
inventory: SaletUnit[];
take(unit: SaletUnit): void;
drop(unitName: TUnitName): boolean;
has(unitName: TUnitName): boolean;
/** Executes `inv` of that unit */
inv(unitName: TUnitName): void;
/** Generates unit href */
listinv(unitName: TUnitName): string;
}
interface SaletUnitProps {
name: TUnitName;
order?: number;
visible?: boolean;
takeable?: boolean;
display?: TStringLike;
take?: TStringLike;
act?: TStringLike;
dsc?: TStringLike;
inv?: TStringLike;
location?: TRoomName;
}
interface SaletUnit extends SaletUnitProps {
put(location: TRoomName): void;
/**
*
* @param [location='@location']
*/
delete(location: TRoomName): void;
}
interface SaletRoomProps {
name: TRoomName;
visited?: number;
title?: string;
units?: SaletUnit[];
canView?: boolean;
canChoose?: boolean;
priority?: number;
displayOrder?: number;
canSave?: boolean;
ways?: TRoomName[];
choices?: Array<TRoomName | TRoomTag>;
maxChoices?: number;
tags?: TRoomTag[];
optionText?: TMDString;
dsc?: TMDString;
extendSection?: boolean;
clear?: boolean;
writers?: string[];
}
interface SaletRoom extends SaletRoomProps {
canExit(id: TRoomName): boolean;
exit(to: TRoomName): void;
enter(from: TRoomName): void;
/**
*
* @param from
* @param [forceExit=true]
*/
entering(from: TRoomName, forceExit?: boolean): void;
take(unit: SaletUnit): void;
drop(unit: SaletUnit): void;
act(linkTarget: TLink): void;
register(): void;
link(id: TRoomName): void;
bilink(id: TRoomName): void;
}
interface SaletView {
init(): void;
disableSaving(): void;
enableSaving(): void;
disableErasing(): void;
enableErasing(): void;
enableLoading(): void;
enableLoading(): void;
/** Scrolls to `distance` pixels from bottom in 500ms */
scrollTopTo(distance: number): void;
/** Scrolls to `distance` pixels from page bottom in 500ms */
scrollBottomTo(distance: number): void;
/** Scrolls page bottom in 500ms */
scrollToBottom(): void;
/**
* Clears given block
* @param [selector='#content']
*/
clearContent(selector?: string): void;
/** Transforms argument into text. Calls it if it's function, for jQuery object gets `.html()` */
prepareContent(content: any): string;
/** Prepares content and appends it to given element
* @param content
* @param [selector='#content']
*/
append(content: any, selector: string): void;
/** Synonym for append
*
* @param content
* @param [selector='#content']
*/
write(content: any, selector: string): void;
/** Same as append, but replaces element's content
* @param content
* @param [selector='#content']
*/
replace(content: any, selector: string): void;
}
interface Window {
salet: Salet;
room: (name: TRoomName, props: SaletRoomProps) => SaletRoom;
unit: (name: TUnitName, props: SaletUnitProps) => SaletUnit;
}