@openglobus/og 0.17.1 → 0.17.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.
- package/README.md +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/og/camera/PlanetCamera.js +3 -4
- package/src/og/control/KeyboardNavigation.js +41 -18
- package/src/og/entity/Geometry.js +2 -2
- package/src/og/input/KeyboardHandler.js +84 -17
- package/src/og/renderer/RendererEvents.js +4 -18
- package/src/og/scene/Planet.js +1 -3
- package/src/og/utils/TextureAtlas.js +1 -1
- package/src/og/webgl/Handler.js +2 -0
- package/types/input/KeyboardHandler.d.ts +9 -2
- package/types/renderer/RendererEvents.d.ts +2 -16
- package/types/scene/Planet.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openglobus/og",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
4
4
|
"description": "[OpenGlobus](https://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
|
|
5
5
|
"directories": {
|
|
6
6
|
"example": "./sandbox"
|
|
@@ -34,10 +34,9 @@ class PlanetCamera extends Camera {
|
|
|
34
34
|
*/
|
|
35
35
|
constructor(planet, options) {
|
|
36
36
|
super(planet.renderer, {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
...options
|
|
37
|
+
...options,
|
|
38
|
+
frustums: options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]],
|
|
39
|
+
//[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
|
|
41
40
|
}
|
|
42
41
|
);
|
|
43
42
|
/**
|
|
@@ -15,11 +15,11 @@ import { Control } from "./Control.js";
|
|
|
15
15
|
class KeyboardNavigation extends Control {
|
|
16
16
|
constructor(options) {
|
|
17
17
|
options = options || {};
|
|
18
|
-
super(options);
|
|
18
|
+
super({ name: "KeyboardNavigation", ...options });
|
|
19
19
|
this.step = options.step || 250;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
onactivate() {
|
|
23
23
|
this.renderer.events.on("keypress", input.KEY_PGUP, this.onCameraMoveForward, this);
|
|
24
24
|
this.renderer.events.on("keypress", input.KEY_PGDN, this.onCameraMoveBackward, this);
|
|
25
25
|
this.renderer.events.on("keypress", input.KEY_PLUS, this.onCameraMoveForward, this);
|
|
@@ -38,6 +38,29 @@ class KeyboardNavigation extends Control {
|
|
|
38
38
|
this.renderer.events.on("keypress", input.KEY_N, this.onCameraRollNorth, this);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
ondeactivate() {
|
|
42
|
+
this.renderer.events.off("keypress", input.KEY_PGUP, this.onCameraMoveForward);
|
|
43
|
+
this.renderer.events.off("keypress", input.KEY_PGDN, this.onCameraMoveBackward);
|
|
44
|
+
this.renderer.events.off("keypress", input.KEY_PLUS, this.onCameraMoveForward);
|
|
45
|
+
this.renderer.events.off("keypress", input.KEY_EQUALS, this.onCameraMoveForward);
|
|
46
|
+
this.renderer.events.off("keypress", input.KEY_MINUS, this.onCameraMoveBackward);
|
|
47
|
+
this.renderer.events.off("keypress", input.KEY_W, this.onCameraMoveForward);
|
|
48
|
+
this.renderer.events.off("keypress", input.KEY_S, this.onCameraMoveBackward);
|
|
49
|
+
this.renderer.events.off("keypress", input.KEY_A, this.onCameraStrifeLeft);
|
|
50
|
+
this.renderer.events.off("keypress", input.KEY_D, this.onCameraStrifeRight);
|
|
51
|
+
this.renderer.events.off("keypress", input.KEY_UP, this.onCameraLookUp);
|
|
52
|
+
this.renderer.events.off("keypress", input.KEY_DOWN, this.onCameraLookDown);
|
|
53
|
+
this.renderer.events.off("keypress", input.KEY_LEFT, this.onCameraLookLeft);
|
|
54
|
+
this.renderer.events.off("keypress", input.KEY_RIGHT, this.onCameraLookRight);
|
|
55
|
+
this.renderer.events.off("keypress", input.KEY_Q, this.onCameraRollLeft);
|
|
56
|
+
this.renderer.events.off("keypress", input.KEY_E, this.onCameraRollRight);
|
|
57
|
+
this.renderer.events.off("keypress", input.KEY_N, this.onCameraRollNorth);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
oninit() {
|
|
61
|
+
this.activate();
|
|
62
|
+
}
|
|
63
|
+
|
|
41
64
|
onCameraMoveForward(event) {
|
|
42
65
|
var cam = this.renderer.activeCamera;
|
|
43
66
|
cam.slide(0, 0, -cam._lonLat.height / this.step);
|
|
@@ -114,22 +137,22 @@ class KeyboardNavigation extends Control {
|
|
|
114
137
|
|
|
115
138
|
// from CompassButton._onClick()
|
|
116
139
|
onCameraRollNorth(event) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
let c = this.planet.getCartesianFromPixelTerrain(this.renderer.handler.getCenter());
|
|
141
|
+
if (c) {
|
|
142
|
+
this.planet.flyCartesian(
|
|
143
|
+
c.normal().scaleTo(c.length() + c.distance(this.planet.camera.eye)),
|
|
144
|
+
null,
|
|
145
|
+
null,
|
|
146
|
+
0,
|
|
147
|
+
null,
|
|
148
|
+
null,
|
|
149
|
+
() => {
|
|
150
|
+
this.planet.camera.look(c);
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
} else {
|
|
154
|
+
this.planet.flyCartesian(this.planet.camera.eye);
|
|
155
|
+
}
|
|
133
156
|
}
|
|
134
157
|
|
|
135
158
|
onCameraRollLeft(event) {
|
|
@@ -111,8 +111,8 @@ class Geometry {
|
|
|
111
111
|
var t = Geometry.getType(geometryObj.type);
|
|
112
112
|
|
|
113
113
|
if (t === GeometryType.POINT) {
|
|
114
|
-
let lon =
|
|
115
|
-
lat =
|
|
114
|
+
let lon = geometryObj.coordinates[0],
|
|
115
|
+
lat = geometryObj.coordinates[1];
|
|
116
116
|
res.southWest.lon = lon;
|
|
117
117
|
res.southWest.lat = lat;
|
|
118
118
|
res.northEast.lon = lon;
|
|
@@ -1,37 +1,100 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import { input } from './input.js';
|
|
4
|
+
import { stamp } from "../utils/shared.js";
|
|
5
|
+
|
|
6
|
+
const STAMP_SPACER = "_";
|
|
4
7
|
|
|
5
8
|
class KeyboardHandler {
|
|
6
9
|
|
|
7
10
|
constructor() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
let _currentlyPressedKeys = {};
|
|
12
|
+
let _pressedKeysCallbacks = {};
|
|
13
|
+
let _unpressedKeysCallbacks = {};
|
|
14
|
+
let _charkeysCallbacks = {};
|
|
15
|
+
|
|
16
|
+
let _that = this;
|
|
17
|
+
let _anykeyCallback = null;
|
|
18
|
+
let _event = null;
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
let _active = true;
|
|
21
|
+
|
|
22
|
+
let _stampCache = {};
|
|
17
23
|
|
|
18
24
|
if (KeyboardHandler.prototype._instance) {
|
|
19
25
|
return KeyboardHandler.prototype._instance;
|
|
20
26
|
} else {
|
|
21
27
|
KeyboardHandler.prototype._instance = this;
|
|
22
28
|
|
|
23
|
-
document.onkeydown = function (event) {
|
|
24
|
-
|
|
29
|
+
document.onkeydown = function (event) {
|
|
30
|
+
_event = event;
|
|
31
|
+
_active && _that.handleKeyDown();
|
|
32
|
+
};
|
|
33
|
+
document.onkeyup = function (event) {
|
|
34
|
+
_event = event;
|
|
35
|
+
_active && _that.handleKeyUp();
|
|
36
|
+
};
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
var _sortByPriority = function (a, b) {
|
|
28
40
|
return a.priority < b.priority;
|
|
29
41
|
};
|
|
30
42
|
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
this.getcurrentlyPressedKeys = function () {
|
|
44
|
+
return _currentlyPressedKeys;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this.getPressedKeysCallbacks = function () {
|
|
48
|
+
return _pressedKeysCallbacks;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.getUnpressedKeysCallbacks = function () {
|
|
52
|
+
return _unpressedKeysCallbacks;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this.getCharkeysCallbacks = function () {
|
|
56
|
+
return _charkeysCallbacks;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
this.removeEvent = function (event, keyCode, callback) {
|
|
60
|
+
let st = this._getStamp(event, keyCode, callback._openglobus_id);
|
|
61
|
+
if (callback._openglobus_id && _stampCache[st]) {
|
|
62
|
+
_stampCache[st] = null;
|
|
63
|
+
delete _stampCache[st];
|
|
64
|
+
|
|
65
|
+
if (event === "keypress") {
|
|
66
|
+
this._removeCallback(_pressedKeysCallbacks[keyCode], callback);
|
|
67
|
+
} else if (event === "keyfree") {
|
|
68
|
+
this._removeCallback(_unpressedKeysCallbacks[keyCode], callback);
|
|
69
|
+
} else if (event === "charkeypress") {
|
|
70
|
+
this._removeCallback(_charkeysCallbacks[keyCode], callback);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
this._removeCallback = function (handlers, callback) {
|
|
76
|
+
for (let i = 0; i < handlers.length; i++) {
|
|
77
|
+
if (handlers[i].callback._openglobus_id === callback._openglobus_id) {
|
|
78
|
+
handlers.splice(i, 1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
this._getStamp = function (name, keyCode, ogid) {
|
|
84
|
+
return `${name}${STAMP_SPACER}${keyCode}${STAMP_SPACER}${ogid}`;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
this._stamp = function (name, keyCode, obj) {
|
|
88
|
+
let ogid = stamp(obj);
|
|
89
|
+
|
|
90
|
+
let st = this._getStamp(name, keyCode, ogid);
|
|
91
|
+
|
|
92
|
+
if (!_stampCache[st]) {
|
|
93
|
+
_stampCache[st] = ogid;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return false;
|
|
35
98
|
};
|
|
36
99
|
|
|
37
100
|
this.setActivity = function (activity) {
|
|
@@ -40,9 +103,13 @@ class KeyboardHandler {
|
|
|
40
103
|
|
|
41
104
|
this.releaseKeys = function () {
|
|
42
105
|
_currentlyPressedKeys = {};
|
|
43
|
-
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
this.addEvent = function (event, keyCode, callback, sender, priority) {
|
|
109
|
+
|
|
110
|
+
// Event is already bound with the callback
|
|
111
|
+
if (!this._stamp(event, keyCode, callback)) return;
|
|
44
112
|
|
|
45
|
-
this.addEvent = function (event, sender, callback, keyCode, priority) {
|
|
46
113
|
if (priority === undefined) {
|
|
47
114
|
priority = 1600;
|
|
48
115
|
}
|
|
@@ -115,7 +182,7 @@ class KeyboardHandler {
|
|
|
115
182
|
this.handleEvents = function () {
|
|
116
183
|
for (let pk in _pressedKeysCallbacks) {
|
|
117
184
|
if (_currentlyPressedKeys[pk]) {
|
|
118
|
-
|
|
185
|
+
let cpk = _pressedKeysCallbacks[pk];
|
|
119
186
|
for (let i = 0; i < cpk.length; i++) {
|
|
120
187
|
cpk[i].callback.call(cpk[i].sender, _event);
|
|
121
188
|
}
|
|
@@ -256,33 +256,19 @@ class RendererEvents extends Events {
|
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
/**
|
|
260
|
-
* Set render event callback.
|
|
261
|
-
* @public
|
|
262
|
-
* @param {string} name - Event name
|
|
263
|
-
* @param {eventCallback} callback - Callback function
|
|
264
|
-
* @param {number} [key] - Key code from og.input
|
|
265
|
-
* @param {*} sender - Callback context
|
|
266
|
-
* @param {number} [priority] - Event callback priority
|
|
267
|
-
*/
|
|
268
259
|
on(name, p0, p1, p2, p3) {
|
|
269
260
|
if (name === "keypress" || name === "charkeypress" || name === "keyfree") {
|
|
270
|
-
this._keyboardHandler.addEvent(name,
|
|
261
|
+
this._keyboardHandler.addEvent(name, p0, p1, p2, p3);
|
|
271
262
|
} else {
|
|
272
263
|
super.on(name, p0, p1, p2);
|
|
273
264
|
}
|
|
274
265
|
}
|
|
275
266
|
|
|
276
|
-
|
|
277
|
-
* TODO: DOESNT WORK!!!
|
|
278
|
-
* @param {any} name
|
|
279
|
-
* @param {any} callback
|
|
280
|
-
*/
|
|
281
|
-
off(name, callback) {
|
|
267
|
+
off(name, p1, p2) {
|
|
282
268
|
if (name === "keypress" || name === "charkeypress" || name === "keyfree") {
|
|
283
|
-
this._keyboardHandler.removeEvent(name,
|
|
269
|
+
this._keyboardHandler.removeEvent(name, p1, p2);
|
|
284
270
|
} else {
|
|
285
|
-
super.off(name,
|
|
271
|
+
super.off(name, p1);
|
|
286
272
|
}
|
|
287
273
|
}
|
|
288
274
|
|
package/src/og/scene/Planet.js
CHANGED
|
@@ -117,8 +117,6 @@ export class Planet extends RenderNode {
|
|
|
117
117
|
constructor(options = {}) {
|
|
118
118
|
super(options.name);
|
|
119
119
|
|
|
120
|
-
this._cameraFrustums = options.frustums || [[1, 100], [100, 1000 + 7.0], [1000 - 7.0, 1e6 + 17], [1e6 - 17, 1e9]];
|
|
121
|
-
|
|
122
120
|
/**
|
|
123
121
|
* @public
|
|
124
122
|
* @type {Ellipsoid}
|
|
@@ -205,7 +203,7 @@ export class Planet extends RenderNode {
|
|
|
205
203
|
* @type {PlanetCamera}
|
|
206
204
|
*/
|
|
207
205
|
this.camera = new PlanetCamera(this, {
|
|
208
|
-
frustums:
|
|
206
|
+
frustums: options.frustums,
|
|
209
207
|
eye: new Vec3(25000000, 0, 0),
|
|
210
208
|
look: Vec3.ZERO,
|
|
211
209
|
up: Vec3.NORTH,
|
|
@@ -189,7 +189,7 @@ class TextureAtlas {
|
|
|
189
189
|
* @public
|
|
190
190
|
*/
|
|
191
191
|
createTexture(img, internalFormat) {
|
|
192
|
-
if (this._handler) {
|
|
192
|
+
if (this._handler && this._handler.gl) {
|
|
193
193
|
this._handler.gl.deleteTexture(this.texture);
|
|
194
194
|
if (img) {
|
|
195
195
|
this.canvas.resize(img.width, img.height);
|
package/src/og/webgl/Handler.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export class KeyboardHandler {
|
|
2
|
-
|
|
2
|
+
getcurrentlyPressedKeys: () => {};
|
|
3
|
+
getPressedKeysCallbacks: () => {};
|
|
4
|
+
getUnpressedKeysCallbacks: () => {};
|
|
5
|
+
getCharkeysCallbacks: () => {};
|
|
6
|
+
removeEvent: (event: any, keyCode: any, callback: any) => void;
|
|
7
|
+
_removeCallback: (handlers: any, callback: any) => void;
|
|
8
|
+
_getStamp: (name: any, keyCode: any, ogid: any) => string;
|
|
9
|
+
_stamp: (name: any, keyCode: any, obj: any) => boolean;
|
|
3
10
|
setActivity: (activity: any) => void;
|
|
4
11
|
releaseKeys: () => void;
|
|
5
|
-
addEvent: (event: any,
|
|
12
|
+
addEvent: (event: any, keyCode: any, callback: any, sender: any, priority: any) => void;
|
|
6
13
|
isKeyPressed: (keyCode: any) => any;
|
|
7
14
|
handleKeyDown: () => void;
|
|
8
15
|
handleKeyUp: () => void;
|
|
@@ -170,22 +170,8 @@ export class RendererEvents extends Events {
|
|
|
170
170
|
* @public
|
|
171
171
|
*/
|
|
172
172
|
public handleEvents(): void;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
* @public
|
|
176
|
-
* @param {string} name - Event name
|
|
177
|
-
* @param {eventCallback} callback - Callback function
|
|
178
|
-
* @param {number} [key] - Key code from og.input
|
|
179
|
-
* @param {*} sender - Callback context
|
|
180
|
-
* @param {number} [priority] - Event callback priority
|
|
181
|
-
*/
|
|
182
|
-
public on(name: string, p0: any, p1: any, p2: any, p3: any): void;
|
|
183
|
-
/**
|
|
184
|
-
* TODO: DOESNT WORK!!!
|
|
185
|
-
* @param {any} name
|
|
186
|
-
* @param {any} callback
|
|
187
|
-
*/
|
|
188
|
-
off(name: any, callback: any): void;
|
|
173
|
+
on(name: any, p0: any, p1: any, p2: any, p3: any): void;
|
|
174
|
+
off(name: any, p1: any, p2: any): void;
|
|
189
175
|
/**
|
|
190
176
|
* Check key is pressed.
|
|
191
177
|
* @public
|