https://github.com/he4et/cheap-glkote
Abstract JavaScript implementation of GlkOte
https://github.com/he4et/cheap-glkote
Last synced: about 2 months ago
JSON representation
Abstract JavaScript implementation of GlkOte
- Host: GitHub
- URL: https://github.com/he4et/cheap-glkote
- Owner: He4eT
- License: mit
- Created: 2021-02-23T07:26:01.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-21T21:36:22.000Z (about 3 years ago)
- Last Synced: 2025-03-08T09:05:04.294Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 172 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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).
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.
You can specify `targetWindow` by its `id` inside the `onUpdateWindows` handler.
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)