Skip to main content

Type Alias: MapHelpers

MapHelpers = CommonHelpers & object

Defined in: packages/core/src/passages/interactiveMap/helpers.ts:129

Toolbox handed to the content callback of defineInteractiveMap.

Every helper builds a plain hotspot object, so helper calls and hand-written hotspot literals can be mixed freely in the same array.

Type Declaration

image()

image: (content, options) => MapImageHotspot | SideImageHotspot

Creates an image button hotspot.

Parameters

content

ImageHotspot["content"]

options

HotspotImageOptions

Returns

MapImageHotspot | SideImageHotspot

Example

h.image({ idle: '/chest.png', hover: '/chest-glow.png' }, {
position: { x: 60, y: 70 },
action: openChest,
zoom: '150%'
})

label

label: MapLabelBuilder

Creates a text button hotspot, either standalone (with a position) or as a menu item (without one).

See

MapLabelBuilder

mapImage()

mapImage: (content, options) => MapImage

Creates a decorative, non-interactive image placed on the map.

Parameters

content

MaybeCallable<string>

options

MapImageOptions

Returns

MapImage

Example

h.mapImage('/characters/guard.png', {
position: { x: 42, y: 68 },
alt: 'Castle guard'
})

menu: (items, options) => MapMenu

Creates a grouped menu of label hotspots. Falsy items are dropped.

Parameters

items

ReadonlyArray<Conditional<LabelHotspot>>

options

MapMenuOptions

Returns

MapMenu

Example

h.menu([
h.label('Examine', { action: examine }),
player.hasMagic && h.label('Cast spell', { action: castSpell })
], { position: { x: 50, y: 50 }, direction: 'horizontal' })

Remarks

Each helper takes the hotspot's content first and a single flat options bag second. Fields that live under props in the raw hotspot type are hoisted into that bag, so there is only ever one level to fill in.