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
[](https://greenkeeper.io/)
2016-08-14 21:00:10 -07:00
[](https://travis-ci.org/FullScreenShenanigans/MenuGraphr)
[](http://badge.fury.io/js/menugraphr)
2016-01-09 16:45:48 -08:00
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
2018-03-25 19:13:04 -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" , { /* ... */ });
2018-03-25 19:13:04 -07:00
```
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:13:04 -07:00
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" );
```
2018-03-25 19:13:04 -07:00
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}} -->