@gg-web-engine/core 0.0.37 → 0.0.39
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/dist/2d/components/physics/i-rigid-body-2d.component.d.ts +3 -0
- package/dist/2d/components/physics/i-trigger-2d.component.d.ts +3 -0
- package/dist/2d/models/body-options.d.ts +5 -1
- package/dist/3d/components/physics/i-physics-world-3d.component.d.ts +7 -0
- package/dist/3d/components/physics/i-rigid-body-3d.component.d.ts +3 -0
- package/dist/3d/components/physics/i-trigger-3d.component.d.ts +3 -0
- package/dist/3d/entities/controllers/input/car-keyboard-handling.controller.js +2 -2
- package/dist/3d/entities/controllers/input/gg-car-keyboard-handling.controller.js +3 -3
- package/dist/3d/entities/gg-car/gg-car.entity.js +4 -2
- package/dist/3d/entities/map-graph-3d.entity.d.ts +1 -1
- package/dist/3d/entities/map-graph-3d.entity.js +3 -4
- package/dist/3d/entities/raycast-vehicle-3d.entity.d.ts +8 -5
- package/dist/3d/entities/raycast-vehicle-3d.entity.js +41 -25
- package/dist/3d/factories.d.ts +3 -3
- package/dist/3d/models/body-options.d.ts +5 -1
- package/dist/3d/models/shapes.d.ts +41 -1
- package/dist/base/clock/pausable-clock.d.ts +56 -1
- package/dist/base/clock/pausable-clock.js +88 -5
- package/dist/base/components/physics/i-body.component.d.ts +3 -1
- package/dist/base/components/physics/i-physics-world.component.d.ts +8 -6
- package/dist/base/components/rendering/i-renderer.component.d.ts +4 -0
- package/dist/base/components/rendering/i-visual-scene.component.d.ts +0 -4
- package/dist/base/entities/i-entity.d.ts +4 -2
- package/dist/base/entities/i-entity.js +9 -3
- package/dist/base/entities/i-renderer.entity.d.ts +4 -0
- package/dist/base/entities/i-renderer.entity.js +8 -0
- package/dist/base/gg-world.d.ts +0 -2
- package/dist/base/gg-world.js +26 -25
- package/dist/base/index.d.ts +0 -1
- package/dist/base/index.js +0 -1
- package/dist/base/math/point2.d.ts +12 -0
- package/dist/base/math/point2.js +35 -0
- package/dist/base/math/point3.d.ts +8 -0
- package/dist/base/math/point3.js +16 -0
- package/dist/base/math/quaternion.d.ts +2 -0
- package/dist/base/math/quaternion.js +4 -0
- package/dist/base/models/body-options.d.ts +9 -0
- package/dist/dev/gg-console.ui.js +16 -8
- package/dist/dev/gg-debugger.ui.d.ts +4 -0
- package/dist/dev/gg-debugger.ui.js +83 -32
- package/dist/dev/gg-static.d.ts +0 -1
- package/dist/dev/gg-static.js +3 -4
- package/package.json +3 -3
- package/dist/base/interfaces/i-debug-physics-drawer.d.ts +0 -8
- package/dist/base/interfaces/i-debug-physics-drawer.js +0 -1
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
import { createInlineTickController } from '../base';
|
|
2
|
-
import { fromEvent, Subject, takeUntil } from 'rxjs';
|
|
1
|
+
import { createInlineTickController, IRendererEntity } from '../base';
|
|
2
|
+
import { animationFrameScheduler, fromEvent, of, Subject, takeUntil } from 'rxjs';
|
|
3
3
|
import Stats from 'stats.js';
|
|
4
|
+
import { repeat } from 'rxjs/operators';
|
|
5
|
+
const snapshotEqual = (a, b) => {
|
|
6
|
+
if (a.timeScale !== b.timeScale)
|
|
7
|
+
return false;
|
|
8
|
+
if (a.renderers.length !== b.renderers.length)
|
|
9
|
+
return false;
|
|
10
|
+
for (let i = 0; i < a.renderers.length; i++) {
|
|
11
|
+
if (a.renderers[i].name !== b.renderers[i].name)
|
|
12
|
+
return false;
|
|
13
|
+
if (a.renderers[i].entity !== b.renderers[i].entity)
|
|
14
|
+
return false;
|
|
15
|
+
if (a.renderers[i].physicsDebugViewActive !== b.renderers[i].physicsDebugViewActive)
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
4
20
|
export class GgDebuggerUI {
|
|
5
21
|
constructor() {
|
|
6
22
|
this.ui = {
|
|
@@ -10,6 +26,11 @@ export class GgDebuggerUI {
|
|
|
10
26
|
this.statsRemoved$ = new Subject();
|
|
11
27
|
this.currentWorld = null;
|
|
12
28
|
this.debugControlsRemoved$ = new Subject();
|
|
29
|
+
this.viewUpdated$ = new Subject();
|
|
30
|
+
this.snapshot = {
|
|
31
|
+
timeScale: 1,
|
|
32
|
+
renderers: [],
|
|
33
|
+
};
|
|
13
34
|
}
|
|
14
35
|
get showStats() {
|
|
15
36
|
return !!this.ui.stats;
|
|
@@ -64,48 +85,78 @@ export class GgDebuggerUI {
|
|
|
64
85
|
this.currentWorld = selectedWorld;
|
|
65
86
|
if (value) {
|
|
66
87
|
const debugControlsContainer = document.createElement('div');
|
|
88
|
+
document.body.appendChild(debugControlsContainer);
|
|
67
89
|
this.ui.debugControlsContainer = debugControlsContainer;
|
|
68
|
-
const debugLabelCss = "style='display:flex;align-items:center;margin:0.25rem;'";
|
|
69
90
|
debugControlsContainer.style.cssText =
|
|
70
91
|
'position:fixed;top:48px;right:0;opacity:0.9;z-index:9999;background-color:#333;color:white;display:flex;flex-direction:column';
|
|
71
|
-
|
|
92
|
+
this.snapshot = this.makeSnapshot();
|
|
93
|
+
this.renderControls(debugControlsContainer);
|
|
94
|
+
of(undefined, animationFrameScheduler)
|
|
95
|
+
.pipe(repeat(), takeUntil(this.debugControlsRemoved$))
|
|
96
|
+
.subscribe(() => {
|
|
97
|
+
const newSnapshot = this.makeSnapshot();
|
|
98
|
+
if (!snapshotEqual(this.snapshot, newSnapshot)) {
|
|
99
|
+
this.snapshot = newSnapshot;
|
|
100
|
+
this.renderControls(debugControlsContainer);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.debugControlsRemoved$.next();
|
|
106
|
+
document.body.removeChild(this.ui.debugControlsContainer);
|
|
107
|
+
this.ui.debugControlsContainer = null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
makeSnapshot() {
|
|
111
|
+
return {
|
|
112
|
+
timeScale: this.currentWorld.worldClock.timeScale,
|
|
113
|
+
renderers: this.currentWorld.children
|
|
114
|
+
.filter(x => x instanceof IRendererEntity)
|
|
115
|
+
.map(r => ({
|
|
116
|
+
name: r.name,
|
|
117
|
+
entity: r,
|
|
118
|
+
physicsDebugViewActive: r.physicsDebugViewActive,
|
|
119
|
+
})),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
renderControls(debugControlsContainer) {
|
|
123
|
+
const debugLabelCss = "style='display:flex;align-items:center;margin:0.25rem;'";
|
|
124
|
+
let html = '';
|
|
125
|
+
for (const { entity, physicsDebugViewActive } of this.snapshot.renderers) {
|
|
126
|
+
html += `
|
|
72
127
|
<div ${debugLabelCss}>
|
|
73
|
-
<input type='checkbox' name='checkbox' id='
|
|
74
|
-
<label for='
|
|
128
|
+
<input type='checkbox' name='checkbox' id='physics_debugger_checkbox_id_${entity.name}' value='1'${physicsDebugViewActive ? ' checked' : ''}>
|
|
129
|
+
<label for='physics_debugger_checkbox_id_${entity.name}' style='user-select: none;'>Physics debugger${this.snapshot.renderers.length > 1 ? ' (' + entity.name + ')' : ''}</label>
|
|
75
130
|
</div>`;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
131
|
+
}
|
|
132
|
+
html += `
|
|
133
|
+
<div ${debugLabelCss}>
|
|
134
|
+
<input id='time_scale_slider' type='range' min='0' max='5' step='0.01' style='flex-grow:1' value='${this.snapshot.timeScale}'/>
|
|
135
|
+
<label for='time_scale_slider' style='user-select: none;'>Time scale</label>
|
|
136
|
+
</div>`;
|
|
137
|
+
debugControlsContainer.innerHTML = html;
|
|
138
|
+
this.viewUpdated$.next();
|
|
139
|
+
for (const { entity } of this.snapshot.renderers) {
|
|
140
|
+
fromEvent(document.getElementById('physics_debugger_checkbox_id_' + entity.name), 'change')
|
|
141
|
+
.pipe(takeUntil(this.debugControlsRemoved$), takeUntil(this.viewUpdated$))
|
|
85
142
|
.subscribe(e => {
|
|
86
143
|
try {
|
|
87
|
-
|
|
144
|
+
entity.physicsDebugViewActive = e.target.checked;
|
|
88
145
|
}
|
|
89
146
|
catch (err) {
|
|
90
147
|
console.error(err);
|
|
91
148
|
}
|
|
92
|
-
e.target.checked = this.currentWorld.physicsDebugViewActive;
|
|
93
149
|
});
|
|
94
|
-
// fromEvent(document.getElementById('time_scale_slider')! as HTMLInputElement, 'change')
|
|
95
|
-
// .pipe(takeUntil(this.debugControlsRemoved$))
|
|
96
|
-
// .subscribe(e => {
|
|
97
|
-
// try {
|
|
98
|
-
// this.currentWorld.physicsWorld.timeScale = +(e.target as HTMLInputElement).value;
|
|
99
|
-
// } catch (err) {
|
|
100
|
-
// console.error(err);
|
|
101
|
-
// }
|
|
102
|
-
// (e.target as HTMLInputElement).value = '' + ( this.currentWorld.physicsWorld.timeScale || 1);
|
|
103
|
-
// });
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
this.debugControlsRemoved$.next();
|
|
107
|
-
document.body.removeChild(this.ui.debugControlsContainer);
|
|
108
|
-
this.ui.debugControlsContainer = null;
|
|
109
150
|
}
|
|
151
|
+
fromEvent(document.getElementById('time_scale_slider'), 'change')
|
|
152
|
+
.pipe(takeUntil(this.debugControlsRemoved$), takeUntil(this.viewUpdated$))
|
|
153
|
+
.subscribe(e => {
|
|
154
|
+
try {
|
|
155
|
+
this.currentWorld.worldClock.timeScale = +e.target.value;
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
console.error(err);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
110
161
|
}
|
|
111
162
|
}
|
package/dist/dev/gg-static.d.ts
CHANGED
package/dist/dev/gg-static.js
CHANGED
|
@@ -51,10 +51,10 @@ export class GgStatic {
|
|
|
51
51
|
}), 'args: [string]; select world by name');
|
|
52
52
|
}
|
|
53
53
|
static get instance() {
|
|
54
|
-
if (!
|
|
55
|
-
|
|
54
|
+
if (!window.ggstatic) {
|
|
55
|
+
window.ggstatic = new GgStatic();
|
|
56
56
|
}
|
|
57
|
-
return
|
|
57
|
+
return window.ggstatic;
|
|
58
58
|
}
|
|
59
59
|
get devConsoleEnabled() {
|
|
60
60
|
return this._devConsoleEnabled;
|
|
@@ -138,4 +138,3 @@ export class GgStatic {
|
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
-
window.ggstatic = GgStatic.instance;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gg-web-engine/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.39",
|
|
4
4
|
"description": "An attempt to create open source game engine for browser",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://github.com/AndyGura/gg-web-engine#readme",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"rxjs": "7.8.
|
|
30
|
+
"rxjs": "7.8.1",
|
|
31
31
|
"stats.js": "0.17.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@types/jest": "^29.5.
|
|
34
|
+
"@types/jest": "^29.5.12",
|
|
35
35
|
"@types/stats.js": "^0.17.0",
|
|
36
36
|
"jest": "^29.5.0",
|
|
37
37
|
"jest-environment-jsdom": "^29.5.0",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { IDisplayObjectComponent } from '../components/rendering/i-display-object.component';
|
|
2
|
-
import { Point3 } from '../models/points';
|
|
3
|
-
import { VisualTypeDocRepo } from '../gg-world';
|
|
4
|
-
export interface IDebugPhysicsDrawer<D, R, TypeDoc extends VisualTypeDocRepo<D, R> = VisualTypeDocRepo<D, R>> extends IDisplayObjectComponent<D, R, TypeDoc> {
|
|
5
|
-
drawContactPoint(point: D, normal: D, color?: Point3): void;
|
|
6
|
-
drawLine(from: D, to: D, color?: Point3): void;
|
|
7
|
-
update(): void;
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|