UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

96 lines (95 loc) 3.47 kB
"use strict"; import { TypedSopNode } from "./_Base"; import { MapboxCameraSopOperation } from "../../operations/sop/MapboxCamera"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { CameraNodeType } from "../../poly/NodeContext"; import { registerMapboxCamera } from "../../../core/thirdParty/Mapbox/registerMapboxCamera"; import { MapboxMapsController } from "../../../core/thirdParty/Mapbox/MapboxMapsController"; const DEFAULT = MapboxCameraSopOperation.DEFAULT_PARAMS; class MapboxCameraSopParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); this.style = ParamConfig.STRING(DEFAULT.style); /** @param longitude */ this.longitude = ParamConfig.FLOAT(-0.07956, { range: [-360, 360] }); /** @param latitude */ this.latitude = ParamConfig.FLOAT(51.5146, { range: [-90, 90] }); this.pitch = ParamConfig.FLOAT(DEFAULT.pitch, { range: [0, 85], rangeLocked: [true, true] }); this.bearing = ParamConfig.FLOAT(DEFAULT.bearing, { range: [0, 360] }); this.zoom = ParamConfig.FLOAT(DEFAULT.zoom, { range: [0, 24], rangeLocked: [true, true] }); this.minZoom = ParamConfig.FLOAT(DEFAULT.minZoom, { range: [0, 24], rangeLocked: [true, true] }); this.maxZoom = ParamConfig.FLOAT(DEFAULT.maxZoom, { range: [0, 24], rangeLocked: [true, true] }); // updateParamsFromMap = ParamConfig.BUTTON(null, { // label: 'Set Navigation Params as Default', // callback: (node: BaseNodeType, param: BaseParamType) => { // MapboxCameraSopNode.PARAM_CALLBACK_update_params_from_map(node as MapboxCameraObjNode); // }, // }); this.allowDragRotate = ParamConfig.BOOLEAN(DEFAULT.allowDragRotate); this.addZoomControl = ParamConfig.BOOLEAN(DEFAULT.addZoomControl); this.tlayerBuildings = ParamConfig.BOOLEAN(DEFAULT.tlayerBuildings); this.tlayer3D = ParamConfig.BOOLEAN(DEFAULT.tlayer3D); this.tlayerSky = ParamConfig.BOOLEAN(DEFAULT.tlayerSky); /** @param camera name */ this.name = ParamConfig.STRING("`$OS`"); this.updateFromMap = ParamConfig.BUTTON(null, { callback: (node) => { MapboxCameraSopNode.PARAM_CALLBACK_updateFromMap(node); } }); } } const ParamsConfig = new MapboxCameraSopParamsConfig(); export class MapboxCameraSopNode extends TypedSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return CameraNodeType.MAPBOX; } initializeNode() { this.io.inputs.setCount(0); } async cook(inputCoreGroups) { this._operation = this._operation || new MapboxCameraSopOperation(this._scene, this.states, this); const coreGroup = await this._operation.cook(inputCoreGroups, this.pv); this.setCoreGroup(coreGroup); } static PARAM_CALLBACK_updateFromMap(node) { node._paramCallbackUpdateFromMap(); } async _paramCallbackUpdateFromMap() { const map = await MapboxMapsController.waitForMap(); const lngLat = map.getCenter(); const pitch = map.getPitch(); const bearing = map.getBearing(); const zoom = map.getZoom(); this.scene().batchUpdates(() => { this.p.longitude.set(lngLat.lng); this.p.latitude.set(lngLat.lat); this.p.pitch.set(pitch); this.p.bearing.set(bearing); this.p.zoom.set(zoom); }); } } MapboxCameraSopNode.onRegister = registerMapboxCamera;