@hology/core 0.0.245 → 0.0.247
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/effects/vfx/gpu-sprite-compiler.js +1 -1
- package/dist/effects/vfx/gpu-sprite-runtime.d.ts +18 -1
- package/dist/effects/vfx/gpu-sprite-runtime.js +1 -1
- package/dist/effects/vfx/gpu-sprite-template.d.ts +1 -0
- package/dist/effects/vfx/gpu-sprite-template.js +1 -1
- package/dist/effects/vfx/gpu-sprite-world-runtime.d.ts +2 -1
- package/dist/effects/vfx/gpu-sprite-world-runtime.js +1 -1
- package/dist/effects/vfx/gpu-vfx-world-service.d.ts +7 -1
- package/dist/effects/vfx/gpu-vfx-world-service.js +1 -1
- package/dist/effects/vfx/initializsers.d.ts +15 -0
- package/dist/effects/vfx/initializsers.js +1 -1
- package/dist/effects/vfx/vfx-actor.d.ts +2 -0
- package/dist/effects/vfx/vfx-actor.js +1 -1
- package/dist/effects/vfx/vfx-asset.d.ts +7 -3
- package/dist/effects/vfx/vfx-asset.js +1 -1
- package/dist/effects/vfx/vfx-binding-runtime.d.ts +1 -1
- package/dist/effects/vfx/vfx-binding-runtime.js +1 -1
- package/dist/effects/vfx/vfx-defs.d.ts +53 -3
- package/dist/effects/vfx/vfx-defs.js +1 -1
- package/dist/effects/vfx/vfx-input-runtime.d.ts +2 -2
- package/dist/effects/vfx/vfx-input-runtime.js +1 -1
- package/dist/effects/vfx/vfx-materializer.js +1 -1
- package/dist/effects/vfx/vfx-mesh-sampler.d.ts +25 -0
- package/dist/effects/vfx/vfx-mesh-sampler.js +4 -0
- package/dist/gameplay/actors/builtin/components/index.d.ts +2 -0
- package/dist/gameplay/actors/builtin/components/index.js +1 -1
- package/dist/gameplay/actors/builtin/components/spline-component.d.ts +65 -0
- package/dist/gameplay/actors/builtin/components/spline-component.js +4 -0
- package/dist/gameplay/actors/builtin/index.d.ts +6 -0
- package/dist/gameplay/actors/builtin/index.js +1 -1
- package/dist/gameplay/actors/builtin/navmesh-actor.js +1 -1
- package/dist/gameplay/actors/builtin/spline-actor.d.ts +6 -0
- package/dist/gameplay/actors/builtin/spline-actor.js +4 -0
- package/dist/gameplay/actors/builtin/water-spline-volume-actor.d.ts +13 -0
- package/dist/gameplay/actors/builtin/water-spline-volume-actor.js +4 -0
- package/dist/gameplay/actors/builtin/water-volume-actor.d.ts +8 -0
- package/dist/gameplay/actors/builtin/water-volume-actor.js +4 -0
- package/dist/gameplay/actors/index.d.ts +4 -0
- package/dist/gameplay/actors/index.js +1 -1
- package/dist/gameplay/ai/build-tile.d.ts +3 -1
- package/dist/gameplay/ai/build-tile.js +1 -1
- package/dist/gameplay/ai/dynamic-tiled-navmesh.d.ts +4 -21
- package/dist/gameplay/ai/dynamic-tiled-navmesh.js +1 -1
- package/dist/gameplay/ai/dynamic-tiled-navmesh.worker.d.ts +10 -1
- package/dist/gameplay/ai/dynamic-tiled-navmesh.worker.js +1 -1
- package/dist/gameplay/ai/index.d.ts +1 -0
- package/dist/gameplay/ai/index.js +1 -1
- package/dist/gameplay/ai/navigation-areas.d.ts +22 -0
- package/dist/gameplay/ai/navigation-areas.js +4 -0
- package/dist/gameplay/ai/navigation.d.ts +28 -4
- package/dist/gameplay/ai/navigation.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/dist/scene/materializer.d.ts +3 -0
- package/dist/scene/materializer.js +1 -1
- package/dist/shader/graph/compiler.js +1 -1
- package/dist/shader/graph/model.d.ts +1 -1
- package/dist/shader/graph/registry.js +1 -1
- package/dist/test/build-tile.test.js +1 -1
- package/dist/test/gpu-sprite-compiler.test.js +1 -1
- package/dist/test/navmesh-worker-pool.test.js +1 -1
- package/dist/test/node-material-webgpu-resolver.test.js +1 -1
- package/dist/test/shader-graph.test.js +1 -1
- package/dist/test/spline-component.test.d.ts +2 -0
- package/dist/test/spline-component.test.js +4 -0
- package/dist/test/vfx-mesh-sampler.test.d.ts +2 -0
- package/dist/test/vfx-mesh-sampler.test.js +4 -0
- package/dist/test/water-spline-volume-actor.test.d.ts +2 -0
- package/dist/test/water-spline-volume-actor.test.js +4 -0
- package/dist/test/worker-task-executor.test.d.ts +2 -0
- package/dist/test/worker-task-executor.test.js +4 -0
- package/dist/worker/index.d.ts +11 -2
- package/dist/worker/index.js +1 -1
- package/dist/worker/task-executor.d.ts +22 -0
- package/dist/worker/task-executor.js +4 -0
- package/dist/worker/task-worker.d.ts +3 -0
- package/dist/worker/task-worker.js +4 -0
- package/dist/worker/task.d.ts +39 -0
- package/dist/worker/task.js +4 -0
- package/package.json +2 -2
- package/tsconfig.tsbuildinfo +1 -1
package/dist/worker/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{navMeshTaskHandlers as r}from"../gameplay/ai/dynamic-tiled-navmesh.worker.js";import{WorkerTaskExecutor as e}from"./task-executor.js";import{setupTaskWorker as o}from"./task-worker.js";let t,n;export function registerWorker(r,o={}){n?.terminate(),t=r,n=new e(r,o.maxWorkers)}export function hasWorkerBuilder(){return null!=t}export function createWorker(){if(null==t)throw new Error("No worker factory has been registered");return t()}export function executeTask(r,e,o={}){return null!=n?n.execute(r,e,o):o.signal?.aborted?Promise.reject(new DOMException("Task execution was cancelled","AbortError")):null!=o.fallback?Promise.resolve().then(o.fallback):Promise.reject(new Error(`No worker is registered and task "${r}" has no inline fallback`))}export function initWorker(e={}){o({...r,...e})}export{TaskCancelledError,TaskExecutionError}from"./task.js";/*
|
|
2
2
|
* Copyright (©) 2026 Hology Interactive AB. All rights reserved.
|
|
3
3
|
* See the LICENSE.md file for details.
|
|
4
4
|
*/
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type TaskPriority = 'background' | 'normal' | 'high';
|
|
2
|
+
export type ExecuteTaskOptions<TOutput> = {
|
|
3
|
+
transfer?: Transferable[];
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
priority?: TaskPriority;
|
|
6
|
+
fallback?: () => TOutput | Promise<TOutput>;
|
|
7
|
+
};
|
|
8
|
+
export declare class WorkerTaskExecutor {
|
|
9
|
+
private readonly workerFactory;
|
|
10
|
+
private slots;
|
|
11
|
+
private queue;
|
|
12
|
+
private nextTaskId;
|
|
13
|
+
private readonly workerLimit;
|
|
14
|
+
constructor(workerFactory: () => Worker, maxWorkers?: number);
|
|
15
|
+
execute<TInput, TOutput>(type: string, payload: TInput, options?: ExecuteTaskOptions<TOutput>): Promise<TOutput>;
|
|
16
|
+
terminate(): void;
|
|
17
|
+
private cancel;
|
|
18
|
+
private drain;
|
|
19
|
+
private createSlot;
|
|
20
|
+
private finish;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=task-executor.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{TaskCancelledError as t,TaskExecutionError as s}from"./task.js";const e={background:0,normal:1,high:2};export class WorkerTaskExecutor{constructor(t,s=1){this.workerFactory=t,this.slots=[],this.queue=[],this.nextTaskId=1,this.workerLimit=Number.isFinite(s)?Math.max(1,Math.floor(s)):1}execute(s,i,r={}){return r.signal?.aborted?Promise.reject(new t):new Promise((t,n)=>{const o={id:this.nextTaskId++,type:s,payload:i,transfer:r.transfer,signal:r.signal,priority:e[r.priority??"normal"],resolve:t,reject:n};null!=o.signal&&(o.abort=()=>this.cancel(o),o.signal.addEventListener("abort",o.abort,{once:!0}));const a=this.queue.findIndex(t=>t.priority<o.priority);a<0?this.queue.push(o):this.queue.splice(a,0,o),this.drain()})}terminate(){const s=new t;for(const t of this.queue.splice(0))this.finish(t,()=>t.reject(s));for(const t of this.slots)null!=t.task&&this.finish(t.task,()=>t.task?.reject(s)),t.worker.terminate();this.slots=[]}cancel(s){const e=this.queue.indexOf(s);if(e>=0)return this.queue.splice(e,1),void this.finish(s,()=>s.reject(new t));const i=this.slots.find(t=>t.task===s);null!=i&&(i.worker.postMessage({kind:"cancel",id:s.id}),this.finish(s,()=>s.reject(new t)),i.task=void 0,this.drain())}drain(){for(;this.queue.length>0;){let s=this.slots.find(t=>null==t.task);if(null==s){if(this.slots.length>=this.workerLimit)return;s=this.createSlot(),this.slots.push(s)}const e=this.queue.shift();if(e.signal?.aborted){this.finish(e,()=>e.reject(new t));continue}s.task=e;const i={kind:"task",id:e.id,type:e.type,payload:e.payload};s.worker.postMessage(i,e.transfer)}}createSlot(){const t={worker:this.workerFactory()};return t.worker.onmessage=e=>{const i=t.task;null!=i&&e.data.id===i.id&&(t.task=void 0,this.finish(i,()=>{"result"===e.data.kind?i.resolve(e.data.payload):i.reject(new s(e.data.error))}),this.drain())},t.worker.onerror=s=>{const e=t.task;t.task=void 0,t.worker.terminate();const i=this.slots.indexOf(t);i>=0&&this.slots.splice(i,1),null!=e&&this.finish(e,()=>e.reject(new Error(s.message||"Worker task failed"))),this.drain()},t}finish(t,s){null!=t.abort&&t.signal?.removeEventListener("abort",t.abort),s()}}/*
|
|
2
|
+
* Copyright (©) 2026 Hology Interactive AB. All rights reserved.
|
|
3
|
+
* See the LICENSE.md file for details.
|
|
4
|
+
*/
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{serializeTaskError as e}from"./task.js";export function setupTaskWorker(r){const s=new Map;self.onmessage=o=>{const t=o.data;if("cancel"===t.kind)return void s.get(t.id)?.abort();const n=r[t.type];if(null==n){const e={kind:"error",id:t.id,error:{name:"UnknownTaskError",message:`No worker task handler is registered for "${t.type}"`}};return void self.postMessage(e)}const a=new AbortController;s.set(t.id,a),Promise.resolve(n(t.payload,a.signal)).then(e=>{if(a.signal.aborted)return;const r={kind:"result",id:t.id,payload:e.payload};self.postMessage(r,e.transfer)}).catch(r=>{if(a.signal.aborted)return;const s={kind:"error",id:t.id,error:e(r)};self.postMessage(s)}).finally(()=>s.delete(t.id))}}/*
|
|
2
|
+
* Copyright (©) 2026 Hology Interactive AB. All rights reserved.
|
|
3
|
+
* See the LICENSE.md file for details.
|
|
4
|
+
*/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type WorkerTaskRequest = {
|
|
2
|
+
kind: 'task';
|
|
3
|
+
id: number;
|
|
4
|
+
type: string;
|
|
5
|
+
payload: unknown;
|
|
6
|
+
};
|
|
7
|
+
export type WorkerTaskCancel = {
|
|
8
|
+
kind: 'cancel';
|
|
9
|
+
id: number;
|
|
10
|
+
};
|
|
11
|
+
export type SerializedTaskError = {
|
|
12
|
+
name: string;
|
|
13
|
+
message: string;
|
|
14
|
+
stack?: string;
|
|
15
|
+
};
|
|
16
|
+
export type WorkerTaskResponse = {
|
|
17
|
+
kind: 'result';
|
|
18
|
+
id: number;
|
|
19
|
+
payload: unknown;
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'error';
|
|
22
|
+
id: number;
|
|
23
|
+
error: SerializedTaskError;
|
|
24
|
+
};
|
|
25
|
+
export type WorkerTaskMessage = WorkerTaskRequest | WorkerTaskCancel;
|
|
26
|
+
export type TaskHandlerResult<T> = {
|
|
27
|
+
payload: T;
|
|
28
|
+
transfer?: Transferable[];
|
|
29
|
+
};
|
|
30
|
+
export type TaskHandler<TInput = unknown, TOutput = unknown> = (input: TInput, signal: AbortSignal) => TaskHandlerResult<TOutput> | Promise<TaskHandlerResult<TOutput>>;
|
|
31
|
+
export type TaskHandlers = Record<string, TaskHandler>;
|
|
32
|
+
export declare class TaskExecutionError extends Error {
|
|
33
|
+
constructor(error: SerializedTaskError);
|
|
34
|
+
}
|
|
35
|
+
export declare class TaskCancelledError extends Error {
|
|
36
|
+
constructor();
|
|
37
|
+
}
|
|
38
|
+
export declare function serializeTaskError(error: unknown): SerializedTaskError;
|
|
39
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export class TaskExecutionError extends Error{constructor(r){super(r.message),this.name=r.name,this.stack=r.stack}}export class TaskCancelledError extends Error{constructor(){super("Task execution was cancelled"),this.name="AbortError"}}export function serializeTaskError(r){return r instanceof Error?{name:r.name,message:r.message,stack:r.stack}:{name:"Error",message:String(r)}}/*
|
|
2
|
+
* Copyright (©) 2026 Hology Interactive AB. All rights reserved.
|
|
3
|
+
* See the LICENSE.md file for details.
|
|
4
|
+
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hology/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.247",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"recast-navigation": "0.39.0",
|
|
221
221
|
"rxjs": "7.8.1",
|
|
222
222
|
"three-mesh-bvh": "^0.7.5",
|
|
223
|
-
"three-shader-graph": "0.2.
|
|
223
|
+
"three-shader-graph": "0.2.65",
|
|
224
224
|
"three-stdlib": "2.34.0",
|
|
225
225
|
"ts-key-enum": "^2.0.12",
|
|
226
226
|
"typedi": "^0.10.0"
|