mirror of
https://github.com/He4eT/cheap-glkote.git
synced 2026-05-04 16:37:23 +00:00
108 lines
2.7 KiB
Markdown
108 lines
2.7 KiB
Markdown
# cheap-glkote
|
|
[](https://www.npmjs.org/package/cheap-glkote)
|
|
|
|
This is an abstract implementation of the [GlkOte](https://github.com/erkyrath/glkote) library interface designed to be used with [Emglken](https://github.com/curiousdannii/emglken).<br>
|
|
Can be used in Node.js or in a web browser.
|
|
|
|
|
|
## Usage
|
|
|
|
This repository includes examples of [stdio interface implementation](https://github.com/He4eT/cheap-glkote/blob/master/bin/stdio.js) and [integration with Emglken](https://github.com/He4eT/cheap-glkote/blob/master/bin/player.stdio.js).
|
|
|
|
### Initialization
|
|
```js
|
|
const { Dialog, GlkOte, send } =
|
|
CheapGlkOte(handlers [, { loggers, size }])
|
|
```
|
|
|
|
### Input
|
|
```js
|
|
send('open door', inputType, targetWindow)
|
|
```
|
|
You can obtain `inputType` and `id` of `targetWindow` inside the `onUpdateInputs` handler.<br>
|
|
You can specify `targetWindow` by its `id` inside the `onUpdateWindows` handler.<br>
|
|
As I know, `inputType` can be `line` or `char`.
|
|
|
|
### Output and lifecycle
|
|
```js
|
|
const handlers = {
|
|
onInit: () => {
|
|
/**
|
|
* It's time to initialize the user interface.
|
|
*/
|
|
},
|
|
onUpdateWindows: windows => {
|
|
/**
|
|
* Game wants to change the number of windows.
|
|
*/
|
|
},
|
|
onUpdateInputs: data => {
|
|
/**
|
|
* Game wants to change input type.
|
|
* 'data' is a list with info about
|
|
* the target window and the input type.
|
|
*/
|
|
},
|
|
onUpdateContent: messages => {
|
|
/**
|
|
* Process the game output here.
|
|
*/
|
|
},
|
|
onDisable: () => {
|
|
/**
|
|
* Game wants to disable user interface.
|
|
*/
|
|
},
|
|
onFileNameRequest: (tosave, usage, gameid, callback) => {
|
|
/**
|
|
* Game wants the user to specify the file name.
|
|
* This name will be passed as an argument
|
|
* to the "onFileRead" and "onFileWrite" functions.
|
|
*/
|
|
callback({ filename: 'filename', usage })
|
|
},
|
|
onFileRead: filename => {
|
|
/**
|
|
* Game wants to read the contents from the file.
|
|
*/
|
|
return 'content'
|
|
},
|
|
onFileWrite: (filename, content) => {
|
|
/**
|
|
* Game wants to write the contents in the file.
|
|
*/
|
|
},
|
|
onExit: () => {
|
|
/**
|
|
* Game is over.
|
|
*/
|
|
}
|
|
}
|
|
```
|
|
### Logging
|
|
By default, the `console` is used for logging, but you can pass custom loggers to the constructor.
|
|
|
|
Default loggers:
|
|
```js
|
|
const defaultLoggers = {
|
|
log: console.log,
|
|
warning: console.warn,
|
|
error: console.error,
|
|
}
|
|
```
|
|
|
|
### Size
|
|
Default sizes:
|
|
```js
|
|
const defaultSize = {
|
|
width: 80,
|
|
height: 25,
|
|
}
|
|
```
|
|
|
|
## Inspired and powered by
|
|
|
|
- [glkote-term](https://github.com/curiousdannii/glkote-term)
|
|
- [GlkOte](https://github.com/erkyrath/glkote)
|
|
- [Cheapglk](https://github.com/erkyrath/cheapglk)
|
|
- [Emglken](https://github.com/curiousdannii/emglken)
|