@babylonjs-toolkit/next 9.30.0 → 9.34.1
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/lib/contentdownloadoutcome.d.ts +2 -0
- package/lib/contentdownloadoutcome.d.ts.map +1 -0
- package/lib/contentdownloadoutcome.js +1 -0
- package/lib/contentgraphicsoutcome.d.ts +2 -0
- package/lib/contentgraphicsoutcome.d.ts.map +1 -0
- package/lib/contentgraphicsoutcome.js +1 -0
- package/lib/contentgraphicsstatus.d.ts +2 -0
- package/lib/contentgraphicsstatus.d.ts.map +1 -0
- package/lib/contentgraphicsstatus.js +1 -0
- package/lib/contentinstaller.d.ts +248 -0
- package/lib/contentinstaller.d.ts.map +1 -0
- package/lib/contentinstaller.js +1939 -0
- package/lib/contentinstalleravailability.d.ts +2 -0
- package/lib/contentinstalleravailability.d.ts.map +1 -0
- package/lib/contentinstalleravailability.js +1 -0
- package/lib/contentinstallererrorkind.d.ts +2 -0
- package/lib/contentinstallererrorkind.d.ts.map +1 -0
- package/lib/contentinstallererrorkind.js +1 -0
- package/lib/contentinstallphase.d.ts +2 -0
- package/lib/contentinstallphase.d.ts.map +1 -0
- package/lib/contentinstallphase.js +1 -0
- package/lib/contentinstallpolicy.d.ts +2 -0
- package/lib/contentinstallpolicy.d.ts.map +1 -0
- package/lib/contentinstallpolicy.js +1 -0
- package/lib/contentupdatepolicy.d.ts +2 -0
- package/lib/contentupdatepolicy.d.ts.map +1 -0
- package/lib/contentupdatepolicy.js +1 -0
- package/lib/iafterspawned.d.ts +4 -0
- package/lib/iafterspawned.d.ts.map +1 -0
- package/lib/iafterspawned.js +1 -0
- package/lib/iaftertick.d.ts +4 -0
- package/lib/iaftertick.d.ts.map +1 -0
- package/lib/iaftertick.js +1 -0
- package/lib/iafterupdate.d.ts +4 -0
- package/lib/iafterupdate.d.ts.map +1 -0
- package/lib/iafterupdate.js +1 -0
- package/lib/ibeforetick.d.ts +4 -0
- package/lib/ibeforetick.d.ts.map +1 -0
- package/lib/ibeforetick.js +1 -0
- package/lib/ibeforeupdate.d.ts +4 -0
- package/lib/ibeforeupdate.d.ts.map +1 -0
- package/lib/ibeforeupdate.js +1 -0
- package/lib/icontentavailabilityblock.d.ts +6 -0
- package/lib/icontentavailabilityblock.d.ts.map +1 -0
- package/lib/icontentavailabilityblock.js +1 -0
- package/lib/icontentchannelmessage.d.ts +24 -0
- package/lib/icontentchannelmessage.d.ts.map +1 -0
- package/lib/icontentchannelmessage.js +1 -0
- package/lib/icontentdownloadjob.d.ts +7 -0
- package/lib/icontentdownloadjob.d.ts.map +1 -0
- package/lib/icontentdownloadjob.js +1 -0
- package/lib/icontentfileref.d.ts +9 -0
- package/lib/icontentfileref.d.ts.map +1 -0
- package/lib/icontentfileref.js +1 -0
- package/lib/icontentforwardedrequest.d.ts +9 -0
- package/lib/icontentforwardedrequest.d.ts.map +1 -0
- package/lib/icontentforwardedrequest.js +1 -0
- package/lib/icontentgraphicssession.d.ts +8 -0
- package/lib/icontentgraphicssession.d.ts.map +1 -0
- package/lib/icontentgraphicssession.js +1 -0
- package/lib/icontentgroupref.d.ts +6 -0
- package/lib/icontentgroupref.d.ts.map +1 -0
- package/lib/icontentgroupref.js +1 -0
- package/lib/icontentgroupstatus.d.ts +14 -0
- package/lib/icontentgroupstatus.d.ts.map +1 -0
- package/lib/icontentgroupstatus.js +1 -0
- package/lib/icontentinflightdownload.d.ts +8 -0
- package/lib/icontentinflightdownload.d.ts.map +1 -0
- package/lib/icontentinflightdownload.js +1 -0
- package/lib/icontentinstallcall.d.ts +6 -0
- package/lib/icontentinstallcall.d.ts.map +1 -0
- package/lib/icontentinstallcall.js +1 -0
- package/lib/icontentinstallererror.d.ts +7 -0
- package/lib/icontentinstallererror.d.ts.map +1 -0
- package/lib/icontentinstallererror.js +1 -0
- package/lib/icontentinstalleroptions.d.ts +20 -0
- package/lib/icontentinstalleroptions.d.ts.map +1 -0
- package/lib/icontentinstalleroptions.js +1 -0
- package/lib/icontentinstallerstate.d.ts +30 -0
- package/lib/icontentinstallerstate.d.ts.map +1 -0
- package/lib/icontentinstallerstate.js +1 -0
- package/lib/icontentinstalloptions.d.ts +5 -0
- package/lib/icontentinstalloptions.d.ts.map +1 -0
- package/lib/icontentinstalloptions.js +1 -0
- package/lib/icontentinstallprogress.d.ts +21 -0
- package/lib/icontentinstallprogress.d.ts.map +1 -0
- package/lib/icontentinstallprogress.js +1 -0
- package/lib/icontentmanifest.d.ts +10 -0
- package/lib/icontentmanifest.d.ts.map +1 -0
- package/lib/icontentmanifest.js +1 -0
- package/lib/icontentmanifestfile.d.ts +8 -0
- package/lib/icontentmanifestfile.d.ts.map +1 -0
- package/lib/icontentmanifestfile.js +1 -0
- package/lib/icontentmanifestgroup.d.ts +5 -0
- package/lib/icontentmanifestgroup.d.ts.map +1 -0
- package/lib/icontentmanifestgroup.js +1 -0
- package/lib/icontentpreparegraphicsoptions.d.ts +5 -0
- package/lib/icontentpreparegraphicsoptions.d.ts.map +1 -0
- package/lib/icontentpreparegraphicsoptions.js +1 -0
- package/lib/icontentprogresssession.d.ts +10 -0
- package/lib/icontentprogresssession.d.ts.map +1 -0
- package/lib/icontentprogresssession.js +1 -0
- package/lib/icontentretrywait.d.ts +6 -0
- package/lib/icontentretrywait.d.ts.map +1 -0
- package/lib/icontentretrywait.js +1 -0
- package/lib/icontentrootoptions.d.ts +6 -0
- package/lib/icontentrootoptions.d.ts.map +1 -0
- package/lib/icontentrootoptions.js +1 -0
- package/lib/icontentrootruntime.d.ts +8 -0
- package/lib/icontentrootruntime.d.ts.map +1 -0
- package/lib/icontentrootruntime.js +1 -0
- package/lib/icontentrootstate.d.ts +29 -0
- package/lib/icontentrootstate.d.ts.map +1 -0
- package/lib/icontentrootstate.js +1 -0
- package/lib/icontentstorageestimate.d.ts +8 -0
- package/lib/icontentstorageestimate.d.ts.map +1 -0
- package/lib/icontentstorageestimate.js +1 -0
- package/lib/icontentstoreresult.d.ts +8 -0
- package/lib/icontentstoreresult.d.ts.map +1 -0
- package/lib/icontentstoreresult.js +1 -0
- package/lib/icontentstorewaiter.d.ts +6 -0
- package/lib/icontentstorewaiter.d.ts.map +1 -0
- package/lib/icontentstorewaiter.js +1 -0
- package/lib/icontentupdateinfo.d.ts +8 -0
- package/lib/icontentupdateinfo.d.ts.map +1 -0
- package/lib/icontentupdateinfo.js +1 -0
- package/lib/idespawned.d.ts +5 -0
- package/lib/idespawned.d.ts.map +1 -0
- package/lib/idespawned.js +1 -0
- package/lib/iinputauthoritylost.d.ts +4 -0
- package/lib/iinputauthoritylost.d.ts.map +1 -0
- package/lib/iinputauthoritylost.js +1 -0
- package/lib/index.d.ts +141 -29
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +141 -29
- package/lib/iplayerjoined.d.ts +5 -0
- package/lib/iplayerjoined.d.ts.map +1 -0
- package/lib/iplayerjoined.js +1 -0
- package/lib/iplayerleft.d.ts +5 -0
- package/lib/iplayerleft.d.ts.map +1 -0
- package/lib/iplayerleft.js +1 -0
- package/lib/ispawned.d.ts +4 -0
- package/lib/ispawned.d.ts.map +1 -0
- package/lib/ispawned.js +1 -0
- package/lib/istateauthoritychanged.d.ts +4 -0
- package/lib/istateauthoritychanged.d.ts.map +1 -0
- package/lib/istateauthoritychanged.js +1 -0
- package/lib/loopbackdelivery.d.ts +6 -0
- package/lib/loopbackdelivery.d.ts.map +1 -0
- package/lib/loopbackdelivery.js +1 -0
- package/lib/loopbackhub.d.ts +206 -0
- package/lib/loopbackhub.d.ts.map +1 -0
- package/lib/loopbackhub.js +986 -0
- package/lib/loopbackhuboptions.d.ts +8 -0
- package/lib/loopbackhuboptions.d.ts.map +1 -0
- package/lib/loopbackhuboptions.js +1 -0
- package/lib/network_reconnect_grace_seconds.d.ts +2 -0
- package/lib/network_reconnect_grace_seconds.d.ts.map +1 -0
- package/lib/network_reconnect_grace_seconds.js +1 -0
- package/lib/networkstats.d.ts +51 -0
- package/lib/networkstats.d.ts.map +1 -0
- package/lib/networkstats.js +204 -0
- package/lib/networkstatssample.d.ts +7 -0
- package/lib/networkstatssample.d.ts.map +1 -0
- package/lib/networkstatssample.js +1 -0
- package/lib/networkstatssliderrow.d.ts +9 -0
- package/lib/networkstatssliderrow.d.ts.map +1 -0
- package/lib/networkstatssliderrow.js +1 -0
- package/lib/project.d.ts +2907 -133
- package/lib/project.d.ts.map +1 -1
- package/lib/project.js +14960 -3764
- package/lib/scenemanager.d.ts +4434 -51
- package/lib/scenemanager.d.ts.map +1 -1
- package/lib/scenemanager.js +18729 -1149
- package/lib/shadercodecachememorystorage.d.ts +10 -0
- package/lib/shadercodecachememorystorage.d.ts.map +1 -0
- package/lib/shadercodecachememorystorage.js +32 -0
- package/lib/workers/bt-content-worker.js +1180 -0
- package/lib/zigzagdecode.d.ts +2 -0
- package/lib/zigzagdecode.d.ts.map +1 -0
- package/lib/zigzagdecode.js +3 -0
- package/lib/zigzagencode.d.ts +2 -0
- package/lib/zigzagencode.d.ts.map +1 -0
- package/lib/zigzagencode.js +3 -0
- package/package.json +18 -13
- package/lib/entitycontroller.d.ts +0 -11
- package/lib/entitycontroller.d.ts.map +0 -1
- package/lib/entitycontroller.js +0 -41
- package/lib/sgshadowdepth.d.ts +0 -19
- package/lib/sgshadowdepth.d.ts.map +0 -1
- package/lib/sgshadowdepth.js +0 -214
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopbackhuboptions.d.ts","sourceRoot":"","sources":["../src/loopbackhuboptions.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,kBAAkB;IAE3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network_reconnect_grace_seconds.d.ts","sourceRoot":"","sources":["../src/network_reconnect_grace_seconds.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,+BAA+B,EAAE,MAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const NETWORK_RECONNECT_GRACE_SECONDS = 20;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { NetworkRunner } from './scenemanager';
|
|
2
|
+
export declare class NetworkStats {
|
|
3
|
+
private static readonly REFRESH_SECONDS;
|
|
4
|
+
private static readonly PANEL_WIDTH_PIXELS;
|
|
5
|
+
private static readonly FONT_SIZE_PIXELS;
|
|
6
|
+
private static readonly FONT_FAMILY;
|
|
7
|
+
private static readonly MARGIN_PIXELS;
|
|
8
|
+
private static readonly PADDING_PIXELS;
|
|
9
|
+
private static readonly TEXT_HEIGHT_PIXELS;
|
|
10
|
+
private static readonly ROW_HEIGHT_PIXELS;
|
|
11
|
+
private static readonly BACKGROUND_COLOR;
|
|
12
|
+
private static readonly TEXT_COLOR;
|
|
13
|
+
private static readonly SLIDER_COLOR;
|
|
14
|
+
private static readonly MAXIMUM_LATENCY_MS;
|
|
15
|
+
private static readonly MAXIMUM_JITTER_MS;
|
|
16
|
+
private static readonly MAXIMUM_LOSS_PERCENT;
|
|
17
|
+
private static readonly TOGGLE_KEY_CODE;
|
|
18
|
+
private static readonly BYTES_PER_KILOBYTE;
|
|
19
|
+
private static readonly MILLISECONDS_PER_SECOND;
|
|
20
|
+
private static readonly TEXTURE_NAME;
|
|
21
|
+
private static current;
|
|
22
|
+
readonly runner: NetworkRunner;
|
|
23
|
+
private readonly texture;
|
|
24
|
+
private readonly panel;
|
|
25
|
+
private readonly statsText;
|
|
26
|
+
private readonly keyObserver;
|
|
27
|
+
private readonly refreshObserver;
|
|
28
|
+
private readonly runnerCallbacks;
|
|
29
|
+
private readonly lastSample;
|
|
30
|
+
private secondsSinceRefresh;
|
|
31
|
+
private constructor();
|
|
32
|
+
static get isShown(): boolean;
|
|
33
|
+
static get isVisible(): boolean;
|
|
34
|
+
static get text(): string;
|
|
35
|
+
static show(runner: NetworkRunner): void;
|
|
36
|
+
static hide(): void;
|
|
37
|
+
static toggle(runner: NetworkRunner): void;
|
|
38
|
+
static refreshNow(): void;
|
|
39
|
+
private advance;
|
|
40
|
+
private refresh;
|
|
41
|
+
private addSliderRow;
|
|
42
|
+
private dispose;
|
|
43
|
+
private static sliderRows;
|
|
44
|
+
private static createPanel;
|
|
45
|
+
private static createStatsText;
|
|
46
|
+
private static createLabel;
|
|
47
|
+
private static styleText;
|
|
48
|
+
private static sampleCounters;
|
|
49
|
+
private static remoteBufferDepth;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=networkstats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkstats.d.ts","sourceRoot":"","sources":["../src/networkstats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4F,MAAM,gBAAgB,CAAC;AAazI,qBAAa,YAAY;IAEjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAc;IAEtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAE1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAa;IAElD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAa;IAEnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAc;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IAExE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAe;IAEzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IAExD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAc;IAE1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAe;IAEtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAgB;IAE1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAgB;IAE/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAyB;IAE7D,OAAO,CAAC,MAAM,CAAC,OAAO,CAA6B;IAGnD,SAAgB,MAAM,EAAE,aAAa,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAElC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAElD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAE1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEhD,OAAO,CAAC,mBAAmB,CAAa;IAMxC,OAAO;IAyBP,WAAkB,OAAO,IAAI,OAAO,CAEnC;IAGD,WAAkB,SAAS,IAAI,OAAO,CAErC;IAGD,WAAkB,IAAI,IAAI,MAAM,CAE/B;WAOa,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;WAOjC,IAAI,IAAI,IAAI;WAUZ,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;WAUnC,UAAU,IAAI,IAAI;IAUhC,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,OAAO;IA6Bf,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,MAAM,CAAC,UAAU;IASzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAgB1B,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B,OAAO,CAAC,MAAM,CAAC,SAAS;IAYxB,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAQnC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { GameMode } from './scenemanager';
|
|
2
|
+
import { KeyboardEventTypes } from '@babylonjs/core/Events/keyboardEvents';
|
|
3
|
+
import { StackPanel } from '@babylonjs/gui/2D/controls/stackPanel';
|
|
4
|
+
import { TextBlock } from '@babylonjs/gui/2D/controls/textBlock';
|
|
5
|
+
import { Rectangle } from '@babylonjs/gui/2D/controls/rectangle';
|
|
6
|
+
import { AdvancedDynamicTexture } from '@babylonjs/gui/2D/advancedDynamicTexture';
|
|
7
|
+
import { Slider } from '@babylonjs/gui/2D/controls/sliders/slider';
|
|
8
|
+
import { Control } from '@babylonjs/gui/2D/controls/control';
|
|
9
|
+
export class NetworkStats {
|
|
10
|
+
constructor(runner) {
|
|
11
|
+
this.secondsSinceRefresh = 0;
|
|
12
|
+
this.runner = runner;
|
|
13
|
+
const scene = runner.scene;
|
|
14
|
+
this.texture = AdvancedDynamicTexture.CreateFullscreenUI(NetworkStats.TEXTURE_NAME, true, scene);
|
|
15
|
+
this.panel = NetworkStats.createPanel();
|
|
16
|
+
this.texture.addControl(this.panel);
|
|
17
|
+
const rows = new StackPanel("FusionStatsRows");
|
|
18
|
+
this.panel.addControl(rows);
|
|
19
|
+
this.statsText = NetworkStats.createStatsText();
|
|
20
|
+
rows.addControl(this.statsText);
|
|
21
|
+
for (const row of NetworkStats.sliderRows())
|
|
22
|
+
this.addSliderRow(rows, row);
|
|
23
|
+
this.lastSample = NetworkStats.sampleCounters(runner);
|
|
24
|
+
this.keyObserver = scene.onKeyboardObservable.add((info) => {
|
|
25
|
+
if (info.type === KeyboardEventTypes.KEYDOWN && info.event.keyCode === NetworkStats.TOGGLE_KEY_CODE)
|
|
26
|
+
NetworkStats.toggle(runner);
|
|
27
|
+
});
|
|
28
|
+
this.refreshObserver = scene.onBeforeRenderObservable.add(() => this.advance(scene.getEngine().getDeltaTime() / NetworkStats.MILLISECONDS_PER_SECOND));
|
|
29
|
+
this.runnerCallbacks = {
|
|
30
|
+
onSceneLoadDone: (loadedRunner) => NetworkStats.show(loadedRunner),
|
|
31
|
+
onShutdown: () => NetworkStats.hide()
|
|
32
|
+
};
|
|
33
|
+
runner.addCallbacks(this.runnerCallbacks);
|
|
34
|
+
this.refresh(NetworkStats.REFRESH_SECONDS);
|
|
35
|
+
}
|
|
36
|
+
static get isShown() {
|
|
37
|
+
return NetworkStats.current != null;
|
|
38
|
+
}
|
|
39
|
+
static get isVisible() {
|
|
40
|
+
return NetworkStats.current != null && NetworkStats.current.panel.isVisible;
|
|
41
|
+
}
|
|
42
|
+
static get text() {
|
|
43
|
+
return (NetworkStats.current != null) ? NetworkStats.current.statsText.text : "";
|
|
44
|
+
}
|
|
45
|
+
static show(runner) {
|
|
46
|
+
NetworkStats.hide();
|
|
47
|
+
if (runner == null || runner.scene == null || runner.scene.isDisposed)
|
|
48
|
+
return;
|
|
49
|
+
NetworkStats.current = new NetworkStats(runner);
|
|
50
|
+
}
|
|
51
|
+
static hide() {
|
|
52
|
+
const overlay = NetworkStats.current;
|
|
53
|
+
NetworkStats.current = null;
|
|
54
|
+
if (overlay != null)
|
|
55
|
+
overlay.dispose();
|
|
56
|
+
}
|
|
57
|
+
static toggle(runner) {
|
|
58
|
+
const overlay = NetworkStats.current;
|
|
59
|
+
if (overlay == null || overlay.runner !== runner) {
|
|
60
|
+
NetworkStats.show(runner);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
overlay.panel.isVisible = !overlay.panel.isVisible;
|
|
64
|
+
}
|
|
65
|
+
static refreshNow() {
|
|
66
|
+
const overlay = NetworkStats.current;
|
|
67
|
+
if (overlay == null)
|
|
68
|
+
return;
|
|
69
|
+
overlay.refresh(Math.max(overlay.secondsSinceRefresh, NetworkStats.REFRESH_SECONDS));
|
|
70
|
+
}
|
|
71
|
+
advance(deltaSeconds) {
|
|
72
|
+
this.secondsSinceRefresh += deltaSeconds;
|
|
73
|
+
if (this.secondsSinceRefresh < NetworkStats.REFRESH_SECONDS)
|
|
74
|
+
return;
|
|
75
|
+
this.refresh(this.secondsSinceRefresh);
|
|
76
|
+
}
|
|
77
|
+
refresh(elapsedSeconds) {
|
|
78
|
+
const runner = this.runner;
|
|
79
|
+
const sample = NetworkStats.sampleCounters(runner);
|
|
80
|
+
const perSecond = (current, previous) => (elapsedSeconds > 0) ? (current - previous) / elapsedSeconds : 0;
|
|
81
|
+
const kilobytesInPerSecond = perSecond(sample.bytesIn, this.lastSample.bytesIn) / NetworkStats.BYTES_PER_KILOBYTE;
|
|
82
|
+
const kilobytesOutPerSecond = perSecond(sample.bytesOut, this.lastSample.bytesOut) / NetworkStats.BYTES_PER_KILOBYTE;
|
|
83
|
+
const modeName = (runner.gameMode != null) ? GameMode[runner.gameMode] : "Idle";
|
|
84
|
+
const linkName = (runner.transport != null && runner.transport.transportName != null) ? runner.transport.transportName : "—";
|
|
85
|
+
const lines = [
|
|
86
|
+
"Network " + modeName + " player " + runner.localPlayer.playerId,
|
|
87
|
+
"tick " + runner.tick,
|
|
88
|
+
"rtt " + Math.round(runner.timeSync.rttSeconds * NetworkStats.MILLISECONDS_PER_SECOND) + " ms",
|
|
89
|
+
"in/out " + kilobytesInPerSecond.toFixed(1) + " / " + kilobytesOutPerSecond.toFixed(1) + " kB/s",
|
|
90
|
+
"resim/s " + Math.round(perSecond(sample.resimulations, this.lastSample.resimulations)),
|
|
91
|
+
"buffer " + NetworkStats.remoteBufferDepth(runner) + " snapshots",
|
|
92
|
+
"corr/s " + perSecond(sample.corrections, this.lastSample.corrections).toFixed(1),
|
|
93
|
+
"interp " + Math.round(runner.interpolationDelaySeconds * NetworkStats.MILLISECONDS_PER_SECOND) + " ms",
|
|
94
|
+
"link " + linkName
|
|
95
|
+
];
|
|
96
|
+
this.statsText.text = lines.join("\n");
|
|
97
|
+
Object.assign(this.lastSample, sample);
|
|
98
|
+
this.secondsSinceRefresh = 0;
|
|
99
|
+
}
|
|
100
|
+
addSliderRow(rows, row) {
|
|
101
|
+
const conditions = (this.runner.transport != null) ? this.runner.transport.conditions : null;
|
|
102
|
+
const label = NetworkStats.createLabel();
|
|
103
|
+
const slider = new Slider("FusionStats" + row.label);
|
|
104
|
+
slider.minimum = 0;
|
|
105
|
+
slider.maximum = row.maximum;
|
|
106
|
+
slider.value = (conditions != null) ? row.read(conditions) : 0;
|
|
107
|
+
slider.height = NetworkStats.ROW_HEIGHT_PIXELS + "px";
|
|
108
|
+
slider.color = NetworkStats.SLIDER_COLOR;
|
|
109
|
+
slider.background = NetworkStats.BACKGROUND_COLOR;
|
|
110
|
+
slider.isEnabled = conditions != null;
|
|
111
|
+
const updateLabel = (value) => {
|
|
112
|
+
label.text = row.label + " " + Math.round(value) + " " + row.unit + ((conditions != null) ? "" : " (no simulator)");
|
|
113
|
+
};
|
|
114
|
+
slider.onValueChangedObservable.add((value) => {
|
|
115
|
+
if (conditions != null)
|
|
116
|
+
row.write(conditions, value);
|
|
117
|
+
updateLabel(value);
|
|
118
|
+
});
|
|
119
|
+
updateLabel(slider.value);
|
|
120
|
+
rows.addControl(label);
|
|
121
|
+
rows.addControl(slider);
|
|
122
|
+
}
|
|
123
|
+
dispose() {
|
|
124
|
+
const scene = this.texture.getScene();
|
|
125
|
+
if (scene != null) {
|
|
126
|
+
scene.onKeyboardObservable.remove(this.keyObserver);
|
|
127
|
+
scene.onBeforeRenderObservable.remove(this.refreshObserver);
|
|
128
|
+
}
|
|
129
|
+
this.runner.removeCallbacks(this.runnerCallbacks);
|
|
130
|
+
this.texture.dispose();
|
|
131
|
+
}
|
|
132
|
+
static sliderRows() {
|
|
133
|
+
return [
|
|
134
|
+
{ label: "latency", unit: "ms", maximum: NetworkStats.MAXIMUM_LATENCY_MS, read: (conditions) => conditions.latencyMs, write: (conditions, value) => { conditions.latencyMs = value; } },
|
|
135
|
+
{ label: "jitter", unit: "ms", maximum: NetworkStats.MAXIMUM_JITTER_MS, read: (conditions) => conditions.jitterMs, write: (conditions, value) => { conditions.jitterMs = value; } },
|
|
136
|
+
{ label: "loss", unit: "%", maximum: NetworkStats.MAXIMUM_LOSS_PERCENT, read: (conditions) => conditions.lossPercent, write: (conditions, value) => { conditions.lossPercent = value; } }
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
static createPanel() {
|
|
140
|
+
const panel = new Rectangle("FusionStatsPanel");
|
|
141
|
+
panel.width = NetworkStats.PANEL_WIDTH_PIXELS + "px";
|
|
142
|
+
panel.adaptHeightToChildren = true;
|
|
143
|
+
panel.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;
|
|
144
|
+
panel.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
|
|
145
|
+
panel.top = NetworkStats.MARGIN_PIXELS + "px";
|
|
146
|
+
panel.left = -NetworkStats.MARGIN_PIXELS + "px";
|
|
147
|
+
panel.thickness = 0;
|
|
148
|
+
panel.background = NetworkStats.BACKGROUND_COLOR;
|
|
149
|
+
panel.paddingLeft = NetworkStats.PADDING_PIXELS + "px";
|
|
150
|
+
panel.paddingRight = NetworkStats.PADDING_PIXELS + "px";
|
|
151
|
+
return panel;
|
|
152
|
+
}
|
|
153
|
+
static createStatsText() {
|
|
154
|
+
const text = new TextBlock("FusionStatsText");
|
|
155
|
+
text.height = NetworkStats.TEXT_HEIGHT_PIXELS + "px";
|
|
156
|
+
NetworkStats.styleText(text);
|
|
157
|
+
text.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
|
|
158
|
+
return text;
|
|
159
|
+
}
|
|
160
|
+
static createLabel() {
|
|
161
|
+
const label = new TextBlock();
|
|
162
|
+
label.height = NetworkStats.ROW_HEIGHT_PIXELS + "px";
|
|
163
|
+
NetworkStats.styleText(label);
|
|
164
|
+
return label;
|
|
165
|
+
}
|
|
166
|
+
static styleText(text) {
|
|
167
|
+
text.color = NetworkStats.TEXT_COLOR;
|
|
168
|
+
text.fontFamily = NetworkStats.FONT_FAMILY;
|
|
169
|
+
text.fontSize = NetworkStats.FONT_SIZE_PIXELS;
|
|
170
|
+
text.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
|
|
171
|
+
}
|
|
172
|
+
static sampleCounters(runner) {
|
|
173
|
+
const counters = runner.simulation.counters;
|
|
174
|
+
return { bytesIn: counters.bytesIn, bytesOut: counters.bytesOut, resimulations: counters.resimulations, corrections: counters.corrections };
|
|
175
|
+
}
|
|
176
|
+
static remoteBufferDepth(runner) {
|
|
177
|
+
const renderTime = runner.remoteRenderTime;
|
|
178
|
+
let depth = 0;
|
|
179
|
+
for (const networkObject of runner.getAllNetworkObjects()) {
|
|
180
|
+
if (networkObject.stateBuffer != null)
|
|
181
|
+
depth = Math.max(depth, networkObject.stateBuffer.countRemoteSnapshotsAfter(renderTime));
|
|
182
|
+
}
|
|
183
|
+
return depth;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
NetworkStats.REFRESH_SECONDS = 0.25;
|
|
187
|
+
NetworkStats.PANEL_WIDTH_PIXELS = 260;
|
|
188
|
+
NetworkStats.FONT_SIZE_PIXELS = 12;
|
|
189
|
+
NetworkStats.FONT_FAMILY = "monospace";
|
|
190
|
+
NetworkStats.MARGIN_PIXELS = 8;
|
|
191
|
+
NetworkStats.PADDING_PIXELS = 6;
|
|
192
|
+
NetworkStats.TEXT_HEIGHT_PIXELS = 135;
|
|
193
|
+
NetworkStats.ROW_HEIGHT_PIXELS = 18;
|
|
194
|
+
NetworkStats.BACKGROUND_COLOR = "rgba(0, 0, 0, 0.7)";
|
|
195
|
+
NetworkStats.TEXT_COLOR = "#e8f0ff";
|
|
196
|
+
NetworkStats.SLIDER_COLOR = "#4fa3ff";
|
|
197
|
+
NetworkStats.MAXIMUM_LATENCY_MS = 500;
|
|
198
|
+
NetworkStats.MAXIMUM_JITTER_MS = 100;
|
|
199
|
+
NetworkStats.MAXIMUM_LOSS_PERCENT = 20;
|
|
200
|
+
NetworkStats.TOGGLE_KEY_CODE = 119;
|
|
201
|
+
NetworkStats.BYTES_PER_KILOBYTE = 1024;
|
|
202
|
+
NetworkStats.MILLISECONDS_PER_SECOND = 1000;
|
|
203
|
+
NetworkStats.TEXTURE_NAME = "FusionStats";
|
|
204
|
+
NetworkStats.current = null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkstatssample.d.ts","sourceRoot":"","sources":["../src/networkstatssample.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,kBAAkB;IAE3B,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,CAAC;IAEtB,WAAW,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NetworkConditionsSimulator } from './scenemanager';
|
|
2
|
+
export interface NetworkStatsSliderRow {
|
|
3
|
+
label: string;
|
|
4
|
+
unit: string;
|
|
5
|
+
maximum: number;
|
|
6
|
+
read: (conditions: NetworkConditionsSimulator) => number;
|
|
7
|
+
write: (conditions: NetworkConditionsSimulator, value: number) => void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=networkstatssliderrow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkstatssliderrow.d.ts","sourceRoot":"","sources":["../src/networkstatssliderrow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,WAAW,qBAAqB;IAE9B,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,MAAM,CAAC;IAEzD,KAAK,EAAE,CAAC,UAAU,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|