@moku-labs/game 0.15.19 → 0.15.23
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/app/page.d.mts +1 -1
- package/dist/app/page.mjs +1 -1
- package/dist/app/system.d.mts +3 -3
- package/dist/app.d.mts +3 -3
- package/dist/app.mjs +1 -1
- package/dist/assets.d.mts +1 -1
- package/dist/{capture-D7XvoHdH.mjs → capture-PTJXDpxK.mjs} +117 -16
- package/dist/{commands-G9maNqTK.d.mts → commands-CV6Deuaj.d.mts} +5 -5
- package/dist/control.d.mts +4 -4
- package/dist/control.mjs +1 -1
- package/dist/{define-BAuGN0UM.d.mts → define-42KUe-al.d.mts} +2 -2
- package/dist/{headless-BA6ffzqD.mjs → headless-Bxxl_mQX.mjs} +1 -1
- package/dist/{headless-uUUH54Ij.d.mts → headless-DIbfzWkr.d.mts} +1 -1
- package/dist/{index-Cku9aRz_.d.mts → index-CHI7dTc9.d.mts} +26 -4
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +3 -3
- package/dist/inspect.d.mts +6 -6
- package/dist/inspect.mjs +1 -1
- package/dist/jsx-dev-runtime.d.mts +1 -1
- package/dist/jsx-runtime.d.mts +1 -1
- package/dist/{run-BqYmcNo7.mjs → run-DRcc2SKF.mjs} +2 -2
- package/dist/{runtime-CuMDZhii.d.mts → runtime-BcMjHiib.d.mts} +1 -1
- package/dist/{sources-BYKXYPhd.mjs → sources-Dpc4NXvG.mjs} +1 -1
- package/dist/{src-CXfBuKpl.mjs → src-hVe3f8GV.mjs} +1380 -302
- package/dist/testing.d.mts +4 -4
- package/dist/testing.mjs +2 -2
- package/dist/{types-rr56N0Ab.d.mts → types-9xAh1wGm.d.mts} +8 -5
- package/dist/{types-bwefoJES.d.mts → types-CHmCFReJ.d.mts} +219 -24
- package/dist/{types-4T4QTU48.d.mts → types-DmGs6x0c.d.mts} +24 -6
- package/dist/{types-DQtBMqRE.d.mts → types-DwREs5vb.d.mts} +4 -4
- package/dist/{types-DMsvVZZT.d.mts → types-L4nVF9Ny.d.mts} +2 -2
- package/dist/{visual-B-c5OIFB.d.mts → visual-CjXAp0DW.d.mts} +6 -6
- package/dist/{visual-DNM5oFYx.mjs → visual-kEC9nb-o.mjs} +20 -2
- package/dist/visual.d.mts +1 -1
- package/dist/visual.mjs +2 -2
- package/llms.txt +2 -2
- package/package.json +1 -1
package/dist/testing.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as createApp } from "./index-
|
|
3
|
-
import { b as saveOf, v as WithGameState, y as memory } from "./types-
|
|
4
|
-
import { a as createHeadless, i as ReproResult, n as HeadlessGame, o as runRepro, r as Repro, s as stepFrames, t as HeadlessApp } from "./headless-
|
|
1
|
+
import { $n as AnyFlow, Tr as Json, Zn as FeaturePlugin, _r as ClockSource, ar as NodeTable, lr as Descriptor, mr as NodeFx, pr as Hint, yr as FakeClock } from "./types-CHmCFReJ.mjs";
|
|
2
|
+
import { t as createApp } from "./index-CHI7dTc9.mjs";
|
|
3
|
+
import { b as saveOf, v as WithGameState, y as memory } from "./types-DwREs5vb.mjs";
|
|
4
|
+
import { a as createHeadless, i as ReproResult, n as HeadlessGame, o as runRepro, r as Repro, s as stepFrames, t as HeadlessApp } from "./headless-DIbfzWkr.mjs";
|
|
5
5
|
import { AnyPluginInstance } from "@moku-labs/core";
|
|
6
6
|
|
|
7
7
|
//#region src/plugins/clock/fake.d.ts
|
package/dist/testing.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $t as
|
|
1
|
+
import { $t as refuseStart, en as exit, m as flattenFeatures, rn as type, t as createApp } from "./src-hVe3f8GV.mjs";
|
|
2
2
|
import { n as saveOf, t as memory } from "./memory-CWlqhS7l.mjs";
|
|
3
3
|
import { t as fakeClock } from "./fake-6mazmHK3.mjs";
|
|
4
|
-
import { i as stepFrames, r as runRepro, t as createHeadless } from "./headless-
|
|
4
|
+
import { i as stepFrames, r as runRepro, t as createHeadless } from "./headless-Bxxl_mQX.mjs";
|
|
5
5
|
//#region src/testing/fake-fx.ts
|
|
6
6
|
/** The node path a refused `fx.start` names when the test gives none. */
|
|
7
7
|
const defaultPath = "test";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $
|
|
2
|
-
import { N as InputApi, R as I18nApi, X as StylesState, c as UiNode, i as Finding, l as LayoutState, n as ElementChange, o as JsxState, r as ElementMotion, w as TextApi } from "./types-
|
|
1
|
+
import { $ as PixiTexture, D as FilterSlot, Dn as MotionHandle, Fn as Api$2, Gr as Api$1, Mn as TrackOptions, Nn as TrackSegment, O as FilterSlotInputs, On as NumericFields, Q as PixiSprite, Sr as Api$6, Tr as Json, Vr as Events$5, X as PixiFilter, Z as PixiModule, an as AnyComponent, cn as ComponentHandle, cr as TypeTag, ct as Point, ei as Events$2, en as Api$3, fn as Entity, jn as ReducedMotion, k as SyncApi, lr as Descriptor, q as Api$4, s as Events$1, sn as AnyComponentValue, t as Api$5, ti as Require, un as ComponentType, ut as FilterCache, wn as Ease, wr as Events$3, y as Events$4 } from "./types-CHmCFReJ.mjs";
|
|
2
|
+
import { N as InputApi, R as I18nApi, X as StylesState, c as UiNode, i as Finding, l as LayoutState, n as ElementChange, o as JsxState, r as ElementMotion, w as TextApi } from "./types-DmGs6x0c.mjs";
|
|
3
3
|
import { Log } from "@moku-labs/common/browser";
|
|
4
4
|
import { PluginCtx } from "@moku-labs/core";
|
|
5
5
|
|
|
@@ -2984,11 +2984,12 @@ type UiApi = {
|
|
|
2984
2984
|
*/
|
|
2985
2985
|
find(key: string): Entity | undefined;
|
|
2986
2986
|
/**
|
|
2987
|
-
* Reads the live screen against the
|
|
2987
|
+
* Reads the live screen against the six rules: a tap target under `tapTargetPt` at the size
|
|
2988
2988
|
* it is drawn (a `fit: "contain"` on it or above it shrinks it), a text that does not fit its
|
|
2989
2989
|
* box in some registered locale, an absolute element with no `reason`, a clipping element
|
|
2990
|
-
* (`scroll`, `overflow: "hidden"`) whose style names a nine-slice it never draws,
|
|
2991
|
-
* element whose style sets a `zIndex` it
|
|
2990
|
+
* (`scroll`, `overflow: "hidden"`) whose style names a nine-slice it never draws, a style that
|
|
2991
|
+
* is `hollow` with no nine-slice to hollow, and a root element whose style sets a `zIndex` it
|
|
2992
|
+
* ignores. Never throws; empty when nothing is mounted.
|
|
2992
2993
|
*
|
|
2993
2994
|
* @returns One finding per rule and element.
|
|
2994
2995
|
* @example
|
|
@@ -2997,6 +2998,8 @@ type UiApi = {
|
|
|
2997
2998
|
* app.ui.lint(); // [{ rule: "tap-target", key: "cell", detail: "39 x 39 pt" }]
|
|
2998
2999
|
* // A list styled with a nine-slice: the clip keeps it from drawing.
|
|
2999
3000
|
* app.ui.lint(); // [{ rule: "nine-slice-clipped", key: "orders", detail: "scroll" }]
|
|
3001
|
+
* // A frame made hollow before its nine-slice was named: there is no rim to draw.
|
|
3002
|
+
* app.ui.lint(); // [{ rule: "hollow-without-nine-slice", key: "memFrost", detail: "stack" }]
|
|
3000
3003
|
* // A screen root that asks to be drawn over the others: the layer decides that.
|
|
3001
3004
|
* app.ui.lint(); // [{ rule: "z-index-on-root", key: "board", detail: "zIndex 2" }]
|
|
3002
3005
|
* ```
|
|
@@ -157,7 +157,7 @@ type AdaptiveRate = {
|
|
|
157
157
|
type RateMode = "fixed" | "auto" | "forced";
|
|
158
158
|
/**
|
|
159
159
|
* Why the rate is what it is, the reason of the last change: `"start"` (nothing changed it yet), `"display"` (the
|
|
160
|
-
* display rate became known or changed), `"missed"` (drawn frames came late), `"headroom"` (a return after steady
|
|
160
|
+
* display rate became known or changed), `"missed"` (drawn frames came late for 2 s in a row, at once within 3 s of a step of the rule), `"headroom"` (a return after steady
|
|
161
161
|
* room), `"thermal"` (the native shell reported heat), `"forced"` / `"auto"` (`setRate`).
|
|
162
162
|
*
|
|
163
163
|
* @example
|
|
@@ -384,7 +384,7 @@ type Config$8 = {
|
|
|
384
384
|
/**
|
|
385
385
|
* Adaptive frame rate. `false` (the default): the loop runs at `maxFps`, as before. With `{ floor }` the loop runs
|
|
386
386
|
* at the highest divisor of the display's refresh rate at or below `maxFps`, drops to the next divisor when drawn
|
|
387
|
-
* frames come late, and returns when there is room again; never below `floor`. Off in a headless app and on a fake
|
|
387
|
+
* frames come late for 2 s in a row (one late burst, a mount or an upload, never drops it), and returns when there is room again; never below `floor`. Off in a headless app and on a fake
|
|
388
388
|
* clock.
|
|
389
389
|
*/
|
|
390
390
|
adaptive: false | AdaptiveRate;
|
|
@@ -502,7 +502,8 @@ type Governor = {
|
|
|
502
502
|
returnTail: number; /** Samples in the return window. */
|
|
503
503
|
returnDrawn: number; /** Late samples in the return window. */
|
|
504
504
|
returnMissed: number; /** Heavy samples in the return window. */
|
|
505
|
-
returnHeavy: number; /** When the
|
|
505
|
+
returnHeavy: number; /** When the drop window last turned late and stayed late; NaN while it is not. */
|
|
506
|
+
lateSince: number; /** When the rate or its mode last changed. */
|
|
506
507
|
switchedAt: number; /** When the rule last returned a step up; -Infinity before the first return. */
|
|
507
508
|
lastReturnAt: number; /** The last step of the rule was a return: its first drop judges it. */
|
|
508
509
|
climbed: boolean; /** How long a return waits after a switch, ms. */
|
|
@@ -718,7 +719,7 @@ type Api$7 = {
|
|
|
718
719
|
* ```ts
|
|
719
720
|
* // The settings screen shows the rate the game runs at on this phone.
|
|
720
721
|
* app.time.rate(); // { fps: 120, mode: "auto", reason: "start", displayHz: 120, ladder: [120, 60], thermal: "none", asked: null, heldBy: null, scale: 1 }
|
|
721
|
-
* // on the memory screen of a weak phone, a
|
|
722
|
+
* // on the memory screen of a weak phone, a few seconds later (late for 2 s, then the scale and the rate step down):
|
|
722
723
|
* app.time.rate(); // { fps: 60, mode: "auto", reason: "missed", displayHz: 120, ladder: [120, 60], thermal: "none", asked: null, heldBy: null, scale: 0.75 }
|
|
723
724
|
* // a game with maxFps 120 and no adaptive, on a 60 Hz phone:
|
|
724
725
|
* app.time.rate(); // { fps: 60, mode: "fixed", reason: "start", displayHz: 60, ladder: [], thermal: null, asked: 120, heldBy: "panel", scale: 1 }
|
|
@@ -763,7 +764,7 @@ type Api$7 = {
|
|
|
763
764
|
* ```ts
|
|
764
765
|
* // The renderer on a phone, at start:
|
|
765
766
|
* ctx.require(timePlugin).allowScale(0.75); // { fps: 120, …, scale: 1 }
|
|
766
|
-
* // on the memory screen of a weak phone,
|
|
767
|
+
* // on the memory screen of a weak phone, a few seconds later (late for 2 s in a row):
|
|
767
768
|
* app.time.rate(); // { fps: 120, mode: "auto", reason: "missed", …, scale: 0.75 }
|
|
768
769
|
* // the player picked a resolution in the settings: the renderer takes the scale away from the rule
|
|
769
770
|
* ctx.require(timePlugin).allowScale(1); // { fps: 120, …, scale: 1 }
|
|
@@ -7681,6 +7682,15 @@ type HostInternal = {
|
|
|
7681
7682
|
* @returns True when it called Pixi.
|
|
7682
7683
|
*/
|
|
7683
7684
|
renderProbe(container: PixiContainer, target?: PixiRenderTexture): boolean;
|
|
7685
|
+
/**
|
|
7686
|
+
* Puts a texture source on the GPU now with Pixi's public `renderer.texture.initSource(source)`: the GPU texture is
|
|
7687
|
+
* made and the pixels are uploaded, once; a source Pixi made already costs a lookup. Called by the upload queue of
|
|
7688
|
+
* `sync` before the stage pass of a drawn frame. A no-op while nothing draws. What Pixi throws is thrown on: the
|
|
7689
|
+
* caller logs it and counts the source done.
|
|
7690
|
+
*
|
|
7691
|
+
* @param source - The source of a texture `assets` loaded.
|
|
7692
|
+
*/
|
|
7693
|
+
initSource(source: PixiTextureSource): void;
|
|
7684
7694
|
/**
|
|
7685
7695
|
* Tells whether the stage pass clears the canvas before it draws (`renderer.background.clearBeforeRender`, Pixi's
|
|
7686
7696
|
* default, which the engine never turns off): only then may a probe draw onto the canvas.
|
|
@@ -7911,7 +7921,17 @@ type KeptRecord = {
|
|
|
7911
7921
|
depth: number; /** Bytes of s1, s2, s3 (estimate, P6.1). */
|
|
7912
7922
|
bytes: number; /** A settle retake is owed: the view came to rest off its picture's grid (P2.5). */
|
|
7913
7923
|
settle: boolean; /** Bytes a refused take asked for; the record is not offered again until they fit (P6.3). */
|
|
7914
|
-
refused: number;
|
|
7924
|
+
refused: number;
|
|
7925
|
+
/**
|
|
7926
|
+
* The picture was cut to the canvas at its take (F53): a move or another canvas size would show what it left out,
|
|
7927
|
+
* so either takes it again.
|
|
7928
|
+
*/
|
|
7929
|
+
cut: boolean;
|
|
7930
|
+
/**
|
|
7931
|
+
* The quad draws the subtree picture itself at the stack's alpha, with no stage 3 (F54): every enabled filter is an
|
|
7932
|
+
* `AlphaFilter` at the canvas resolution.
|
|
7933
|
+
*/
|
|
7934
|
+
direct: boolean; /** A view of kind `"Display"` hangs in the subtree; `undefined` until a take attempt walks it (P4.1). */
|
|
7915
7935
|
displays: boolean | undefined;
|
|
7916
7936
|
};
|
|
7917
7937
|
/** One picture of an overlay's range (P7), keyed by the owner overlay's entity. */
|
|
@@ -9017,7 +9037,7 @@ type PictureRequest = {
|
|
|
9017
9037
|
reject: (error: Error) => void;
|
|
9018
9038
|
};
|
|
9019
9039
|
declare namespace types_d_exports$2 {
|
|
9020
|
-
export { AdaptiveScale, Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorSections, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
|
|
9040
|
+
export { AdaptiveScale, Api$1 as Api, AspectRange, BitmapFontData, CaptureOptions, Captured, Config$2 as Config, CountingClasses, CoverFrame, CreateTextureOptions$1 as CreateTextureOptions, DebugApi, DebugSwitches, DemandFrame, DemandModule, DemandReason, DemandState, Deps$2 as Deps, DisplayAdapter, DisplayEntry, DisplaysApi, DrawCounter, Events$2 as Events, FilterCache, FilterSlot, FilterSlotInputs, FiltersApi, FontsApi, FrameColumns, FrameReadResult, FrameReadout, FrameRecord, FrameRing, HitBox, HostApi, HostInternal, HostModule, HostState, HudPartValue, KeptInternal, KeptModule, KeptRange, KeptState, KeptStats, KernelSlice$2 as KernelSlice, LayerEntry, LegendEntry, LongFrameEntry, Modules, MonitorApi, MonitorConfig, MonitorCounts, MonitorDeps, MonitorInternal, MonitorModule, MonitorSections, MonitorState, NineBorders$1 as NineBorders, Orientation, OverlayEventDetail, OverlayLevelValue, OverlayMode, OverlayPhase, OverlayReport, OverlayValue, OverlayWhat, PassKind, PassRecord, PerfCause, PerfChange, PerfChangeEntry, PerfCollectorLine, PerfCounts, PerfDisplay, PerfEventLine, PerfEventName, PerfGapLine, PerfHeaderLine, PerfLogLine, PerfLongFrameLine, PerfMarkLine, PerfMeasured, PerfMonitorApi, PerfSampleLine, PerfSpikeLine, PerfStartupLine, PerfTelemetryLine, PerfThermalLine, PictureRect, PixiApplication, PixiBitmapFont, PixiBounds, PixiContainer, PixiFilter, PixiFilterManager, PixiGraphics, PixiMatrix, PixiMesh, PixiModule, PixiNineSliceSprite, PixiRectangle, PixiRenderTexture, PixiSprite, PixiTexture, PixiTextureSource, Point, PoolTrim, PoolTrimDetail, ProblemEventDetail, ProblemRule, Rect, RenderStats, RendererCtx, RendererKind, SafeArea, ShaderEventDetail, ShaderWhat, SliceFrame, State$2 as State, SyncApi, SyncCounts, SyncInternal, SyncModule, SyncState, TeardownScope, TextureProvider, TextureUsage, TexturesApi, Under, View, ViewKind, ViewportApi, ViewportInternal, ViewportModule, ViewportSize, ViewportState, WarmDetail };
|
|
9021
9041
|
}
|
|
9022
9042
|
/**
|
|
9023
9043
|
* The part of Pixi the engine uses: the classes `sync` builds views from (a `Rectangle` frames the
|
|
@@ -9031,7 +9051,8 @@ declare namespace types_d_exports$2 {
|
|
|
9031
9051
|
* batched distance-field text `host` installs: Pixi's `Batcher` with its geometry and buffers, the bitmap text pipe
|
|
9032
9052
|
* and the batcher pipe it subclasses, and the WGSL and GLSL shader pieces of the batch's SDF shader, and the WebGPU
|
|
9033
9053
|
* render target system with its adaptor, the pipeline system and the stencil system the lazy canvas pass of `host`
|
|
9034
|
-
* subclasses or registers again (`host/render-pass.ts`)
|
|
9054
|
+
* subclasses or registers again (`host/render-pass.ts`), and the mesh and its geometry the rim-only nine-slice of
|
|
9055
|
+
* `sync` is drawn with (`sync/hollow.ts`). The module object
|
|
9035
9056
|
* never arrives through a static import: `config.loadPixi()` returns it, so a game without a screen carries no
|
|
9036
9057
|
* Pixi in its bundle.
|
|
9037
9058
|
*
|
|
@@ -9047,7 +9068,7 @@ declare namespace types_d_exports$2 {
|
|
|
9047
9068
|
* pixi.defaultFilterVert.startsWith("in vec2 aPosition;"); // true
|
|
9048
9069
|
* ```
|
|
9049
9070
|
*/
|
|
9050
|
-
type PixiModule = Pick<typeof import("pixi.js"), "AlphaFilter" | "Application" | "Batcher" | "BatcherPipe" | "BitmapFont" | "BitmapText" | "BitmapTextPipe" | "BlurFilter" | "Bounds" | "Buffer" | "BufferUsage" | "Cache" | "ColorMatrixFilter" | "Container" | "DefaultBatcher" | "DisplacementFilter" | "ExtensionType" | "Filter" | "FilterSystem" | "Geometry" | "GlProgram" | "GlTextureSystem" | "GpuBatchAdaptor" | "GpuEncoderSystem" | "GpuGraphicsAdaptor" | "GpuProgram" | "GpuRenderTargetAdaptor" | "GpuRenderTargetSystem" | "GpuStencilSystem" | "GpuTextureSystem" | "Graphics" | "Matrix" | "NineSliceSprite" | "NoiseFilter" | "Particle" | "ParticleContainer" | "PipelineSystem" | "Rectangle" | "RenderGroupPipe" | "RenderTexture" | "Shader" | "Sprite" | "Texture" | "TexturePool" | "UniformGroup" | "bitmapFontTextParser" | "bitmapFontXMLStringParser" | "colorBit" | "colorBitGl" | "compileHighShaderGlProgram" | "compileHighShaderGpuProgram" | "defaultFilterVert" | "extensions" | "generateTextureBatchBit" | "generateTextureBatchBitGl" | "getBatchSamplersUniformGroup" | "mSDFBit" | "mSDFBitGl" | "roundPixelsBit" | "roundPixelsBitGl">;
|
|
9071
|
+
type PixiModule = Pick<typeof import("pixi.js"), "AlphaFilter" | "Application" | "Batcher" | "BatcherPipe" | "BitmapFont" | "BitmapText" | "BitmapTextPipe" | "BlurFilter" | "Bounds" | "Buffer" | "BufferUsage" | "Cache" | "ColorMatrixFilter" | "Container" | "DefaultBatcher" | "DisplacementFilter" | "ExtensionType" | "Filter" | "FilterSystem" | "Geometry" | "GlProgram" | "GlTextureSystem" | "GpuBatchAdaptor" | "GpuEncoderSystem" | "GpuGraphicsAdaptor" | "GpuProgram" | "GpuRenderTargetAdaptor" | "GpuRenderTargetSystem" | "GpuStencilSystem" | "GpuTextureSystem" | "Graphics" | "Matrix" | "Mesh" | "MeshGeometry" | "NineSliceSprite" | "NoiseFilter" | "Particle" | "ParticleContainer" | "PipelineSystem" | "Rectangle" | "RenderGroupPipe" | "RenderTexture" | "Shader" | "Sprite" | "Texture" | "TexturePool" | "UniformGroup" | "bitmapFontTextParser" | "bitmapFontXMLStringParser" | "colorBit" | "colorBitGl" | "compileHighShaderGlProgram" | "compileHighShaderGpuProgram" | "defaultFilterVert" | "extensions" | "generateTextureBatchBit" | "generateTextureBatchBitGl" | "getBatchSamplersUniformGroup" | "mSDFBit" | "mSDFBitGl" | "roundPixelsBit" | "roundPixelsBitGl">;
|
|
9051
9072
|
/**
|
|
9052
9073
|
* One Pixi application: renderer, canvas and stage.
|
|
9053
9074
|
*/
|
|
@@ -9069,6 +9090,10 @@ type PixiSprite = InstanceType<PixiModule["Sprite"]>;
|
|
|
9069
9090
|
* A Pixi nine-slice sprite.
|
|
9070
9091
|
*/
|
|
9071
9092
|
type PixiNineSliceSprite = InstanceType<PixiModule["NineSliceSprite"]>;
|
|
9093
|
+
/**
|
|
9094
|
+
* A Pixi mesh: what the rim-only nine-slice of a `NineSlice` with `hollow: true` is drawn with.
|
|
9095
|
+
*/
|
|
9096
|
+
type PixiMesh = InstanceType<PixiModule["Mesh"]>;
|
|
9072
9097
|
/**
|
|
9073
9098
|
* A Pixi graphics object: what a `Shape` component is drawn with, and what clips its children.
|
|
9074
9099
|
*/
|
|
@@ -9077,6 +9102,11 @@ type PixiGraphics = InstanceType<PixiModule["Graphics"]>;
|
|
|
9077
9102
|
* A Pixi texture. `assets` owns its lifetime; the renderer only makes and destroys it on request.
|
|
9078
9103
|
*/
|
|
9079
9104
|
type PixiTexture = InstanceType<PixiModule["Texture"]>;
|
|
9105
|
+
/**
|
|
9106
|
+
* The source of a Pixi texture: the pixels the GPU holds once, shared by every slice of an atlas page. What the
|
|
9107
|
+
* upload queue of `sync.textures.upload` hands to Pixi's texture system.
|
|
9108
|
+
*/
|
|
9109
|
+
type PixiTextureSource = PixiTexture["source"];
|
|
9080
9110
|
/**
|
|
9081
9111
|
* A texture Pixi renders into: what a kept picture is drawn into, engine-owned and destroyed by the engine.
|
|
9082
9112
|
*/
|
|
@@ -9206,6 +9236,8 @@ type AdaptiveScale = {
|
|
|
9206
9236
|
* createApp({ pluginConfigs: { renderer: { mount: "#game", keptMb: 32 } } }); // a game with small art
|
|
9207
9237
|
* // A short splash: two probe draws a frame create the pipelines sooner.
|
|
9208
9238
|
* createApp({ pluginConfigs: { renderer: { mount: "#game", onDemand: true, warm: 2 } } });
|
|
9239
|
+
* // A desktop game with a fast GPU: `assets.warm` puts two textures a drawn frame on the GPU instead of one.
|
|
9240
|
+
* createApp({ pluginConfigs: { renderer: { mount: "#game", uploads: 2 } } });
|
|
9209
9241
|
* // A game whose art must stay sharp: the adaptive frame rate drops the rate, never the resolution.
|
|
9210
9242
|
* createApp({ pluginConfigs: { renderer: { mount: "#game", adaptiveScale: false } } });
|
|
9211
9243
|
* ```
|
|
@@ -9255,6 +9287,22 @@ type Config$2 = {
|
|
|
9255
9287
|
* created in the first frame that draws with it, as before. A whole number from 0 to 16; default 1.
|
|
9256
9288
|
*/
|
|
9257
9289
|
warm: number;
|
|
9290
|
+
/**
|
|
9291
|
+
* Textures `sync.textures.upload` (what `assets.warm` calls) puts on the GPU per drawn frame, before the stage pass,
|
|
9292
|
+
* so the frame that first shows them does not upload them all at once. One upload costs about 9 ms on a Galaxy A26
|
|
9293
|
+
* whatever its size (median, 41 ms at worst): the show frame of 6 cold textures (9.4 MB) took 55 ms there, 8 ms with
|
|
9294
|
+
* them uploaded before. So the budget counts textures, not bytes. 0 turns the queue off: `upload` answers false and
|
|
9295
|
+
* the first draw of a texture uploads it, as before. A whole number from 0 to 8; default 1.
|
|
9296
|
+
*
|
|
9297
|
+
* @example
|
|
9298
|
+
* ```ts
|
|
9299
|
+
* // The memory screen's 6 textures, warmed while the board still shows: 3 drawn frames at 2 a frame.
|
|
9300
|
+
* const app = createApp({ pluginConfigs: { renderer: { mount: "#game", uploads: 2 } } });
|
|
9301
|
+
* await app.start();
|
|
9302
|
+
* await app.assets.warm("ep01.memory"); // resolves after the third drawn frame
|
|
9303
|
+
* ```
|
|
9304
|
+
*/
|
|
9305
|
+
uploads: number;
|
|
9258
9306
|
/**
|
|
9259
9307
|
* The render scale of the adaptive frame rate on a GPU-bound screen: `{ floor: 0.75, devices: "phone" }` by default,
|
|
9260
9308
|
* `false` keeps the resolution. Needs `time.adaptive`. A player's `monitor.setResolution` wins over it. Every change
|
|
@@ -9539,7 +9587,8 @@ type SpriteValue = {
|
|
|
9539
9587
|
* strokes the bounds and the four cut lines over the panel: cyan, red when the corners overlap or
|
|
9540
9588
|
* the texture is missing. `clip` masks the children of the entity to the `width × height` box,
|
|
9541
9589
|
* the same rule as `Shape.clip`: the mask is a filled rectangle and is never drawn, and the panel
|
|
9542
|
-
* itself is never masked. `alpha` fades the panel and the entity's children.
|
|
9590
|
+
* itself is never masked. `alpha` fades the panel and the entity's children. `hollow` draws the
|
|
9591
|
+
* rim alone: the eight border pieces, never the centre.
|
|
9543
9592
|
*
|
|
9544
9593
|
* @example
|
|
9545
9594
|
* ```ts
|
|
@@ -9555,6 +9604,10 @@ type SpriteValue = {
|
|
|
9555
9604
|
* const field: NineSliceValue = {
|
|
9556
9605
|
* ...value, texture: "ui.field", width: 480, height: 96, clip: true
|
|
9557
9606
|
* };
|
|
9607
|
+
* // The frost frame of the memory screen: its rim is drawn, its empty centre costs no pixel.
|
|
9608
|
+
* const frost: NineSliceValue = {
|
|
9609
|
+
* ...value, texture: "glass.frost", width: 960, height: 1400, hollow: true
|
|
9610
|
+
* };
|
|
9558
9611
|
* ```
|
|
9559
9612
|
*/
|
|
9560
9613
|
type NineSliceValue = {
|
|
@@ -9565,6 +9618,20 @@ type NineSliceValue = {
|
|
|
9565
9618
|
tint: number;
|
|
9566
9619
|
debug: boolean;
|
|
9567
9620
|
clip: boolean;
|
|
9621
|
+
/**
|
|
9622
|
+
* Draws the rim alone: the four corners and the four edges of the slicing, never the centre cell, so a frame or a
|
|
9623
|
+
* glass panel whose middle is empty fills no pixel there. The hit box stays the whole `width × height`, and `debug`
|
|
9624
|
+
* and `clip` work as on a filled panel. Absent by default, read as `false`, so a panel that never sets it keeps the
|
|
9625
|
+
* values it had before the field existed.
|
|
9626
|
+
*
|
|
9627
|
+
* @example
|
|
9628
|
+
* ```ts
|
|
9629
|
+
* // A 960 x 1400 frame over the memory board, its slices 48 u wide: 8 rim pieces are drawn, the 864 x 1304 centre
|
|
9630
|
+
* // is not, and a tap in the middle still lands on the frame's entity.
|
|
9631
|
+
* world.ecs.spawn(owner, [Layer({ name: "ui" }), Transform(), NineSlice({ texture: "glass.frost", width: 960, height: 1400, hollow: true })]);
|
|
9632
|
+
* ```
|
|
9633
|
+
*/
|
|
9634
|
+
hollow?: boolean;
|
|
9568
9635
|
};
|
|
9569
9636
|
/**
|
|
9570
9637
|
* The escape hatch: the game owns a Pixi object and `sync` only attaches and detaches it.
|
|
@@ -9712,16 +9779,9 @@ declare const Sprite: ComponentType<SpriteValue>;
|
|
|
9712
9779
|
/**
|
|
9713
9780
|
* A stretchable panel, sized in reference units, with its own alpha and tint. `debug: true` draws
|
|
9714
9781
|
* the slice outline over it. `clip: true` masks the children of the entity to the panel box.
|
|
9782
|
+
* `hollow: true` draws its rim alone, never the centre cell.
|
|
9715
9783
|
*/
|
|
9716
|
-
declare const NineSlice$1: ComponentType<
|
|
9717
|
-
texture: string;
|
|
9718
|
-
width: number;
|
|
9719
|
-
height: number;
|
|
9720
|
-
alpha: number;
|
|
9721
|
-
tint: number;
|
|
9722
|
-
debug: boolean;
|
|
9723
|
-
clip: boolean;
|
|
9724
|
-
}>;
|
|
9784
|
+
declare const NineSlice$1: ComponentType<NineSliceValue>;
|
|
9725
9785
|
/**
|
|
9726
9786
|
* The entity this view moves with. `0` means no parent.
|
|
9727
9787
|
*/
|
|
@@ -10084,6 +10144,29 @@ type TexturesApi = {
|
|
|
10084
10144
|
* ```
|
|
10085
10145
|
*/
|
|
10086
10146
|
invalidate(keys: readonly string[]): void;
|
|
10147
|
+
/**
|
|
10148
|
+
* Puts textures on the GPU before a screen shows them: each texture's source is queued once and uploaded with Pixi's
|
|
10149
|
+
* `renderer.texture.initSource` before the stage pass of a drawn frame, `renderer.uploads` a frame (one by default),
|
|
10150
|
+
* and the renderer asks for the next frame while sources wait. The slices of one atlas page share its source, so the
|
|
10151
|
+
* page is uploaded once. On a Galaxy A26 one upload costs about 9 ms whatever its size: the frame that showed 6 cold
|
|
10152
|
+
* textures took 55 ms, 8 ms once they were uploaded before. Answers `true` once every source of this call went
|
|
10153
|
+
* through, at once when they all did on this device; `false` at once while nothing draws (headless, a lost device)
|
|
10154
|
+
* or with `uploads: 0`, and `false` when the renderer stops or the device is lost before the queue reached them. A
|
|
10155
|
+
* source whose upload throws is logged (`renderer:upload-failed`) and counted done: its first draw uploads it, as
|
|
10156
|
+
* before. A source destroyed while it waits is skipped. The renderer never destroys a texture it was handed.
|
|
10157
|
+
*
|
|
10158
|
+
* @param textures - The textures; `assets` hands every texture and page of a bundle it loaded.
|
|
10159
|
+
* @returns Whether every source is on the GPU.
|
|
10160
|
+
* @example
|
|
10161
|
+
* ```ts
|
|
10162
|
+
* // `assets.warm("ep01.memory")`: the bundle is loaded; its 6 textures go to the GPU while the board still shows.
|
|
10163
|
+
* const renderer = ctx.require(rendererPlugin);
|
|
10164
|
+
* const textures = [...record.textures.values(), ...record.pages.values()];
|
|
10165
|
+
* const uploaded = await renderer.sync.textures.upload(textures); // true 6 drawn frames later (uploads: 1)
|
|
10166
|
+
* await renderer.sync.textures.upload(textures); // true at once: they are on this device already
|
|
10167
|
+
* ```
|
|
10168
|
+
*/
|
|
10169
|
+
upload(textures: readonly PixiTexture[]): Promise<boolean>;
|
|
10087
10170
|
};
|
|
10088
10171
|
/**
|
|
10089
10172
|
* The display registry a plugin above extends, `app.renderer.sync.displays`. `Sprite`,
|
|
@@ -10720,6 +10803,14 @@ type SyncInternal = {
|
|
|
10720
10803
|
* @returns True when it drew a probe in this frame: the frame is then no sample of the adaptive rate.
|
|
10721
10804
|
*/
|
|
10722
10805
|
warmStep(): boolean;
|
|
10806
|
+
/**
|
|
10807
|
+
* Uploads up to `renderer.uploads` queued texture sources (F60), in a drawn frame, right after the warm-up's probes
|
|
10808
|
+
* and before the stage pass. Asks for the next frame while sources wait. One compare and no allocation while the
|
|
10809
|
+
* queue is empty.
|
|
10810
|
+
*
|
|
10811
|
+
* @returns True when it uploaded a source in this frame: the frame is then no sample of the adaptive rate.
|
|
10812
|
+
*/
|
|
10813
|
+
uploadStep(): boolean;
|
|
10723
10814
|
/**
|
|
10724
10815
|
* Subscribes to the end of a warm-up run: the queue became empty (the monitor of an agent build writes the `warm`
|
|
10725
10816
|
* event line). Emptied by `stopSync`.
|
|
@@ -10838,6 +10929,60 @@ type WarmState = {
|
|
|
10838
10929
|
reported: Set<unknown>;
|
|
10839
10930
|
listeners: WarmListener[];
|
|
10840
10931
|
};
|
|
10932
|
+
/**
|
|
10933
|
+
* One call of `textures.upload` that waits: how many of its sources are still queued, and its answer. Not public.
|
|
10934
|
+
*/
|
|
10935
|
+
type UploadWaiter = {
|
|
10936
|
+
left: number;
|
|
10937
|
+
resolve: (ok: boolean) => void;
|
|
10938
|
+
};
|
|
10939
|
+
/**
|
|
10940
|
+
* The texture upload queue (F60): the sources not yet uploaded from `head` on, emptied when the head reaches the end
|
|
10941
|
+
* (the warm-up's pattern); for each queued source the calls that wait for it; the sources uploaded on this device. A
|
|
10942
|
+
* step with an empty queue reads two numbers. Not public.
|
|
10943
|
+
*/
|
|
10944
|
+
type UploadState = {
|
|
10945
|
+
/** The sources to upload, from `head` on; each queued once. */queue: PixiTextureSource[];
|
|
10946
|
+
head: number;
|
|
10947
|
+
/**
|
|
10948
|
+
* The calls each queued source is waited for by, in call order: a source in it is in the queue, and every call that
|
|
10949
|
+
* waits is in it under one of its sources. Answered `false` when the renderer stops or the device is lost.
|
|
10950
|
+
*/
|
|
10951
|
+
waiting: Map<PixiTextureSource, UploadWaiter[]>;
|
|
10952
|
+
/**
|
|
10953
|
+
* The sources that went through `initSource` on this device, or threw there: a call naming only these answers at
|
|
10954
|
+
* once.
|
|
10955
|
+
*/
|
|
10956
|
+
done: WeakSet<PixiTextureSource>;
|
|
10957
|
+
};
|
|
10958
|
+
/**
|
|
10959
|
+
* What a nine-slice view's object offers `sync`, whichever class draws it: Pixi's `NineSliceSprite`, or the engine's
|
|
10960
|
+
* rim-only mesh of a `hollow` one (`hollow.ts`). The six numbers rebuild the panel when written, the tint and the
|
|
10961
|
+
* texture are written as on a sprite. Not public.
|
|
10962
|
+
*/
|
|
10963
|
+
type SliceLike = PixiContainer & {
|
|
10964
|
+
leftWidth: number;
|
|
10965
|
+
topHeight: number;
|
|
10966
|
+
rightWidth: number;
|
|
10967
|
+
bottomHeight: number;
|
|
10968
|
+
width: number;
|
|
10969
|
+
height: number;
|
|
10970
|
+
tint: number;
|
|
10971
|
+
texture: PixiTexture;
|
|
10972
|
+
};
|
|
10973
|
+
/**
|
|
10974
|
+
* The engine's rim-only nine-slice (F59): a Pixi `Mesh` of 16 vertices and 48 indices, the eight border cells of the
|
|
10975
|
+
* slicing and never the centre, driven through the same numbers as a `NineSliceSprite`. `hollow` tells it apart. Not
|
|
10976
|
+
* public.
|
|
10977
|
+
*/
|
|
10978
|
+
type HollowSlice = SliceLike & {
|
|
10979
|
+
readonly hollow: true;
|
|
10980
|
+
};
|
|
10981
|
+
/**
|
|
10982
|
+
* The class of the rim-only nine-slice, made once over the Pixi module the renderer loaded (Pixi arrives lazily, so
|
|
10983
|
+
* the class cannot be declared at import). Built with the texture it draws first. Not public.
|
|
10984
|
+
*/
|
|
10985
|
+
type HollowClass = new (texture: PixiTexture) => HollowSlice;
|
|
10841
10986
|
/**
|
|
10842
10987
|
* Where the overlay step's event lines go: the monitor's `event`. Private to the renderer.
|
|
10843
10988
|
*/
|
|
@@ -11012,7 +11157,9 @@ type SyncState = {
|
|
|
11012
11157
|
* view, so a still frame walks no entry.
|
|
11013
11158
|
*/
|
|
11014
11159
|
viewlessEntries: boolean; /** The pipeline warm-up (F4). */
|
|
11015
|
-
warm: WarmState;
|
|
11160
|
+
warm: WarmState; /** The texture upload queue (F60). */
|
|
11161
|
+
upload: UploadState; /** The class of the rim-only nine-slice (F59), made at the first hollow view over the loaded Pixi module. */
|
|
11162
|
+
hollowClass: HollowClass | undefined;
|
|
11016
11163
|
/**
|
|
11017
11164
|
* The kind of each Pixi filter a slot named, for the performance log of an agent build; a
|
|
11018
11165
|
* blur's two passes are filters of their own and are in it too. Empty in a production build.
|
|
@@ -11410,7 +11557,7 @@ type RunContext = {
|
|
|
11410
11557
|
signal: AbortSignal;
|
|
11411
11558
|
};
|
|
11412
11559
|
declare namespace types_d_exports {
|
|
11413
|
-
export { Api, AssetKind, AssetStamps, AssetsCtx, AssetsIo, AtlasFrame, AtlasPage, AudioAsset, AudioMime, BundleCompanion, BundleMap, BundleRecord, BundleRelease, BundleSpec, BundleUsage, Config, CreateTextureOptions, DecodedImage, DefineBundles, Deps, Events, FetchResponse, FlowRest, FontAsset, FontPage, HotSwap, Inflight, KernelSlice, LoadBundles, LoadReason, LoadResult, LoadedAssets, LoadedFont, Manifest, ManifestBundle, ManifestFile, NineBorders, NineSlice, PreloadQueue, State, Texture, Tier, Usage };
|
|
11560
|
+
export { Api, AssetKind, AssetStamps, AssetsCtx, AssetsIo, AtlasFrame, AtlasPage, AudioAsset, AudioMime, BundleCompanion, BundleMap, BundleRecord, BundleRelease, BundleSpec, BundleUsage, Config, CreateTextureOptions, DecodedImage, DefineBundles, Deps, Events, FetchResponse, FlowRest, FontAsset, FontPage, HotSwap, Inflight, KernelSlice, LoadBundles, LoadReason, LoadResult, LoadedAssets, LoadedFont, Manifest, ManifestBundle, ManifestFile, NineBorders, NineSlice, PreloadQueue, ReadyBundles, State, Texture, Tier, Usage, WarmEntry };
|
|
11414
11561
|
}
|
|
11415
11562
|
/**
|
|
11416
11563
|
* When a bundle is loaded. `boot` and `core` stay for the whole session, `scene` and `feature`
|
|
@@ -11808,6 +11955,18 @@ type DefineBundles<Key extends string> = (map: Partial<Record<Key, BundleSpec>>)
|
|
|
11808
11955
|
* ```
|
|
11809
11956
|
*/
|
|
11810
11957
|
type LoadBundles<Key extends string> = (bundle: Key | readonly Key[]) => Descriptor<LoadResult | undefined>;
|
|
11958
|
+
/**
|
|
11959
|
+
* The `ready` descriptor helper bound to the bundle keys of one game (F52). The descriptor resolves
|
|
11960
|
+
* `true` when every bundle is loaded and on the GPU, `false` while the node should rest until the
|
|
11961
|
+
* inbox event `ready`, or `undefined` in an app without `assets`.
|
|
11962
|
+
*
|
|
11963
|
+
* @example
|
|
11964
|
+
* ```ts
|
|
11965
|
+
* const readyGameBundle: ReadyBundles<"board" | "board.chains"> = ready;
|
|
11966
|
+
* readyGameBundle("board"); // { kind: "ready", payload: { bundles: ["board"] } }
|
|
11967
|
+
* ```
|
|
11968
|
+
*/
|
|
11969
|
+
type ReadyBundles<Key extends string> = (bundle: Key | readonly Key[]) => Descriptor<boolean | undefined>;
|
|
11811
11970
|
/**
|
|
11812
11971
|
* What the `load` effect resolves with, so a loading node can write its own progress.
|
|
11813
11972
|
*
|
|
@@ -11912,6 +12071,15 @@ type PreloadQueue = {
|
|
|
11912
12071
|
bundles: string[];
|
|
11913
12072
|
controller: AbortController;
|
|
11914
12073
|
};
|
|
12074
|
+
/**
|
|
12075
|
+
* One warm of a bundle (F60): the promise every caller of `warm` joins, and `done` once it
|
|
12076
|
+
* resolved, so the `ready` effect answers without waiting. Dropped when the bundle unloads, and
|
|
12077
|
+
* when the warm fails, so the next call tries again.
|
|
12078
|
+
*/
|
|
12079
|
+
type WarmEntry = {
|
|
12080
|
+
promise: Promise<void>;
|
|
12081
|
+
done: boolean;
|
|
12082
|
+
};
|
|
11915
12083
|
/**
|
|
11916
12084
|
* What the keys watch of `moku-game dev` knows about the asset files of a game: the default export
|
|
11917
12085
|
* of the generated `.moku/assets-stamp.ts`. The dev hot swap compares it with the map it applied
|
|
@@ -11968,8 +12136,8 @@ type State = {
|
|
|
11968
12136
|
useCounter: number; /** Keys already reported missing, so one key warns and starts its background load once. */
|
|
11969
12137
|
warned: Set<string>;
|
|
11970
12138
|
/**
|
|
11971
|
-
* `onEnter`, the `load`
|
|
11972
|
-
* `assets.leave` of phase `sync`.
|
|
12139
|
+
* `onEnter`, the `load` and `ready` handlers, the texture provider, the start and the end of an exit in `world`,
|
|
12140
|
+
* and the system `assets.leave` of phase `sync`.
|
|
11973
12141
|
*/
|
|
11974
12142
|
removers: Array<() => void>; /** The `files` map of the stamp the dev hot swap applied last. `undefined` until the first swap. */
|
|
11975
12143
|
stamps: Readonly<Record<string, string>> | undefined; /** The running dev hot swap. The next one waits for it, so two swaps never overlap. */
|
|
@@ -11983,6 +12151,12 @@ type State = {
|
|
|
11983
12151
|
exiting: number; /** Registered companions, in registration order. */
|
|
11984
12152
|
companions: BundleCompanion[]; /** A live rest was announced; the arriving node's `load` stage runs the release. */
|
|
11985
12153
|
restPending: boolean;
|
|
12154
|
+
/**
|
|
12155
|
+
* Bundles whose warm for a `ready` effect failed (not an abort): `ready` counts them as there, so a node never
|
|
12156
|
+
* hangs on them, until a later load of the bundle succeeds (F52).
|
|
12157
|
+
*/
|
|
12158
|
+
readyFailed: Set<string>; /** One running or finished warm per bundle, joined by a second `warm`; dropped when the bundle unloads (F60). */
|
|
12159
|
+
warmed: Map<string, WarmEntry>;
|
|
11986
12160
|
};
|
|
11987
12161
|
/**
|
|
11988
12162
|
* What `usage()` reports about one loaded bundle.
|
|
@@ -12110,6 +12284,27 @@ type Api = {
|
|
|
12110
12284
|
* ```
|
|
12111
12285
|
*/
|
|
12112
12286
|
load(bundle: string): Promise<void>;
|
|
12287
|
+
/**
|
|
12288
|
+
* Puts the textures of a bundle on the GPU before a scene shows them (F60): loads the bundle when
|
|
12289
|
+
* it is not loaded, then hands every texture and atlas page of it to
|
|
12290
|
+
* `renderer.sync.textures.upload`, which uploads `renderer.uploads` of them a drawn frame. A
|
|
12291
|
+
* second call joins the running or finished warm of the same bundle; an unload forgets it, so a
|
|
12292
|
+
* reload warms again. It resolves also when the renderer could not upload (no device,
|
|
12293
|
+
* `uploads: 0`, a stop): the first draw uploads then, as before. Headless it resolves at once,
|
|
12294
|
+
* as `load` does. The `ready` effect waits for it.
|
|
12295
|
+
*
|
|
12296
|
+
* @param bundle - Name of a bundle of the manifest.
|
|
12297
|
+
* @returns A promise that resolves once the bundle is loaded and its textures went to the GPU.
|
|
12298
|
+
* @throws {Error} When the manifest has no such bundle, and when a file fails to load.
|
|
12299
|
+
* @example
|
|
12300
|
+
* ```ts
|
|
12301
|
+
* // Outside a node: the board's art goes to the GPU while the menu still shows.
|
|
12302
|
+
* await app.assets.warm("ep01.board"); // the board's textures are on the GPU, 1 per drawn frame
|
|
12303
|
+
* app.assets.isLoaded("ep01.board"); // true
|
|
12304
|
+
* await app.assets.warm("ep01.board"); // at once: the same warm, nothing is uploaded twice
|
|
12305
|
+
* ```
|
|
12306
|
+
*/
|
|
12307
|
+
warm(bundle: string): Promise<void>;
|
|
12113
12308
|
/**
|
|
12114
12309
|
* Destroys the textures of a bundle and tells `renderer` that its keys are gone; every
|
|
12115
12310
|
* companion's `unload` runs. A pinned bundle and the tiers `boot` and `core` are refused with a
|
|
@@ -12337,4 +12532,4 @@ type BundleCompanion = {
|
|
|
12337
12532
|
unload(bundle: string): void;
|
|
12338
12533
|
};
|
|
12339
12534
|
//#endregion
|
|
12340
|
-
export {
|
|
12535
|
+
export { PixiTexture as $, AnyFlow as $n, Config$9 as $r, DEMAND_REASONS as $t, Display as A, ProjectionSpec as An, PlayerStateProvider as Ar, PerfCollectorLine as At, Sprite as B, HudKeysOf as Bn, Config$7 as Br, PerfMeasured as Bt, ScenesApi as C, DescriptionNode as Cn, Config$6 as Cr, PERF_LOG_VERSION as Ct, FilterSlot as D, MotionHandle as Dn, State$6 as Dr, PerfCause as Dt, DebugSwitches as E, MotionCause as En, Root as Er, PassRecord as Et, Overlay as F, Api$3 as Fn, SnapshotOf as Fr, PerfGapLine as Ft, sprite as G, defineFlow as Gn, Api$7 as Gr, PerfThermalLine as Gt, SpriteValue as H, State$4 as Hn, PauseReason as Hr, PerfSpikeLine as Ht, OverlayValue as I, BundlesOf as In, StoreApi as Ir, PerfHeaderLine as It, Config$2 as J, to as Jn, RateChange as Jr, ProblemRule as Jt, AdaptiveScale as K, exit as Kn, Config$8 as Kr, PoolTrimDetail as Kt, Parent as L, Config$4 as Ln, RngApi as Lr, PerfLogLine as Lt, HudPartValue as M, TrackOptions as Mn, SaveDoc as Mr, PerfDisplay as Mt, NineSlice$1 as N, TrackSegment as Nn, SaveUnreadableError as Nr, PerfEventLine as Nt, FilterSlotInputs as O, NumericFields as On, types_d_exports$6 as Or, PerfChange as Ot, NineSliceValue as P, ViewHandle as Pn, Snapshot as Pr, PerfEventName as Pt, PixiSprite as Q, FeatureTree as Qn, types_d_exports$8 as Qr, WarmDetail as Qt, Shape as R, EmitterIdOf as Rn, RngState as Rr, PerfLongFrameLine as Rt, SceneSpec as S, ChangeHook as Sn, Api$5 as Sr, PERF_GAP_BUCKETS as St, types_d_exports$1 as T, Motion as Tn, Json as Tr, PassKind as Tt, Transform as U, TextStylesOf as Un, State$7 as Ur, PerfStartupLine as Ut, SpriteOptions as V, Position as Vn, Events$6 as Vr, PerfSampleLine as Vt, TransformValue as W, types_d_exports$4 as Wn, types_d_exports$7 as Wr, PerfTelemetryLine as Wt, PixiFilter as X, FeatureDescription as Xn, ThermalReading as Xr, ShaderEventDetail as Xt, MonitorConfig as Y, type as Yn, State$8 as Yr, SHADER_WHATS as Yt, PixiModule as Z, FeaturePlugin as Zn, Time as Zr, ShaderWhat as Zt, AnySceneProjection as _, QueryTerm as _n, ClockSource as _r, MONITOR_SECTIONS as _t, Config as a, AnyComponent as an, NodeTable as ar, MonitorCounts as at, LayerMap as b, SystemFor as bn, State$5 as br, OverlayWhat as bt, LoadBundles as c, ComponentHandle as cn, TypeTag as cr, Point as ct, Manifest as d, ComponentValue as dn, EffectOptions as dr, FrameColumns as dt, Events$8 as ei, Api$2 as en, Bookmark as er, PoolTrim as et, ReadyBundles as f, Entity as fn, GuideOptions as fr, FrameReadResult as ft, types_d_exports as g, Narrowed as gn, Api$4 as gr, LongFrameEntry as gt, Usage as h, Mut as hn, Answer as hr, FrameRing as ht, BundleSpec as i, types_d_exports$3 as in, JournalEntry as ir, Captured as it, HudPart as j, ReducedMotion as jn, ProviderCall as jr, PerfCounts as jt, SyncApi as k, ProjectionMotion as kn, Patch as kr, PerfChangeEntry as kt, LoadReason as l, ComponentSchema as ln, Descriptor as lr, ViewportSize as lt, Tier as m, FrameDiff as mn, NodeFx as mr, FrameRecord as mt, AssetsIo as n, Explained as nn, FlowGraph as nr, Under as nt, DefineBundles as o, AnyComponentType as on, RouteStep as or, RenderStats as ot, State as p, EntitySnapshot as pn, Hint as pr, FrameReadout as pt, Api$1 as q, slot as qn, FrameRate as qr, ProblemEventDetail as qt, BundleMap as r, State$3 as rn, FlowState as rr, types_d_exports$2 as rt, Events as s, AnyComponentValue as sn, SceneIdOf as sr, Orientation as st, Api as t, Require as ti, Config$3 as tn, DefineNode as tr, State$2 as tt, LoadResult as u, ComponentType as un, Effect as ur, FilterCache as ut, DefineScene as v, ResourceType as vn, Config$5 as vr, MonitorSections as vt, State$1 as w, Ease as wn, Events$5 as wr, PROBLEM_RULES as wt, SceneDefinition as x, TagType as xn, types_d_exports$5 as xr, PERF_CAUSES as xt, Events$1 as y, SystemDefinition as yn, FakeClock as yr, OverlayEventDetail as yt, ShapeValue as z, GameTypes as zn, Api$6 as zr, PerfMarkLine as zt };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Dn as MotionHandle, En as MotionCause, Fn as Api$1, Gr as Api, On as NumericFields, Pn as ViewHandle, Sn as ChangeHook, Tn as Motion, Tr as Json, W as TransformValue, an as AnyComponent, en as Api$2, fn as Entity, gr as Api$5, hr as Answer, jn as ReducedMotion, kn as ProjectionMotion, lr as Descriptor, lt as ViewportSize, on as AnyComponentType, pr as Hint, q as Api$3, s as Events$1, sn as AnyComponentValue, t as Api$4, ti as Require, un as ComponentType, wn as Ease, xn as TagType } from "./types-CHmCFReJ.mjs";
|
|
2
2
|
import { Log } from "@moku-labs/common/browser";
|
|
3
3
|
import { PluginCtx } from "@moku-labs/core";
|
|
4
4
|
import { Node, Yoga } from "yoga-layout/load";
|
|
@@ -157,7 +157,21 @@ type VisualStyle<Asset extends string = string> = {
|
|
|
157
157
|
* but `image`, `icon` and `text` takes it; a clipping element (`scroll`, `overflow: "hidden"`)
|
|
158
158
|
* keeps its rectangle, which carries the clip.
|
|
159
159
|
*/
|
|
160
|
-
nineSlice?: Asset;
|
|
160
|
+
nineSlice?: Asset;
|
|
161
|
+
/**
|
|
162
|
+
* Draws the nine-slice of the style as its rim alone: the eight border pieces, never the
|
|
163
|
+
* centre, so a frame or a glass panel with an empty middle fills no pixel there. `false` by
|
|
164
|
+
* default. Does nothing without `nineSlice`; `lint()` reports it as
|
|
165
|
+
* `hollow-without-nine-slice`. A tap in the middle still lands on the element.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```tsx
|
|
169
|
+
* // The frost frame of the memory screen: its rim is drawn, its centre shows the board under it.
|
|
170
|
+
* <stack key="memFrost" style={{ nineSlice: "glass.frost", hollow: true, width: 960, height: 1400 }} />;
|
|
171
|
+
* app.world.ecs.get(app.ui.find("memFrost") ?? 0, NineSlice)?.hollow; // true
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
hollow?: boolean; /** Multiplies the colour of a nine-slice or an image. */
|
|
161
175
|
tint?: number;
|
|
162
176
|
/**
|
|
163
177
|
* Outlines the nine-slice of the style: its bounds and the four slice lines, cyan, red when
|
|
@@ -1741,7 +1755,8 @@ type State = {
|
|
|
1741
1755
|
* container drawn under an older count is built again on its next update.
|
|
1742
1756
|
*/
|
|
1743
1757
|
generation: number; /** Warning keys already written, so a style, a tag, a glyph or a font warns once. */
|
|
1744
|
-
warned: Set<string>; /** The
|
|
1758
|
+
warned: Set<string>; /** The `"box"` styles a layout measured at a width: a label of one with no box fits its row, it is not outside a layout (F65). */
|
|
1759
|
+
laidOut: Set<string>; /** The system, the step after the layout flush, the two world hooks and the display adapter. */
|
|
1745
1760
|
removers: Array<() => void>;
|
|
1746
1761
|
};
|
|
1747
1762
|
/**
|
|
@@ -1760,7 +1775,9 @@ type TextApi = {
|
|
|
1760
1775
|
* The size of a piece of text in reference pixels, from the advance table of the style's font.
|
|
1761
1776
|
* A `Message` is formatted in the current locale first. Never touches a canvas, so the answer
|
|
1762
1777
|
* is the same in a browser and in plain Bun. Cached per style and resolved string, and per
|
|
1763
|
-
* width for a `"box"` style.
|
|
1778
|
+
* width for a `"box"` style. A call with a width is a layout's (`ui.layout` is the caller it is
|
|
1779
|
+
* meant for): it marks the style as laid out, so a label of it with no box (one that fits its
|
|
1780
|
+
* row) no longer warns `wrap "box" outside layout` (F65).
|
|
1764
1781
|
*
|
|
1765
1782
|
* @param content - A plain string, or what `tr` returned.
|
|
1766
1783
|
* @param style - A registered style name. An unknown one warns once and measures as `body`.
|
|
@@ -2685,7 +2702,8 @@ type Element = {
|
|
|
2685
2702
|
height: number;
|
|
2686
2703
|
};
|
|
2687
2704
|
measuredWidth?: number | undefined; /** True once the text wrapped at its box: from then on `ui` writes its box, 0 when it fits. */
|
|
2688
|
-
boxed?: boolean;
|
|
2705
|
+
boxed?: boolean; /** True once its nine-slice was hollow: from then on `ui` writes `hollow`, false when the style drops it. */
|
|
2706
|
+
hollowed?: boolean;
|
|
2689
2707
|
basis?: StyleBasis; /** The motions of its hooks that started a `repeat: "forever"` track; made with the first one. */
|
|
2690
2708
|
endless?: Set<MotionHandle>; /** What its enter hook did at the `Box`, until `ui.enter` keeps the play or plays it again (F49). */
|
|
2691
2709
|
posed?: PosedEnter | undefined;
|
|
@@ -3017,7 +3035,7 @@ type UiNode = {
|
|
|
3017
3035
|
* ```
|
|
3018
3036
|
*/
|
|
3019
3037
|
type Finding = {
|
|
3020
|
-
rule: "tap-target" | "text-overflow" | "absolute-without-reason" | "nine-slice-clipped" | "z-index-on-root";
|
|
3038
|
+
rule: "tap-target" | "text-overflow" | "absolute-without-reason" | "nine-slice-clipped" | "hollow-without-nine-slice" | "z-index-on-root";
|
|
3021
3039
|
key: string;
|
|
3022
3040
|
detail: string;
|
|
3023
3041
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Ar as
|
|
2
|
-
import { o as AudioContextLike, s as Config$4 } from "./types-
|
|
3
|
-
import { R as I18nApi, U as StringTable, W as TextKey } from "./types-
|
|
4
|
-
import {
|
|
1
|
+
import { $n as AnyFlow, Ar as PlayerStateProvider, Cr as Config, Fr as SnapshotOf, J as Config$2, Ln as Config$1, Mr as SaveDoc, Tr as Json, Z as PixiModule, Zn as FeaturePlugin, _r as ClockSource, a as Config$3, cr as TypeTag, d as Manifest, jr as ProviderCall, n as AssetsIo, st as Orientation, yr as FakeClock } from "./types-CHmCFReJ.mjs";
|
|
2
|
+
import { o as AudioContextLike, s as Config$4 } from "./types-9xAh1wGm.mjs";
|
|
3
|
+
import { R as I18nApi, U as StringTable, W as TextKey } from "./types-DmGs6x0c.mjs";
|
|
4
|
+
import { St as effectsPlugin, Tt as audioPlugin, ht as PlatformProvider, i as screen, pt as platformPlugin, t as createApp } from "./index-CHI7dTc9.mjs";
|
|
5
5
|
import { AnyPluginInstance } from "@moku-labs/core";
|
|
6
6
|
|
|
7
7
|
//#region src/plugins/model/store/providers/memory.d.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as HeadlessApp } from "./headless-
|
|
1
|
+
import { Pr as Snapshot, Tr as Json } from "./types-CHmCFReJ.mjs";
|
|
2
|
+
import { t as HeadlessApp } from "./headless-DIbfzWkr.mjs";
|
|
3
3
|
import { Log } from "@moku-labs/common/browser";
|
|
4
4
|
|
|
5
5
|
//#region src/plugins/flow/doors/types.d.ts
|