Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 2x 2x 2x 2x 2x 2x 2x 1x 1x 13x 4x 1x 1x 1x 11x 7x 4x 1x | import { Static, TSchema } from "@sinclair/typebox"; import migrateProject from "./migrateLegacyProjectVersions"; import identity from "lodash/identity"; import { BackgroundData, Scene } from "shared/lib/entities/entitiesTypes"; import { compressSceneResource, compressBackgroundResource, } from "shared/lib/resources/compression"; import { ActorResource, AvatarResource, BackgroundResource, CompressedBackgroundResource, CompressedProjectResources, CompressedSceneResourceWithChildren, EmoteResource, EngineFieldValuesResource, FontResource, MusicResource, PaletteResource, ProjectMetadataResource, SceneResource, ScriptResource, SettingsResource, SoundResource, SpriteResource, TilesetResource, TriggerResource, VariablesResource, } from "shared/lib/resources/types"; import type { ScriptEventDefs } from "shared/lib/scripts/eventHelpers"; import type { ProjectData } from "store/features/project/projectActions"; import { Value } from "@sinclair/typebox/value"; import { defaultProjectSettings } from "consts"; export const migrateLegacyProject = ( project: ProjectData, projectRoot: string, scriptEventDefs: ScriptEventDefs ): CompressedProjectResources => { const migratedProject = migrateProject(project, projectRoot, scriptEventDefs); const encodeResource = <T extends TSchema, D extends object>(castAs: T) => (data: Partial<D>): Static<T> => Value.Cast(castAs, { ...data, }); const encodeScene = ( scene: Scene, sceneIndex: number ): CompressedSceneResourceWithChildren => { const encodeSceneResource = encodeResource(SceneResource); const encodeActor = encodeResource(ActorResource); const encodeTrigger = encodeResource(TriggerResource); return compressSceneResource( encodeSceneResource({ ...scene, _index: sceneIndex, actors: scene.actors .filter(identity) .map((actor, actorIndex) => encodeActor({ ...actor, _index: actorIndex }) ), triggers: scene.triggers .filter(identity) .map((trigger, triggerIndex) => encodeTrigger({ ...trigger, _index: triggerIndex }) ), }) ); }; const encodeBackground = ( background: BackgroundData ): CompressedBackgroundResource => { const encodeBackground = encodeResource(BackgroundResource); return compressBackgroundResource(encodeBackground(background)); }; const map = <A, B>( arr: A[] | undefined, mapFn: (a: A, index: number) => B ): B[] => { if (!arr) { return []; } return arr.filter(identity).map(mapFn); }; return { scenes: map(migratedProject.scenes, encodeScene), actorPrefabs: [], triggerPrefabs: [], scripts: map(migratedProject.customEvents, encodeResource(ScriptResource)), sprites: map(migratedProject.spriteSheets, encodeResource(SpriteResource)), backgrounds: map(migratedProject.backgrounds, encodeBackground), emotes: map(migratedProject.emotes, encodeResource(EmoteResource)), avatars: map(migratedProject.avatars, encodeResource(AvatarResource)), tilesets: map(migratedProject.tilesets, encodeResource(TilesetResource)), fonts: map(migratedProject.fonts, encodeResource(FontResource)), sounds: map(migratedProject.sounds, encodeResource(SoundResource)), music: map(migratedProject.music, encodeResource(MusicResource)), palettes: map(migratedProject.palettes, encodeResource(PaletteResource)), variables: encodeResource(VariablesResource)({ _resourceType: "variables", variables: migratedProject.variables, }), engineFieldValues: encodeResource(EngineFieldValuesResource)({ _resourceType: "engineFieldValues", engineFieldValues: migratedProject.engineFieldValues, }), settings: encodeResource(SettingsResource)({ _resourceType: "settings", ...defaultProjectSettings, ...migratedProject.settings, }), metadata: encodeResource(ProjectMetadataResource)({ _resourceType: "project", name: migratedProject.name, author: migratedProject.author, notes: migratedProject.notes, _version: migratedProject._version, _release: migratedProject._release, }), }; }; |