UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 2.74 kB
import{createWayfinding as g}from"@expofp/wayfinding";import{fpGeo as L}from"../data/fpGeo";import{createImageDef as _,createLineDef as A,getRotation as h,rectToRenderer as W}from"../renderer";import{pickDefaultScene as p}from"../renderer/engine-core/defs";import{createCanvasIconProvider as w,createFloorContext as I,createGraphDataSource as P}from"./adapters";import{bindMobxReactions as k}from"./bindMobxReactions";import{createKioskHandler as x}from"./handlers/kioskHandler";import{createYahHandler as M}from"./handlers/yahHandler";import{WF_CURRENT_POSITION_LAYER_NAME as N,WF_LINES_ANIMATED_LAYER_NAME as C,WF_LINES_LAYER_NAME as T,WF_POINTS_LAYER_NAME as b,WF_TRAIL_LAYER_NAME as D}from"./layers";let o=null;export function isWayfindingReady(){return o!==null}function F(){if(!o)throw new Error("Wayfinding is not initialized \u2014 call createWayfinding() first.");return o}export function buildRoute(r,t,a){return F().wayfinding.buildRoute(r,t,a)}export function createWayfinding(r,t){const a=P(),y=w({iconMap:t.fp.icons,pixelRatio:devicePixelRatio}),s=I(t.layerStore,t.routeStore),c={points:b,trail:D,lines:T,linesAnimated:C,currentPosition:N},n=g({dataSource:a,renderer:{createImageDef:_,createLineDef:A,getRotation:h,rectToRenderer:W,getScale:()=>r.scale,getLayers:()=>{const e=r.scene;if(!e)throw new Error("renderer: rendererService.scene is null \u2014 start RendererService first");return e.rootLayer.children},update:(...e)=>r.update(...e)},iconProvider:y,floorContext:s,layers:c,gpsConfig:L?.properties?.config,onTransitionClick:e=>{e.role==="exit"&&t.layerStore.updateVisibility(e.targetLayer,!0)},onRouteUpdate:(e,u)=>{t.routeStore.updateRoute([...e]),u.isEmpty()||(t.uiState.moveToRect=u)},onRouteDistance:e=>t.routeStore.updateRouteDistance(e)}),R=x({wayfinding:n,kioskIconMap:t.fp.icons,layer:c.points}),m=M({wayfinding:n,iconMap:t.fp.icons,pixelRatio:devicePixelRatio,floorContext:s,layer:c.points}),S=k({wayfinding:n,kioskHandler:R,yahHandler:m,stores:{routeStore:t.routeStore,uiState:t.uiState,layerStore:t.layerStore}}),i=r.renderer;if(!i)throw new Error("renderer: rendererService.renderer is null \u2014 start RendererService first");const v=r.onPtScale("wayfinding",e=>{n.applyScale(e)}),E=r.onRoll("wayfinding",e=>{n.applyRoll(e)}),l=e=>n.handleClick(p(e.data).defs),d=e=>{i.canvas.style.cursor=n.handleHover(p(e.data).defs)?"pointer":""};i.events.addEventListener("pointer:click",l),i.events.addEventListener("pointer:move",d),t.routeStore.showAccessible=a.getLines().some(e=>e.unaccessible);const f={wayfinding:n};return o=f,n.flush(),()=>{i.events.removeEventListener("pointer:click",l),i.events.removeEventListener("pointer:move",d),o===f&&(o=null,v(),E(),t.routeStore.showAccessible=!1),S(),n.destroy()}}