Files

197 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

2017-05-08 02:19:59 -07:00
<!-- {{Top}} -->
2016-08-14 21:00:10 -07:00
# MenuGraphr
2017-12-28 21:27:06 -08:00
[![Greenkeeper badge](https://badges.greenkeeper.io/FullScreenShenanigans/MenuGraphr.svg)](https://greenkeeper.io/)
2016-08-14 21:00:10 -07:00
[![Build Status](https://travis-ci.org/FullScreenShenanigans/MenuGraphr.svg?branch=master)](https://travis-ci.org/FullScreenShenanigans/MenuGraphr)
[![NPM version](https://badge.fury.io/js/menugraphr.svg)](http://badge.fury.io/js/menugraphr)
2016-08-14 21:00:10 -07:00
In-game menu and dialog creation and management for GameStartr.
2017-05-08 02:19:59 -07:00
<!-- {{/Top}} -->
2016-08-14 21:00:10 -07:00
MenuGraphr automates creating in-game menus containing paragraphs or scrolling lists of text.
Each menu has a unique name by which its globally identified as well as a rectangular position relative to its parent.
Menus can be positioned as children of the root game's MapScreenr viewport or of each other.
## Usage
MenuGraphr instances take in, at the very least, a GameStartr game to create Things within.
The game should have have a `"Menu"` Thing defined.
### Constructor
```typescript
const gameStarter = new GameStartr({ ... });
const menuGrapher = new MenuGraphr({ gameStarter });
```
#### `gameStarter`
The parent GameStartr managing Things.
This is the only mandatory settings field.
#### `aliases`
Alternate Thing titles for characters, such as `" "` for `"Space"`.
Normally, Things used as menu text have titles equal to `"Text"` plus the name of the character.
These will replace the name of the character in that computation.
```typescript
// Uses "TextSpace" instead of "Text "
new MenuGraphr({
aliases: {
" ": "Space",
},
gameStarter,
});
```
#### `sounds`
Sounds that should be played for certain menu actions.
So far, this is only `onInteraction`, which is whenever a menu is interacted with
(usually off the A or B buttons being pressed).
These are played with the GameStartr's AudioPlayr.
```typescript
new MenuGraphr({
gameStarter,
sounds: {
onInteraction: "Bloop",
}
});
```
#### `replacements`
Programmatic replacements for deliniated words.
Allows texts in menus to contain dynamic values using predetermined strings.
These can be hardcoded strings or functions to generate them.
```typescript
new MenuGraphr({
gameStarter,
replacements: {
"DYNAMIC": () => gameStarter.itemsHolder.get("dynamic-value"),
"STATIC": "My name here!",
},
});
```
Menu dialogs and lists will directly replace the values of replacements between the menu's `replacerKey` (see below):
```typescript
menuGrapher.addMenuDialog("GeneralText", [
// Inserts the value of gameStarter.itemsHolder.get("dynamic-value")
"Dynamic value: %%%%%%%DYNAMIC%%%%%%%",
// Inserts "My name here!"
"Static value: %%%%%%%STATIC%%%%%%%",
]);
```
#### `replacerKey`
Separator for words to replace using `replacements`.
Defaults to `"%%%%%%%"`.
```typescript
new MenuGraphr({
gameStarter,
replacements: {
"STATIC": "My name here!",
},
replacerKey: "|",
});
```
```typescript
menuGrapher.addMenuDialog("GeneralText", [
// Inserts "My name here!"
"Static value: |STATIC|",
]);
```
#### `schemas`
Known menu schemas, keyed by name.
Those properties are defined on `IMenuSchema`.
See [`docs/schemas.md`](./docs/schemas.md).
```typescript
new MenuGraphr({
gameStarter,
schemas: {
GeneralText: {
size: {
height: 96,
width: 320,
},
},
},
});
```
### `createMenu`
Menus are created with `createMenu`, which takes in the string name of the menu and any additional properties.
```typescript
2018-03-25 19:29:22 -07:00
menuGrapher.createMenu("GeneralText", { /* ... */ });
```
Each menu is identified by a unique string name.
When `createMenu` creates a menu, any existing menu under that name is disposed of.
### `setActiveMenu`
2018-03-25 19:29:22 -07:00
Sets a menu to appear to have user focus.
For dialogs, this allows the user to "A" through them.
For lists, this visualizes the selected index with an "Arrow" Thing.
2018-03-25 19:29:22 -07:00
Only one menu may be active at any time.
There does not need to be an active menu, and menus are not active by default.
```typescript
menuGrapher.createMenu("GeneralText");
menuGrapher.addMenuDialog("GeneralText", "Hello world!");
menuGrapher.setActiveMenu("GeneralText");
```
2017-05-08 18:11:31 -07:00
<!-- {{Development}} -->
## Development
2016-08-14 21:00:10 -07:00
2018-01-11 23:54:19 -08:00
After [forking the repo from GitHub](https://help.github.com/articles/fork-a-repo/):
2017-12-28 20:24:21 -08:00
```
2018-01-11 23:54:19 -08:00
git clone https://github.com/<your-name-here>/MenuGraphr
2017-12-28 20:24:21 -08:00
cd MenuGraphr
2018-01-11 23:54:19 -08:00
npm install
2017-12-28 20:24:21 -08:00
npm run setup
npm run verify
```
2016-08-14 21:00:10 -07:00
2017-12-28 20:24:21 -08:00
* `npm run setup` creates a few auto-generated setup files locally.
* `npm run verify` builds, lints, and runs tests.
2017-05-08 02:19:59 -07:00
2017-12-28 20:24:21 -08:00
### Building
```shell
npm run watch
```
Source files are written under `src/` in TypeScript and compile in-place to JavaScript files.
`npm run watch` will directly run the TypeScript compiler on source files in watch mode.
Use it in the background while developing to keep the compiled files up-to-date.
### Running Tests
```shell
npm run test
```
Test files are alongside source files under `src/` and named `*.test.ts?`.
2018-03-04 18:58:38 -08:00
Whenever you add, remove, or rename a `*.test.t*` file under `src/`, `watch` will re-run `npm run test:setup` to regenerate the list of static test files in `test/index.html`.
2017-12-28 20:24:21 -08:00
You can open that file in a browser to debug through the tests.
2018-03-04 18:58:38 -08:00
`npm run test:run` will run that setup and execute tests using [Puppeteer](https://github.com/GoogleChrome/puppeteer).
2017-05-08 18:11:31 -07:00
<!-- {{/Development}} -->