Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .idea/Editor.iml

This file was deleted.

2 changes: 0 additions & 2 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/lib/client/ecs/asset/asset-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const _subscriptions = writable<Record<string, Unsubscriber | null>>({});

export class AssetManager {
static reset() {
_storage.set([]);
resetSubscriptions(_subscriptions);
_storage.set([]);
}

constructor(assets: Asset[]) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/component/component-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const _subscriptions = writable<Record<string, Unsubscriber | null>>({});

export class ComponentManager {
static reset() {
_storage.set([]);
resetSubscriptions(_subscriptions);
_storage.set([]);
}

constructor(components: Component[]) {
Expand Down
13 changes: 7 additions & 6 deletions src/lib/client/ecs/ecs-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ export class ECSHandler {
private _libraryManager: LibraryManager | undefined;

static reset() {
// * Child must be reset before parents
ComponentParamHandle.reset();
ComponentParamManager.reset();
EntityComponentManager.reset();
SceneSystemManager.reset();
SceneEntityHandle.reset();
SceneEntityManager.reset();
AssetHandle.reset();
AssetManager.reset();
ComponentHandle.reset();
Expand All @@ -44,12 +51,6 @@ export class ECSHandler {
LibraryHandle.reset();
SceneHandle.reset();
SceneManager.reset();
SceneSystemManager.reset();
SceneEntityHandle.reset();
SceneEntityManager.reset();
EntityComponentManager.reset();
ComponentParamHandle.reset();
ComponentParamManager.reset();
}

constructor(project: Project) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/library/library-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ const _subscriptions = writable<Record<string, Unsubscriber | null>>({});

export class LibraryManager {
static reset() {
_storage.set([]);
resetSubscriptions(_subscriptions);
_storage.set([]);
}

constructor(libraries: Library[]) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ export class EntityComponentManager {
private readonly _storageResolvable: string;

static reset() {
_storage.set({});
resetSubscriptions(_subscriptions);
resetListener(_listener);
_storage.set({});
}

constructor(entity: SceneEntityHandle, components: Record<string, Record<string, string>>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ export class ComponentParamHandle {
private readonly _valueStore: Writable<any | undefined>;

static reset() {
resetListeners(_listeners);
_storage.set({});
_valueStorage.set({});
resetListeners(_listeners);
}

constructor(manager: ComponentParamManager, param: ComponentParam, value: any | undefined) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ export class ComponentParamManager {
private readonly _storageResolvable: string;

static reset() {
_storage.set({});
_valueStorage.set({});
resetSubscriptions(_subscriptions);
resetListener(_listener);
_storage.set({});
_valueStorage.set({});
}

constructor(component: EntityComponentHandle, params: Record<string, string>) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/scene/entity/entity-handle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export class SceneEntityHandle {
private readonly _components: EntityComponentManager;

static reset() {
_storage.set({});
resetListeners(_listeners);
_storage.set({});
}

constructor(manager: SceneEntityManager, entity: Entity) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/scene/entity/entity-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export class SceneEntityManager {
private readonly _store: Writable<Entity[]>;

static reset() {
_storage.set({});
resetSubscriptions(_subscriptions);
_storage.set({});
}

constructor(scene: SceneHandle, entities: Entity[]) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/scene/scene-handle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ export class SceneHandle {
private readonly _systems: SceneSystemManager;

static reset() {
_storage.set({});
resetListeners(_listeners);
_storage.set({});
}

constructor(manager: SceneManager, scene: Scene) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/scene/scene-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export class SceneManager {
public readonly ecs: ECSHandler;

static reset() {
resetSubscriptions(_subscriptions);
_storage.set([]);
_rootScenesStorage.set([]);
_activeSceneStorage.set(undefined as any);
_defaultSceneStorage.set(undefined as any);
resetSubscriptions(_subscriptions);
}

constructor(ecs: ECSHandler, scenes: Scene[], rootScenes: string[], defaultSceneId: string) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/scene/system/system-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ export class SceneSystemManager {
private readonly _store: Writable<string[]>;

static reset() {
_storage.set({});
resetListener(_listener);
_storage.set({});
}

constructor(scene: SceneHandle, systems: string[]) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/client/ecs/system/system-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ const _subscriptions = writable<Record<string, Unsubscriber | null>>({});

export class SystemManager {
static reset() {
_storage.set([]);
resetSubscriptions(_subscriptions);
_storage.set([]);
}

constructor(systems: System[]) {
Expand Down
7 changes: 6 additions & 1 deletion src/lib/client/project/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
export { Project } from './project';
export { ProjectCache, type ProjectDataCache } from './project-loader/project-cache';
export { ProjectLoader, useProject, getProject } from './project-loader/project-loader';
export {
ProjectLoader,
useProject,
getProject,
getProjectStore,
} from './project-loader/project-loader';
export { PLErrors, PLException } from './project-loader/exceptions';
6 changes: 6 additions & 0 deletions src/lib/client/project/project-loader/init-functions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { Project } from '$lib/client/project';
import { updateTabsStore } from '$lib/components/Tabs/store';

export const initTabs = (project: Project) => {
updateTabsStore(project.id);
};
15 changes: 13 additions & 2 deletions src/lib/client/project/project-loader/project-loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import {
type CreateProjectActionInput,
noProjectActions,
} from '$lib/client/action';
import { getConfig } from '$lib/client/config/config';
import { getConfig } from '$lib/client/config';
import { Project, ProjectCache, type ProjectDataCache } from '$lib/client/project';
import { PLErrors, PLException, runPLSafe } from '$lib/client/project/project-loader/exceptions';
import { SfsTreeCache } from '$lib/client/sync-file-system';

import { FileSystemManager } from '@utils-client/file-system';

import { PLErrors, PLException, runPLSafe } from './exceptions';
import { initTabs } from './init-functions';

type ProjectCacheResolvable = ActionProject;

const projectStore = writable<Project | null>(null);
Expand Down Expand Up @@ -112,9 +114,16 @@ export class ProjectLoader {
name: infos.name,
lastOpened: Date.now(),
});

await this.initFunctions(project);

return project;
}

static async initFunctions(project: Project): Promise<void> {
initTabs(project);
}

static unload() {
projectStore.set(null);
Project.reset();
Expand All @@ -139,3 +148,5 @@ export const useProject = () => {
};

export const getProject = () => get(projectStore);

export const getProjectStore = () => projectStore;
1 change: 1 addition & 0 deletions src/lib/client/project/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export class Project {
static reset(): void {
InfoHandler.reset();
EventHandler.reset();
ECSHandler.reset();
}

constructor(public id: string) {
Expand Down
13 changes: 10 additions & 3 deletions src/lib/components/Tabs/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ const initialState: TabsState = {
selectedTabId: 'tab-main',
};

function createTabsStore() {
const { subscribe, update, set } = persistedWritable<TabsState>('editor.tabs', initialState);
function createTabsStore(projectId: string) {
const { subscribe, update, set } = persistedWritable<TabsState>(
`editor.tabs.${projectId}`,
initialState,
);

async function openTab(tab: Omit<TabInstance, 'id'> & { id?: string }) {
const existing = await findExistingTab(tab);
Expand Down Expand Up @@ -124,4 +127,8 @@ function createTabsStore() {
};
}

export const tabsStore = createTabsStore();
export const updateTabsStore = (projectId: string) => {
tabsStore = createTabsStore(projectId);
};

export let tabsStore = createTabsStore('default');
5 changes: 4 additions & 1 deletion src/routes/dashboard/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
import { runSafe } from '@utils-client/error';
import { FullPageProjectSpinner } from '$lib/components/project-loader';
import { MarketplaceDialog, setMarketplaceContext } from '$lib/components/marketplace';
import { getProjectStore } from '$lib/client/project/project-loader/project-loader';

const projectStore = getProjectStore();

let marketplaceOpen = $state(false);
setMarketplaceContext({ open: () => (marketplaceOpen = true) });
Expand Down Expand Up @@ -74,7 +77,7 @@
});
</script>

{#if loaded}
{#if loaded && $projectStore}
<MarketplaceDialog bind:open={marketplaceOpen} />
<div class="h-screen flex flex-col gap-1 bg-neutral-900">
<header class="h-16 flex">
Expand Down
Loading