@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
73 lines (72 loc) • 3.55 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { CameraNodeType } from "../../poly/NodeContext";
import { registerMapboxCamera } from "../../../core/thirdParty/Mapbox/registerMapboxCamera";
import { MapboxPerspectiveCamera } from "../../../core/thirdParty/Mapbox/MapboxPerspectiveCamera";
import { CameraAttribute } from "../../../core/camera/CoreCamera";
import { ThreejsCoreObject } from "../../../core/geometry/modules/three/ThreejsCoreObject";
import { MapboxCameraAttribute } from "../../../core/thirdParty/Mapbox/MapboxCameraAttribute";
import mapboxgl from "mapbox-gl";
import { Poly } from "../../Poly";
import { MAPBOX_TOKEN_MISSING_ERROR_MESSAGE } from "../../poly/thirdParty/Mapbox";
const _MapboxCameraSopOperation = class extends BaseSopOperation {
static type() {
return CameraNodeType.MAPBOX;
}
async cook(inputCoreGroups, params) {
var _a;
const camera = _MapboxCameraSopOperation.createCamera(this._node);
camera.name = params.name || CameraNodeType.MAPBOX;
const token = await Poly.thirdParty.mapbox().token();
if (token) {
mapboxgl.accessToken = token;
} else {
(_a = this._node) == null ? void 0 : _a.states.error.set(MAPBOX_TOKEN_MISSING_ERROR_MESSAGE);
}
_MapboxCameraSopOperation.setCameraAttributes(camera, params);
const objects = [camera];
return this.createCoreGroupFromObjects(objects);
}
static createCamera(nodeGenerator) {
const camera = new MapboxPerspectiveCamera();
if (nodeGenerator) {
ThreejsCoreObject.addAttribute(camera, CameraAttribute.NODE_ID, nodeGenerator.graphNodeId());
}
return camera;
}
static setCameraAttributes(camera, params) {
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.STYLE, params.style);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.LONGITUDE, params.longitude);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.LATITUDE, params.latitude);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.ZOOM, params.zoom);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.MIN_ZOOM, params.minZoom);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.MAX_ZOOM, params.maxZoom);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.PITCH, params.pitch);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.BEARING, params.bearing);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.ALLOW_DRAG_ROTATE, params.allowDragRotate);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.ADD_ZOOM_CONTROL, params.addZoomControl);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.LAYER_BUILDINGS, params.tlayerBuildings);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.LAYER_3D, params.tlayer3D);
ThreejsCoreObject.addAttribute(camera, MapboxCameraAttribute.LAYER_SKY, params.tlayerSky);
}
};
export let MapboxCameraSopOperation = _MapboxCameraSopOperation;
MapboxCameraSopOperation.DEFAULT_PARAMS = {
style: "mapbox://styles/mapbox/dark-v10",
longitude: -0.07956,
latitude: 51.5146,
zoom: 15.55,
minZoom: 0,
maxZoom: 24,
pitch: 60,
bearing: 60.373613,
allowDragRotate: true,
addZoomControl: true,
tlayerBuildings: false,
tlayer3D: false,
tlayerSky: false,
name: CameraNodeType.MAPBOX
};
MapboxCameraSopOperation.INPUT_CLONED_STATE = InputCloneMode.NEVER;
MapboxCameraSopOperation.onRegister = registerMapboxCamera;