From 7e564f2310aafa709064a890b26da421bcc69ff1 Mon Sep 17 00:00:00 2001 From: Exelo Date: Wed, 1 Jul 2026 19:17:54 +0900 Subject: [PATCH] feat: add asset param input in components handling --- .github/workflows/release.yml | 2 +- pnpm-lock.yaml | 13 +++++++------ pnpm-workspace.yaml | 5 ++++- src/lib/client/ecs/asset/asset-manager.ts | 2 +- .../client/ecs/component/component.type.ts | 2 +- .../entity/component/component-handle.ts | 2 +- .../component/component-param-handle.ts | 2 +- .../component/component-param-manager.ts | 2 +- src/lib/client/project/save-handler.ts | 5 ++++- .../component-param-row.svelte | 19 +++++++++++++++++++ .../server/project/package/package-handler.ts | 5 ++++- .../server/project/package/package.const.ts | 2 +- 12 files changed, 45 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 360d31b..d0e0eb9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -115,7 +115,7 @@ jobs: fetch-tags: true path: docs-dist repository: nanoforge-dev/docs - token: ${{ secrets.ACTIONS_KEY }} + token: ${{ secrets.TOKEN }} - name: Prepare uses: ./.github/actions/prepare diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a17a8c..911b991 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,8 +43,8 @@ catalogs: version: 0.55.1 core: '@nanoforge-dev/ecs-lib': - specifier: ^1.3.1 - version: 1.3.1 + specifier: 1.3.2-alpha.add-assets-handling.0 + version: 1.3.2-alpha.add-assets-handling.0 '@sveltejs/kit': specifier: ^2.65.0 version: 2.65.0 @@ -273,7 +273,7 @@ importers: version: 2.1.4 '@nanoforge-dev/ecs-lib': specifier: catalog:core - version: 1.3.1 + version: 1.3.2-alpha.add-assets-handling.0 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint version: 1.0.2(@types/eslint@9.6.1)(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4)(typescript@6.0.3) @@ -760,8 +760,8 @@ packages: resolution: {integrity: sha512-Nl+kzkdYiiw9hml9O9CsQd6S3VcOr8L9hLzamqXti8+xgYUqblsPJMq+w0vThOA/LinenX0QuuxYrVTkNZflvw==} engines: {node: '25'} - '@nanoforge-dev/ecs-lib@1.3.1': - resolution: {integrity: sha512-js4VQOri4S6w1Fh1Lk2O5ruxciP/QZCPppOx6YnF/VqgjYgn1GgHfqcxiBE9NxJT4SDi5O8KS4kd65Pj/0oc0A==} + '@nanoforge-dev/ecs-lib@1.3.2-alpha.add-assets-handling.0': + resolution: {integrity: sha512-to+vzpJxdWy8pkQITRu9RJ7fsxKWEFNlSRC1oIBl2RPa7GWSABKNarYXpmPalLxDqVAnZDa4y8hFdKH2UeoymQ==} engines: {node: '25'} '@nanoforge-dev/utils-eslint-config@1.0.2': @@ -2347,6 +2347,7 @@ packages: git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true glob-parent@6.0.2: @@ -3996,7 +3997,7 @@ snapshots: '@nanoforge-dev/common@1.3.1': {} - '@nanoforge-dev/ecs-lib@1.3.1': + '@nanoforge-dev/ecs-lib@1.3.2-alpha.add-assets-handling.0': dependencies: '@nanoforge-dev/common': 1.3.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a4eda37..3e4df31 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,7 +18,7 @@ catalogs: monaco-editor: ^0.55.1 svelte-sonner: ^1.1.1 core: - '@nanoforge-dev/ecs-lib': ^1.3.1 + '@nanoforge-dev/ecs-lib': 1.3.2-alpha.add-assets-handling.0 '@sveltejs/adapter-auto': ^7.0.1 '@sveltejs/kit': ^2.65.0 '@sveltejs/vite-plugin-svelte': ^7.1.2 @@ -79,3 +79,6 @@ catalogs: playwright: ^1.60.0 vitest: ^4.1.8 vitest-browser-svelte: ^2.1.1 + +minimumReleaseAgeExclude: + - '@nanoforge-dev/ecs-lib@1.3.2-alpha.add-assets-handling.0' diff --git a/src/lib/client/ecs/asset/asset-manager.ts b/src/lib/client/ecs/asset/asset-manager.ts index 64267f0..323bbcd 100644 --- a/src/lib/client/ecs/asset/asset-manager.ts +++ b/src/lib/client/ecs/asset/asset-manager.ts @@ -42,7 +42,7 @@ export class AssetManager { async create(file: File): Promise { const { fs } = useProject(); - const assetDir = await fs.getDirectory('assets'); + const assetDir = await fs.getDirectory('static'); const assetFile = await assetDir.getFile(file.name); const stream = await assetFile.createWritable(); await file.stream().pipeTo(stream); diff --git a/src/lib/client/ecs/component/component.type.ts b/src/lib/client/ecs/component/component.type.ts index 168c522..5247dd9 100644 --- a/src/lib/client/ecs/component/component.type.ts +++ b/src/lib/client/ecs/component/component.type.ts @@ -1,4 +1,4 @@ -import type { ComponentManifest } from '$lib/server/project/package'; +import type { ComponentManifest } from '$lib/server/project/package/manifest/manifest.type'; export type ComponentParam = ComponentManifest['params'][number]; diff --git a/src/lib/client/ecs/scene/entity/component/component-handle.ts b/src/lib/client/ecs/scene/entity/component/component-handle.ts index 2bc47d4..27be6f6 100644 --- a/src/lib/client/ecs/scene/entity/component/component-handle.ts +++ b/src/lib/client/ecs/scene/entity/component/component-handle.ts @@ -1,6 +1,6 @@ import { type Readable, get } from 'svelte/store'; -import type { Component } from '../../../asset/asset.type'; +import type { Component } from '../../../component/component.type'; import type { EntityComponentManager } from './component-manager'; import { ComponentParamManager } from './component-param-manager'; diff --git a/src/lib/client/ecs/scene/entity/component/component-param-handle.ts b/src/lib/client/ecs/scene/entity/component/component-param-handle.ts index 91cc1f7..a9b1c6b 100644 --- a/src/lib/client/ecs/scene/entity/component/component-param-handle.ts +++ b/src/lib/client/ecs/scene/entity/component/component-param-handle.ts @@ -1,6 +1,6 @@ import { type Readable, type Unsubscriber, type Writable, get, writable } from 'svelte/store'; -import type { ComponentParam } from '../../../asset/asset.type'; +import type { ComponentParam } from '../../../component/component.type'; import { resetListeners, resolveStore } from '../../../utils'; import type { ComponentParamManager } from './component-param-manager'; diff --git a/src/lib/client/ecs/scene/entity/component/component-param-manager.ts b/src/lib/client/ecs/scene/entity/component/component-param-manager.ts index b343846..89e9fc8 100644 --- a/src/lib/client/ecs/scene/entity/component/component-param-manager.ts +++ b/src/lib/client/ecs/scene/entity/component/component-param-manager.ts @@ -1,6 +1,6 @@ import { type Unsubscriber, type Writable, get, writable } from 'svelte/store'; -import type { ComponentParam } from '../../../asset/asset.type'; +import type { ComponentParam } from '../../../component/component.type'; import { resetListeners, resetSubscriptions } from '../../../utils'; import { resolveStore } from '../../../utils'; import type { EntityComponentHandle } from './component-handle'; diff --git a/src/lib/client/project/save-handler.ts b/src/lib/client/project/save-handler.ts index 2922016..a89c541 100644 --- a/src/lib/client/project/save-handler.ts +++ b/src/lib/client/project/save-handler.ts @@ -77,7 +77,10 @@ export class SaveHandler { components: components.map((component) => ({ name: component.id, path: component.path, - paramsNames: component.params.map((p) => p.name), + paramsNames: component.params.map((p) => { + if (p.type === 'asset') return `__RESERVED_ASSET_${p.name}`; + return p.name; + }), })), }); void this.forceSyncToServer(); diff --git a/src/lib/components/Widget/entity-inspector/component-param-row.svelte b/src/lib/components/Widget/entity-inspector/component-param-row.svelte index e8ab40b..4c66216 100644 --- a/src/lib/components/Widget/entity-inspector/component-param-row.svelte +++ b/src/lib/components/Widget/entity-inspector/component-param-row.svelte @@ -4,6 +4,7 @@ import { TristateSwitch } from '$lib/components/ui/tristate-switch'; import { Select, SelectContent, SelectItem, SelectTrigger } from '$lib/components/ui/select'; import { untrack } from 'svelte'; + import { useProject } from '$lib/client/project'; interface Props { handle: ComponentParamHandle; @@ -11,8 +12,11 @@ const { handle }: Props = $props(); + const { ecs } = useProject(); + const param = $derived(handle.store); const defaultValue = $derived(handle.value); + const assets = $derived(ecs.assets.store); let value = $state($defaultValue); @@ -46,6 +50,7 @@ {/if} {:else} {#if Object.keys($param.enum).length === 0} + None {#each Object.entries($param.enum) as [displayOpt, realOpt] (displayOpt)} {displayOpt} {/each} @@ -62,5 +67,19 @@ {:else if $param.type === 'boolean'} + {:else if $param.type === 'asset'} + {/if} diff --git a/src/lib/server/project/package/package-handler.ts b/src/lib/server/project/package/package-handler.ts index c619661..8cc1945 100644 --- a/src/lib/server/project/package/package-handler.ts +++ b/src/lib/server/project/package/package-handler.ts @@ -54,7 +54,10 @@ export class PackageHandler { } async getAssets(): Promise { - return this._resolvesPackages(PackageTypeEnum.ASSET); + return this._resolvesPackages(PackageTypeEnum.ASSET).map((asset) => ({ + ...asset, + path: asset.path.replace(new RegExp(`^${PACKAGES_PATH.asset}/`), ''), + })); } private _resolvesPackages(type: T): PackageType[] { diff --git a/src/lib/server/project/package/package.const.ts b/src/lib/server/project/package/package.const.ts index 489b279..a9ad9aa 100644 --- a/src/lib/server/project/package/package.const.ts +++ b/src/lib/server/project/package/package.const.ts @@ -5,7 +5,7 @@ import { PackageTypeEnum } from './package.enum'; export const PACKAGES_PATH: Record = { [PackageTypeEnum.COMPONENT]: 'components', [PackageTypeEnum.SYSTEM]: 'systems', - [PackageTypeEnum.ASSET]: 'assets', + [PackageTypeEnum.ASSET]: 'static', }; export const PACKAGES_NAME_FORMATTER: Record string> = {