@react-three/fiber 9.2.0 → 9.3.0
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/CHANGELOG.md +1168 -1160
- package/dist/declarations/src/core/events.d.ts +92 -92
- package/dist/declarations/src/core/hooks.d.ts +53 -53
- package/dist/declarations/src/core/index.d.ts +13 -13
- package/dist/declarations/src/core/loop.d.ts +31 -31
- package/dist/declarations/src/core/reconciler.d.ts +50 -50
- package/dist/declarations/src/core/renderer.d.ts +89 -89
- package/dist/declarations/src/core/store.d.ts +130 -130
- package/dist/declarations/src/core/utils.d.ts +191 -191
- package/dist/declarations/src/index.d.ts +6 -6
- package/dist/declarations/src/native/Canvas.d.ts +13 -13
- package/dist/declarations/src/native/events.d.ts +4 -4
- package/dist/declarations/src/native.d.ts +6 -6
- package/dist/declarations/src/three-types.d.ts +68 -68
- package/dist/declarations/src/web/Canvas.d.ts +23 -23
- package/dist/declarations/src/web/events.d.ts +4 -4
- package/dist/{events-e63d28a3.cjs.dev.js → events-d0449b76.cjs.dev.js} +91 -91
- package/dist/{events-59fae97e.cjs.prod.js → events-d0a20a9c.cjs.prod.js} +91 -91
- package/dist/{events-cf57b220.esm.js → events-e3cb66e2.esm.js} +90 -90
- package/dist/react-three-fiber.cjs.dev.js +5 -5
- package/dist/react-three-fiber.cjs.prod.js +5 -5
- package/dist/react-three-fiber.esm.js +6 -6
- package/native/dist/react-three-fiber-native.cjs.dev.js +8 -6
- package/native/dist/react-three-fiber-native.cjs.prod.js +8 -6
- package/native/dist/react-three-fiber-native.esm.js +9 -7
- package/native/package.json +5 -5
- package/package.json +2 -2
- package/readme.md +253 -253
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var THREE = require('three');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var constants = require('react-reconciler/constants');
|
|
5
|
+
var THREE = require('three');
|
|
6
6
|
var traditional = require('zustand/traditional');
|
|
7
|
+
var suspendReact = require('suspend-react');
|
|
7
8
|
var Reconciler = require('react-reconciler');
|
|
8
9
|
var scheduler = require('scheduler');
|
|
9
|
-
var suspendReact = require('suspend-react');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
11
|
var itsFine = require('its-fine');
|
|
12
12
|
|
|
@@ -30,25 +30,25 @@ function _interopNamespace(e) {
|
|
|
30
30
|
return Object.freeze(n);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
34
33
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
34
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
35
35
|
var Reconciler__default = /*#__PURE__*/_interopDefault(Reconciler);
|
|
36
36
|
|
|
37
37
|
var threeTypes = /*#__PURE__*/Object.freeze({
|
|
38
38
|
__proto__: null
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* Returns the instance's initial (outmost) root.
|
|
41
|
+
/**
|
|
42
|
+
* Returns the instance's initial (outmost) root.
|
|
43
43
|
*/
|
|
44
44
|
function findInitialRoot(instance) {
|
|
45
45
|
let root = instance.root;
|
|
46
46
|
while (root.getState().previousRoot) root = root.getState().previousRoot;
|
|
47
47
|
return root;
|
|
48
48
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Safely flush async effects when testing, simulating a legacy root.
|
|
51
|
-
* @deprecated Import from React instead. import { act } from 'react'
|
|
49
|
+
/**
|
|
50
|
+
* Safely flush async effects when testing, simulating a legacy root.
|
|
51
|
+
* @deprecated Import from React instead. import { act } from 'react'
|
|
52
52
|
*/
|
|
53
53
|
// Reference with computed key to break Webpack static analysis
|
|
54
54
|
// https://github.com/webpack/webpack/issues/14814
|
|
@@ -57,14 +57,14 @@ const isOrthographicCamera = def => def && def.isOrthographicCamera;
|
|
|
57
57
|
const isRef = obj => obj && obj.hasOwnProperty('current');
|
|
58
58
|
const isColorRepresentation = value => value != null && (typeof value === 'string' || typeof value === 'number' || value.isColor);
|
|
59
59
|
|
|
60
|
-
/**
|
|
61
|
-
* An SSR-friendly useLayoutEffect.
|
|
62
|
-
*
|
|
63
|
-
* React currently throws a warning when using useLayoutEffect on the server.
|
|
64
|
-
* To get around it, we can conditionally useEffect on the server (no-op) and
|
|
65
|
-
* useLayoutEffect elsewhere.
|
|
66
|
-
*
|
|
67
|
-
* @see https://github.com/facebook/react/issues/14927
|
|
60
|
+
/**
|
|
61
|
+
* An SSR-friendly useLayoutEffect.
|
|
62
|
+
*
|
|
63
|
+
* React currently throws a warning when using useLayoutEffect on the server.
|
|
64
|
+
* To get around it, we can conditionally useEffect on the server (no-op) and
|
|
65
|
+
* useLayoutEffect elsewhere.
|
|
66
|
+
*
|
|
67
|
+
* @see https://github.com/facebook/react/issues/14927
|
|
68
68
|
*/
|
|
69
69
|
const useIsomorphicLayoutEffect = /* @__PURE__ */((_window$document, _window$navigator) => typeof window !== 'undefined' && (((_window$document = window.document) == null ? void 0 : _window$document.createElement) || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === 'ReactNative'))() ? React__namespace.useLayoutEffect : React__namespace.useEffect;
|
|
70
70
|
function useMutableCallback(fn) {
|
|
@@ -72,8 +72,8 @@ function useMutableCallback(fn) {
|
|
|
72
72
|
useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]);
|
|
73
73
|
return ref;
|
|
74
74
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Bridges renderer Context and StrictMode from a primary renderer.
|
|
75
|
+
/**
|
|
76
|
+
* Bridges renderer Context and StrictMode from a primary renderer.
|
|
77
77
|
*/
|
|
78
78
|
function useBridge() {
|
|
79
79
|
const fiber = itsFine.useFiber();
|
|
@@ -125,8 +125,8 @@ function calculateDpr(dpr) {
|
|
|
125
125
|
return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
/**
|
|
129
|
-
* Returns instance root state
|
|
128
|
+
/**
|
|
129
|
+
* Returns instance root state
|
|
130
130
|
*/
|
|
131
131
|
function getRootState(obj) {
|
|
132
132
|
var _r3f;
|
|
@@ -489,9 +489,9 @@ function makeId(event) {
|
|
|
489
489
|
return (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;
|
|
490
490
|
}
|
|
491
491
|
|
|
492
|
-
/**
|
|
493
|
-
* Release pointer captures.
|
|
494
|
-
* This is called by releasePointerCapture in the API, and when an object is removed.
|
|
492
|
+
/**
|
|
493
|
+
* Release pointer captures.
|
|
494
|
+
* This is called by releasePointerCapture in the API, and when an object is removed.
|
|
495
495
|
*/
|
|
496
496
|
function releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {
|
|
497
497
|
const captureData = captures.get(obj);
|
|
@@ -838,19 +838,19 @@ function createEvents(store) {
|
|
|
838
838
|
if (!(instance != null && instance.eventCount)) return;
|
|
839
839
|
const handlers = instance.handlers;
|
|
840
840
|
|
|
841
|
-
/*
|
|
842
|
-
MAYBE TODO, DELETE IF NOT:
|
|
843
|
-
Check if the object is captured, captured events should not have intersects running in parallel
|
|
844
|
-
But wouldn't it be better to just replace capturedMap with a single entry?
|
|
845
|
-
Also, are we OK with straight up making picking up multiple objects impossible?
|
|
846
|
-
|
|
847
|
-
const pointerId = (data as ThreeEvent<PointerEvent>).pointerId
|
|
848
|
-
if (pointerId !== undefined) {
|
|
849
|
-
const capturedMeshSet = internal.capturedMap.get(pointerId)
|
|
850
|
-
if (capturedMeshSet) {
|
|
851
|
-
const captured = capturedMeshSet.get(eventObject)
|
|
852
|
-
if (captured && captured.localState.stopped) return
|
|
853
|
-
}
|
|
841
|
+
/*
|
|
842
|
+
MAYBE TODO, DELETE IF NOT:
|
|
843
|
+
Check if the object is captured, captured events should not have intersects running in parallel
|
|
844
|
+
But wouldn't it be better to just replace capturedMap with a single entry?
|
|
845
|
+
Also, are we OK with straight up making picking up multiple objects impossible?
|
|
846
|
+
|
|
847
|
+
const pointerId = (data as ThreeEvent<PointerEvent>).pointerId
|
|
848
|
+
if (pointerId !== undefined) {
|
|
849
|
+
const capturedMeshSet = internal.capturedMap.get(pointerId)
|
|
850
|
+
if (capturedMeshSet) {
|
|
851
|
+
const captured = capturedMeshSet.get(eventObject)
|
|
852
|
+
if (captured && captured.localState.stopped) return
|
|
853
|
+
}
|
|
854
854
|
}*/
|
|
855
855
|
|
|
856
856
|
if (isPointerMove) {
|
|
@@ -1141,11 +1141,11 @@ const createStore = (invalidate, advance) => {
|
|
|
1141
1141
|
return rootStore;
|
|
1142
1142
|
};
|
|
1143
1143
|
|
|
1144
|
-
/**
|
|
1145
|
-
* Exposes an object's {@link Instance}.
|
|
1146
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle
|
|
1147
|
-
*
|
|
1148
|
-
* **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions.
|
|
1144
|
+
/**
|
|
1145
|
+
* Exposes an object's {@link Instance}.
|
|
1146
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle
|
|
1147
|
+
*
|
|
1148
|
+
* **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions.
|
|
1149
1149
|
*/
|
|
1150
1150
|
function useInstanceHandle(ref) {
|
|
1151
1151
|
const instance = React__namespace.useRef(null);
|
|
@@ -1153,9 +1153,9 @@ function useInstanceHandle(ref) {
|
|
|
1153
1153
|
return instance;
|
|
1154
1154
|
}
|
|
1155
1155
|
|
|
1156
|
-
/**
|
|
1157
|
-
* Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).
|
|
1158
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore
|
|
1156
|
+
/**
|
|
1157
|
+
* Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).
|
|
1158
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore
|
|
1159
1159
|
*/
|
|
1160
1160
|
function useStore() {
|
|
1161
1161
|
const store = React__namespace.useContext(context);
|
|
@@ -1163,18 +1163,18 @@ function useStore() {
|
|
|
1163
1163
|
return store;
|
|
1164
1164
|
}
|
|
1165
1165
|
|
|
1166
|
-
/**
|
|
1167
|
-
* Accesses R3F's internal state, containing renderer, canvas, scene, etc.
|
|
1168
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree
|
|
1166
|
+
/**
|
|
1167
|
+
* Accesses R3F's internal state, containing renderer, canvas, scene, etc.
|
|
1168
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree
|
|
1169
1169
|
*/
|
|
1170
1170
|
function useThree(selector = state => state, equalityFn) {
|
|
1171
1171
|
return useStore()(selector, equalityFn);
|
|
1172
1172
|
}
|
|
1173
1173
|
|
|
1174
|
-
/**
|
|
1175
|
-
* Executes a callback before render in a shared frame loop.
|
|
1176
|
-
* Can order effects with render priority or manually render with a positive priority.
|
|
1177
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useframe
|
|
1174
|
+
/**
|
|
1175
|
+
* Executes a callback before render in a shared frame loop.
|
|
1176
|
+
* Can order effects with render priority or manually render with a positive priority.
|
|
1177
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useframe
|
|
1178
1178
|
*/
|
|
1179
1179
|
function useFrame(callback, renderPriority = 0) {
|
|
1180
1180
|
const store = useStore();
|
|
@@ -1186,9 +1186,9 @@ function useFrame(callback, renderPriority = 0) {
|
|
|
1186
1186
|
return null;
|
|
1187
1187
|
}
|
|
1188
1188
|
|
|
1189
|
-
/**
|
|
1190
|
-
* Returns a node graph of an object with named nodes & materials.
|
|
1191
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph
|
|
1189
|
+
/**
|
|
1190
|
+
* Returns a node graph of an object with named nodes & materials.
|
|
1191
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph
|
|
1192
1192
|
*/
|
|
1193
1193
|
function useGraph(object) {
|
|
1194
1194
|
return React__namespace.useMemo(() => buildGraph(object), [object]);
|
|
@@ -1224,11 +1224,11 @@ function loadingFn(extensions, onProgress) {
|
|
|
1224
1224
|
};
|
|
1225
1225
|
}
|
|
1226
1226
|
|
|
1227
|
-
/**
|
|
1228
|
-
* Synchronously loads and caches assets with a three loader.
|
|
1229
|
-
*
|
|
1230
|
-
* Note: this hook's caller must be wrapped with `React.Suspense`
|
|
1231
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader
|
|
1227
|
+
/**
|
|
1228
|
+
* Synchronously loads and caches assets with a three loader.
|
|
1229
|
+
*
|
|
1230
|
+
* Note: this hook's caller must be wrapped with `React.Suspense`
|
|
1231
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader
|
|
1232
1232
|
*/
|
|
1233
1233
|
function useLoader(loader, input, extensions, onProgress) {
|
|
1234
1234
|
// Use suspense to load async assets
|
|
@@ -1240,25 +1240,22 @@ function useLoader(loader, input, extensions, onProgress) {
|
|
|
1240
1240
|
return Array.isArray(input) ? results : results[0];
|
|
1241
1241
|
}
|
|
1242
1242
|
|
|
1243
|
-
/**
|
|
1244
|
-
* Preloads an asset into cache as a side-effect.
|
|
1243
|
+
/**
|
|
1244
|
+
* Preloads an asset into cache as a side-effect.
|
|
1245
1245
|
*/
|
|
1246
1246
|
useLoader.preload = function (loader, input, extensions) {
|
|
1247
1247
|
const keys = Array.isArray(input) ? input : [input];
|
|
1248
1248
|
return suspendReact.preload(loadingFn(extensions), [loader, ...keys]);
|
|
1249
1249
|
};
|
|
1250
1250
|
|
|
1251
|
-
/**
|
|
1252
|
-
* Removes a loaded asset from cache.
|
|
1251
|
+
/**
|
|
1252
|
+
* Removes a loaded asset from cache.
|
|
1253
1253
|
*/
|
|
1254
1254
|
useLoader.clear = function (loader, input) {
|
|
1255
1255
|
const keys = Array.isArray(input) ? input : [input];
|
|
1256
1256
|
return suspendReact.clear([loader, ...keys]);
|
|
1257
1257
|
};
|
|
1258
1258
|
|
|
1259
|
-
// TODO: upstream to DefinitelyTyped for React 19
|
|
1260
|
-
// https://github.com/facebook/react/issues/28956
|
|
1261
|
-
|
|
1262
1259
|
function createReconciler(config) {
|
|
1263
1260
|
const reconciler = Reconciler__default["default"](config);
|
|
1264
1261
|
reconciler.injectIntoDevTools({
|
|
@@ -1656,6 +1653,8 @@ const reconciler = /* @__PURE__ */createReconciler({
|
|
|
1656
1653
|
suspendInstance() {},
|
|
1657
1654
|
waitForCommitToBeReady: () => null,
|
|
1658
1655
|
NotPendingTransition: null,
|
|
1656
|
+
// The reconciler types use the internal ReactContext with all the hidden properties
|
|
1657
|
+
// so we have to cast from the public React.Context type
|
|
1659
1658
|
HostTransitionContext: /* @__PURE__ */React__namespace.createContext(null),
|
|
1660
1659
|
setCurrentUpdatePriority(newPriority) {
|
|
1661
1660
|
currentUpdatePriority = newPriority;
|
|
@@ -2083,10 +2082,10 @@ function Portal({
|
|
|
2083
2082
|
children,
|
|
2084
2083
|
container
|
|
2085
2084
|
}) {
|
|
2086
|
-
/** This has to be a component because it would not be able to call useThree/useStore otherwise since
|
|
2087
|
-
* if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger
|
|
2088
|
-
* the "R3F hooks can only be used within the Canvas component!" warning:
|
|
2089
|
-
* <Canvas>
|
|
2085
|
+
/** This has to be a component because it would not be able to call useThree/useStore otherwise since
|
|
2086
|
+
* if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger
|
|
2087
|
+
* the "R3F hooks can only be used within the Canvas component!" warning:
|
|
2088
|
+
* <Canvas>
|
|
2090
2089
|
* {createPortal(...)} */
|
|
2091
2090
|
const {
|
|
2092
2091
|
events,
|
|
@@ -2167,14 +2166,15 @@ function Portal({
|
|
|
2167
2166
|
);
|
|
2168
2167
|
}
|
|
2169
2168
|
|
|
2170
|
-
/**
|
|
2171
|
-
* Force React to flush any updates inside the provided callback synchronously and immediately.
|
|
2172
|
-
* All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync).
|
|
2173
|
-
* Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without
|
|
2174
|
-
* having to revert to a non-React solution.
|
|
2169
|
+
/**
|
|
2170
|
+
* Force React to flush any updates inside the provided callback synchronously and immediately.
|
|
2171
|
+
* All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync).
|
|
2172
|
+
* Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without
|
|
2173
|
+
* having to revert to a non-React solution. Note: this will only flush updates within the `Canvas` root.
|
|
2175
2174
|
*/
|
|
2176
2175
|
function flushSync(fn) {
|
|
2177
|
-
|
|
2176
|
+
// @ts-ignore - reconciler types are not maintained
|
|
2177
|
+
return reconciler.flushSyncFromReconciler(fn);
|
|
2178
2178
|
}
|
|
2179
2179
|
|
|
2180
2180
|
function createSubs(callback, subs) {
|
|
@@ -2188,21 +2188,21 @@ const globalEffects = new Set();
|
|
|
2188
2188
|
const globalAfterEffects = new Set();
|
|
2189
2189
|
const globalTailEffects = new Set();
|
|
2190
2190
|
|
|
2191
|
-
/**
|
|
2192
|
-
* Adds a global render callback which is called each frame.
|
|
2193
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect
|
|
2191
|
+
/**
|
|
2192
|
+
* Adds a global render callback which is called each frame.
|
|
2193
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect
|
|
2194
2194
|
*/
|
|
2195
2195
|
const addEffect = callback => createSubs(callback, globalEffects);
|
|
2196
2196
|
|
|
2197
|
-
/**
|
|
2198
|
-
* Adds a global after-render callback which is called each frame.
|
|
2199
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect
|
|
2197
|
+
/**
|
|
2198
|
+
* Adds a global after-render callback which is called each frame.
|
|
2199
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect
|
|
2200
2200
|
*/
|
|
2201
2201
|
const addAfterEffect = callback => createSubs(callback, globalAfterEffects);
|
|
2202
2202
|
|
|
2203
|
-
/**
|
|
2204
|
-
* Adds a global callback which is called when rendering stops.
|
|
2205
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail
|
|
2203
|
+
/**
|
|
2204
|
+
* Adds a global callback which is called when rendering stops.
|
|
2205
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail
|
|
2206
2206
|
*/
|
|
2207
2207
|
const addTail = callback => createSubs(callback, globalTailEffects);
|
|
2208
2208
|
function run(effects, timestamp) {
|
|
@@ -2290,9 +2290,9 @@ function loop(timestamp) {
|
|
|
2290
2290
|
}
|
|
2291
2291
|
}
|
|
2292
2292
|
|
|
2293
|
-
/**
|
|
2294
|
-
* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
|
|
2295
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
|
|
2293
|
+
/**
|
|
2294
|
+
* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
|
|
2295
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
|
|
2296
2296
|
*/
|
|
2297
2297
|
function invalidate(state, frames = 1) {
|
|
2298
2298
|
var _state$gl$xr2;
|
|
@@ -2319,9 +2319,9 @@ function invalidate(state, frames = 1) {
|
|
|
2319
2319
|
}
|
|
2320
2320
|
}
|
|
2321
2321
|
|
|
2322
|
-
/**
|
|
2323
|
-
* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
|
|
2324
|
-
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
|
|
2322
|
+
/**
|
|
2323
|
+
* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
|
|
2324
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
|
|
2325
2325
|
*/
|
|
2326
2326
|
function advance(timestamp, runGlobalEffects = true, state, frame) {
|
|
2327
2327
|
if (runGlobalEffects) flushGlobalEffects('before', timestamp);
|