world.ts 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,18 @@
1
- import type { vec4 } from "gl-matrix";
2
- import type { vec3 } from "gl-matrix";
3
1
  import type { Viewport } from "../../viewport";
4
- import type { World } from "../../world";
5
- import type { LayerOptions } from "..";
6
- import { type BaseLayer, type Billboard } from "..";
7
- export type BillboardLayer = BaseLayer & Billboard;
8
- export declare const createBillboardLayer: (world: World, billboard?: Partial<Billboard>) => {
2
+ import type { Properties } from "..";
3
+ import { type Billboard } from "..";
4
+ export declare const createBillboardLayer: (gl: WebGL2RenderingContext, properties?: Properties<Partial<Billboard>>) => {
5
+ onClick: ((_: import("../..").Pick) => void) | undefined;
6
+ onRightClick: ((_: import("../..").Pick) => void) | undefined;
7
+ onDoubleClick: ((_: import("../..").Pick) => void) | undefined;
8
+ onDrag: ((_: import("../..").Pick) => void) | undefined;
9
+ onDragFlat: ((_: import("../..").Pick) => void) | undefined;
10
+ onDragStart: ((_: import("../..").Pick) => void) | undefined;
11
+ onDragEnd: ((_: import("../..").Pick) => void) | undefined;
9
12
  render: ({ viewport: { projection, modelView, camera, screen }, depth, index, }: {
10
13
  viewport: Viewport;
11
14
  depth?: boolean | undefined;
12
15
  index?: number | undefined;
13
16
  }) => void;
14
17
  dispose: () => void;
15
- options: Partial<LayerOptions>;
16
- url: string;
17
- position: vec3;
18
- color: vec4;
19
- size: number;
20
- minSizePixels: number | undefined;
21
- maxSizePixels: number | undefined;
22
18
  };
@@ -0,0 +1,22 @@
1
+ import type { Properties } from ".";
2
+ import { type Layer } from ".";
3
+ export declare const createContainer: (children: Layer[]) => {
4
+ children: Layer[];
5
+ dispose: () => void;
6
+ };
7
+ export type DynamicContainerProperties<K> = {
8
+ keys: K[];
9
+ create: (_: K) => Layer;
10
+ };
11
+ export declare const createDynamicContainer: <K>(properties: Properties<DynamicContainerProperties<K>>) => {
12
+ readonly children: Layer[];
13
+ render: () => void;
14
+ dispose: () => void;
15
+ };
16
+ export declare const createRenderLayer: (render: () => void) => {
17
+ render: () => void;
18
+ dispose: () => void;
19
+ };
20
+ export declare const createEmptyLayer: () => {
21
+ dispose: () => void;
22
+ };
@@ -1,41 +1,45 @@
1
1
  import type { quat, vec3, vec4 } from "gl-matrix";
2
2
  import type { Viewport } from "../viewport";
3
- import type { BillboardLayer } from "./billboard";
4
- import type { LineLayer } from "./line";
5
- import type { MeshLayer } from "./mesh";
6
- import type { PolygonLayer } from "./polygon";
7
- import type { TerrainLayer } from "./terrain";
8
3
  export * from "./billboard";
4
+ export * from "./container";
9
5
  export * from "./line";
10
6
  export * from "./mesh";
11
7
  export * from "./polygon";
12
8
  export * from "./terrain";
9
+ import type { Pick } from "../model";
10
+ export type LayerEvents = {
11
+ onClick?: (_: Pick) => void;
12
+ onRightClick?: (_: Pick) => void;
13
+ onDoubleClick?: (_: Pick) => void;
14
+ onDragStart?: (_: Pick) => void;
15
+ onDrag?: (_: Pick) => void;
16
+ onDragFlat?: (_: Pick) => void;
17
+ onDragEnd?: (_: Pick) => void;
18
+ };
13
19
  export type LayerOptions = {
14
20
  pickable: boolean;
15
21
  depth: boolean;
16
22
  polygonOffset: number;
17
- };
23
+ } & LayerEvents;
24
+ export declare const defaultLayerOptions: LayerOptions;
18
25
  export type Terrain = {
19
- options: Partial<LayerOptions>;
20
26
  readonly terrainUrl: string;
21
- readonly imageryUrl: string;
27
+ imageryUrl: string;
22
28
  color: vec4;
23
- };
29
+ } & LayerOptions;
24
30
  export type Line = {
25
- options: Partial<LayerOptions>;
26
31
  points: vec3[][];
27
32
  color: vec4;
28
33
  width: number;
29
34
  minWidthPixels?: number | undefined;
30
35
  maxWidthPixels?: number | undefined;
31
- };
36
+ depthWidthPixels?: number | undefined;
37
+ } & LayerOptions;
32
38
  export type Polygon = {
33
- options: Partial<LayerOptions>;
34
39
  points: vec3[][];
35
40
  color: vec4;
36
- };
41
+ } & LayerOptions;
37
42
  export type Mesh = {
38
- options: Partial<LayerOptions>;
39
43
  vertices: vec3[];
40
44
  indices: vec3[];
41
45
  position: vec3;
@@ -44,22 +48,36 @@ export type Mesh = {
44
48
  size: number;
45
49
  minSizePixels?: number;
46
50
  maxSizePixels?: number;
47
- };
51
+ } & LayerOptions;
48
52
  export type Billboard = {
49
- options: Partial<LayerOptions>;
50
53
  url: string;
51
54
  position: vec3;
52
55
  color: vec4;
53
56
  size: number;
54
57
  minSizePixels?: number;
55
58
  maxSizePixels?: number;
56
- };
57
- export type Layer = TerrainLayer | LineLayer | PolygonLayer | MeshLayer | BillboardLayer;
58
- export type BaseLayer = {
59
- render: (_: {
59
+ } & LayerOptions;
60
+ export type Layer = {
61
+ children?: Layer[];
62
+ render?: (_: {
60
63
  viewport: Viewport;
61
64
  depth?: boolean;
62
65
  index?: number;
63
66
  }) => void;
64
67
  dispose: () => void;
68
+ } & LayerEvents;
69
+ export type Properties<T> = {
70
+ [K in keyof T]: T[K] extends Function | undefined ? T[K] : () => T[K];
71
+ };
72
+ export declare const resolve: <T>(_: Properties<T>) => T;
73
+ export declare const combine: <T extends object>(properties: () => T) => Properties<T>;
74
+ export declare const cache: <T, R>(_value: () => T, f: (_: T) => R) => () => R;
75
+ export declare const createMouseEvents: (properties: Properties<Partial<LayerOptions>>) => {
76
+ onClick: ((_: Pick) => void) | undefined;
77
+ onRightClick: ((_: Pick) => void) | undefined;
78
+ onDoubleClick: ((_: Pick) => void) | undefined;
79
+ onDrag: ((_: Pick) => void) | undefined;
80
+ onDragFlat: ((_: Pick) => void) | undefined;
81
+ onDragStart: ((_: Pick) => void) | undefined;
82
+ onDragEnd: ((_: Pick) => void) | undefined;
65
83
  };
@@ -1,21 +1,18 @@
1
- import type { vec4 } from "gl-matrix";
2
- import type { vec3 } from "gl-matrix";
3
1
  import type { Viewport } from "../../viewport";
4
- import type { World } from "../../world";
5
- import type { LayerOptions } from "../";
6
- import { type BaseLayer, type Line } from "../";
7
- export type LineLayer = BaseLayer & Line;
8
- export declare const createLineLayer: (world: World, line?: Partial<Line>) => {
2
+ import type { Properties } from "../";
3
+ import { type Line } from "../";
4
+ export declare const createLineLayer: (gl: WebGL2RenderingContext, properties?: Properties<Partial<Line>>) => {
5
+ onClick: ((_: import("../..").Pick) => void) | undefined;
6
+ onRightClick: ((_: import("../..").Pick) => void) | undefined;
7
+ onDoubleClick: ((_: import("../..").Pick) => void) | undefined;
8
+ onDrag: ((_: import("../..").Pick) => void) | undefined;
9
+ onDragFlat: ((_: import("../..").Pick) => void) | undefined;
10
+ onDragStart: ((_: import("../..").Pick) => void) | undefined;
11
+ onDragEnd: ((_: import("../..").Pick) => void) | undefined;
9
12
  render: ({ viewport: { projection, modelView, camera, screen }, depth, index, }: {
10
13
  viewport: Viewport;
11
14
  depth?: boolean | undefined;
12
15
  index?: number | undefined;
13
16
  }) => void;
14
17
  dispose: () => void;
15
- options: Partial<LayerOptions>;
16
- points: vec3[][];
17
- color: vec4;
18
- width: number;
19
- minWidthPixels: number | undefined;
20
- maxWidthPixels: number | undefined;
21
18
  };
@@ -1,23 +1,18 @@
1
- import type { quat, vec3, vec4 } from "gl-matrix";
1
+ import type { Properties } from "../../layers";
2
2
  import { type Mesh } from "../../layers";
3
3
  import type { Viewport } from "../../viewport";
4
- import type { World } from "../../world";
5
- import type { BaseLayer, LayerOptions } from "..";
6
- export type MeshLayer = BaseLayer & Mesh;
7
- export declare const createMeshLayer: (world: World, mesh?: Partial<Mesh>) => {
4
+ export declare const createMeshLayer: (gl: WebGL2RenderingContext, properties?: Properties<Partial<Mesh>>) => {
5
+ onClick: ((_: import("../..").Pick) => void) | undefined;
6
+ onRightClick: ((_: import("../..").Pick) => void) | undefined;
7
+ onDoubleClick: ((_: import("../..").Pick) => void) | undefined;
8
+ onDrag: ((_: import("../..").Pick) => void) | undefined;
9
+ onDragFlat: ((_: import("../..").Pick) => void) | undefined;
10
+ onDragStart: ((_: import("../..").Pick) => void) | undefined;
11
+ onDragEnd: ((_: import("../..").Pick) => void) | undefined;
8
12
  render: ({ viewport: { projection, modelView, camera, screen }, depth, index, }: {
9
13
  viewport: Viewport;
10
14
  depth?: boolean | undefined;
11
15
  index?: number | undefined;
12
16
  }) => void;
13
17
  dispose: () => void;
14
- options: Partial<LayerOptions>;
15
- vertices: vec3[];
16
- indices: vec3[];
17
- position: vec3;
18
- orientation: quat;
19
- color: vec4;
20
- size: number;
21
- minSizePixels: number | undefined;
22
- maxSizePixels: number | undefined;
23
18
  };
@@ -1,18 +1,18 @@
1
- import type { vec4 } from "gl-matrix";
2
- import type { vec3 } from "gl-matrix";
3
1
  import type { Viewport } from "../../viewport";
4
- import type { World } from "../../world";
5
- import type { LayerOptions } from "..";
6
- import { type BaseLayer, type Polygon } from "..";
7
- export type PolygonLayer = BaseLayer & Polygon;
8
- export declare const createPolygonLayer: (world: World, polygon?: Partial<Polygon>) => {
2
+ import type { Properties } from "..";
3
+ import { type Polygon } from "..";
4
+ export declare const createPolygonLayer: (gl: WebGL2RenderingContext, properties?: Properties<Partial<Polygon>>) => {
5
+ onClick: ((_: import("../..").Pick) => void) | undefined;
6
+ onRightClick: ((_: import("../..").Pick) => void) | undefined;
7
+ onDoubleClick: ((_: import("../..").Pick) => void) | undefined;
8
+ onDrag: ((_: import("../..").Pick) => void) | undefined;
9
+ onDragFlat: ((_: import("../..").Pick) => void) | undefined;
10
+ onDragStart: ((_: import("../..").Pick) => void) | undefined;
11
+ onDragEnd: ((_: import("../..").Pick) => void) | undefined;
9
12
  render: ({ viewport: { projection, modelView, camera, screen }, depth, index, }: {
10
13
  viewport: Viewport;
11
14
  depth?: boolean | undefined;
12
15
  index?: number | undefined;
13
16
  }) => void;
14
17
  dispose: () => void;
15
- options: Partial<LayerOptions>;
16
- points: vec3[][];
17
- color: vec4;
18
18
  };
@@ -1,18 +1,18 @@
1
- import { vec4 } from "gl-matrix";
2
1
  import type { Viewport } from "../../viewport";
3
- import type { World } from "../../world";
4
- import type { LayerOptions } from "..";
5
- import { type BaseLayer, type Terrain } from "..";
6
- export type TerrainLayer = BaseLayer & Terrain;
7
- export declare const createTerrainLayer: (world: World, terrain?: Partial<Terrain>) => {
2
+ import type { Properties } from "..";
3
+ import { type Terrain } from "..";
4
+ export declare const createTerrainLayer: (gl: WebGL2RenderingContext, properties?: Properties<Partial<Terrain>>) => {
5
+ onClick: ((_: import("../..").Pick) => void) | undefined;
6
+ onRightClick: ((_: import("../..").Pick) => void) | undefined;
7
+ onDoubleClick: ((_: import("../..").Pick) => void) | undefined;
8
+ onDrag: ((_: import("../..").Pick) => void) | undefined;
9
+ onDragFlat: ((_: import("../..").Pick) => void) | undefined;
10
+ onDragStart: ((_: import("../..").Pick) => void) | undefined;
11
+ onDragEnd: ((_: import("../..").Pick) => void) | undefined;
8
12
  render: ({ viewport, depth, index, }: {
9
13
  viewport: Viewport;
10
14
  depth?: boolean | undefined;
11
15
  index?: number | undefined;
12
16
  }) => void;
13
17
  dispose: () => void;
14
- options: Partial<LayerOptions>;
15
- terrainUrl: string;
16
- imageryUrl: string;
17
- color: vec4;
18
18
  };
package/dist/math.d.ts CHANGED
@@ -7,5 +7,5 @@ export declare const quadratic: (a: number, b: number, c: number) => number[];
7
7
  export declare const mercator: ([lng, lat, alt]: vec3, out?: vec3) => vec3;
8
8
  export declare const geodetic: ([x, y, z]: vec3, out?: vec3) => vec3;
9
9
  export declare const tileToMercator: ([x, y, z]: vec3, out?: vec3) => vec3;
10
- export declare const toQuaternion: ([pitch, yaw, roll]: vec3) => [number, number, number, number];
10
+ export declare const toQuaternion: ([pitch, roll, yaw]: vec3) => [number, number, number, number];
11
11
  export declare const toOrientation: ([x, y, z, w]: quat) => [number, number, number];
package/dist/model.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  import type { vec2, vec3 } from "gl-matrix";
2
+ import type { Layer } from "./layers";
2
3
  export type View = {
3
4
  target: vec3;
4
5
  offset: vec2;
5
- screen: vec2;
6
6
  distance: number;
7
7
  orientation: vec3;
8
8
  fieldOfView: number;
9
9
  };
10
+ export declare const defaultView: View;
11
+ export type Pick = {
12
+ point: vec2;
13
+ position: vec3;
14
+ layer: Layer | undefined;
15
+ };
@@ -1,4 +1,4 @@
1
- import { vec3, vec4 } from "gl-matrix";
1
+ import { vec2, vec3, vec4 } from "gl-matrix";
2
2
  export type Transition<T> = {
3
3
  value: T;
4
4
  dispose: () => void;
@@ -7,27 +7,10 @@ export declare const createTransition: <T>(step: (_: {
7
7
  time: number;
8
8
  current: T;
9
9
  target: T;
10
- }) => T) => {
11
- value: T | undefined;
12
- dispose: () => void;
13
- };
14
- export declare const createNumberTransition: (update?: ((_: number, target: number) => void) | undefined) => {
15
- value: number | undefined;
16
- dispose: () => void;
17
- };
18
- export declare const createColorTransition: (update?: ((_: vec4, target: vec4) => void) | undefined) => {
19
- value: vec4 | undefined;
20
- dispose: () => void;
21
- };
22
- export declare const createPositionTransition: (update?: ((_: vec3, target: vec3) => void) | undefined) => {
23
- value: vec3 | undefined;
24
- dispose: () => void;
25
- };
26
- export declare const createPositionVelocityTransition: (update?: ((_: vec3, target: vec3) => void) | undefined) => {
27
- value: vec3 | undefined;
28
- dispose: () => void;
29
- };
30
- export declare const createOrientationTransition: (update?: ((_: vec3, target: vec3) => void) | undefined) => {
31
- value: vec3 | undefined;
32
- dispose: () => void;
33
- };
10
+ }) => T) => (_target: () => T) => () => T;
11
+ export declare const createNumberTransition: (_target: () => number) => () => number;
12
+ export declare const createVec2Transition: (_target: () => vec2) => () => vec2;
13
+ export declare const createVec4Transition: (_target: () => vec4) => () => vec4;
14
+ export declare const createPositionTransition: (_target: () => vec3) => () => vec3;
15
+ export declare const createPositionVelocityTransition: (target: () => vec3) => () => vec3;
16
+ export declare const createOrientationTransition: (_target: () => vec3) => () => vec3;
@@ -1,10 +1,2 @@
1
1
  import type { View } from "./model";
2
- import type { World } from "./world";
3
- export type ViewTransition = {
4
- view: Partial<View>;
5
- dispose: () => void;
6
- };
7
- export declare const createViewTransition: (world: World) => {
8
- view: Partial<View>;
9
- dispose: () => void;
10
- };
2
+ export declare const createViewTransition: (view: () => View) => () => View;
@@ -1,5 +1,5 @@
1
1
  import { mat4, vec2, vec3, vec4 } from "gl-matrix";
2
- import type { View } from "./model";
2
+ import { type View } from "./model";
3
3
  export type Viewport = {
4
4
  camera: vec3;
5
5
  screen: vec2;
@@ -13,5 +13,9 @@ export type Viewport = {
13
13
  localToClip: (_: vec3, out?: vec4) => vec4;
14
14
  localToWorld: (_: vec3, out?: vec3) => vec3;
15
15
  worldToLocal: (_: vec3, out?: vec3) => vec3;
16
+ project: (_: vec3) => vec2;
17
+ unproject: (_: vec2, options?: {
18
+ targetZ: number | undefined;
19
+ }) => vec3;
16
20
  };
17
- export declare const createViewport: (view: View) => Viewport;
21
+ export declare const createViewport: (view: Partial<View>, screen: vec2) => Viewport;
package/dist/world.d.ts CHANGED
@@ -1,39 +1,27 @@
1
- import type { vec2 } from "gl-matrix";
2
- import { vec3 } from "gl-matrix";
3
- import type { Layer } from "./layers";
4
- import type { View } from "./model";
5
- type Pick = {
6
- screen: vec2;
7
- position: vec3;
8
- layer: Layer | undefined;
9
- };
1
+ import type { vec2, vec3 } from "gl-matrix";
2
+ import type { Layer, Properties } from "./layers";
3
+ import type { Pick, View } from "./model";
10
4
  export type World = {
11
- readonly canvas: HTMLCanvasElement;
12
- readonly gl: WebGL2RenderingContext;
13
- set view(_: View);
14
- get view(): View;
15
- add: (layer: Layer) => void;
16
- remove: (layer: Layer) => void;
17
5
  project: (_: vec3) => vec2;
18
6
  unproject: (_: vec2) => vec3;
19
- recenter: ([x, y]: [number, number]) => void;
20
- pick: ([x, y]: [number, number]) => Pick;
7
+ pick: ([x, y]: vec2, _: {
8
+ terrain?: boolean;
9
+ }) => Pick;
21
10
  dispose: () => void;
22
11
  };
23
- export declare const createWorld: (canvas: HTMLCanvasElement) => {
24
- canvas: HTMLCanvasElement;
25
- gl: WebGL2RenderingContext;
26
- view: View;
27
- add: (layer: Layer) => void;
28
- remove: (layer: Layer) => void;
12
+ export type WorldProperties = {
13
+ view: Partial<View>;
14
+ layers: Layer[];
15
+ };
16
+ export declare const createWorld: (gl: WebGL2RenderingContext, properties: Properties<WorldProperties>) => {
29
17
  project: (_: vec3) => vec2;
30
18
  unproject: (_: vec2) => vec3;
31
- recenter: ([cx, cy]: vec2) => void;
32
- pick: (screen: vec2) => {
33
- screen: vec2;
19
+ pick: (point: vec2, { terrain }?: {
20
+ terrain?: boolean | undefined;
21
+ }) => {
22
+ point: vec2;
34
23
  position: vec3;
35
- layer: import("./layers").BillboardLayer | import("./layers").TerrainLayer | import("./layers").PolygonLayer | import("./layers").MeshLayer | undefined;
24
+ layer: Layer | undefined;
36
25
  };
37
26
  dispose: () => void;
38
27
  };
39
- export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "world.ts",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",