diff --git a/Extensions/JsExtensionTypes.d.ts b/Extensions/JsExtensionTypes.d.ts index 2f499275802d..b1181925cd1e 100644 --- a/Extensions/JsExtensionTypes.d.ts +++ b/Extensions/JsExtensionTypes.d.ts @@ -4,6 +4,107 @@ type GDNamespace = typeof import('../GDevelop.js/types'); // in this file and merge it with the other namespace declarations. declare namespace PIXI {} +/** + * Expose functions to load PIXI textures or fonts, given the names of + * resources and a gd.Project. + */ +declare class PixiResourcesLoader { + burstCache(); + + async reloadResource(project: gd.Project, resourceName: string); + + /** + * Reload the given resources. + */ + async reloadResources( + project: gd.Project, + resourceNames: Array + ): Promise; + + /** + * Return the PIXI texture represented by the given resource. + * If not loaded, it will load it. + */ + getPIXITexture(project: gd.Project, resourceName: string): PIXI.Texture; + + /** + * Return the three.js texture associated to the specified resource name. + * Returns a placeholder texture if not found. + * @param project The project + * @param resourceName The name of the resource + * @returns The requested texture, or a placeholder if not found. + */ + getThreeTexture(project: gd.Project, resourceName: string): THREE.Texture; + + /** + * Return the three.js material associated to the specified resource name. + * @param project The project + * @param resourceName The name of the resource + * @param options Set if the material should be transparent or not. + * @returns The requested material. + */ + getThreeMaterial( + project: gd.Project, + resourceName: string, + { useTransparentTexture }: { useTransparentTexture: boolean } + ): THREE.Material; + + /** + * Return the three.js material associated to the specified resource name. + * @param project The project + * @param resourceName The name of the resource + * @param options + * @returns The requested material. + */ + get3DModel( + project: gd.Project, + resourceName: string + ): Promise; + + /** + * Return the Pixi spine data for the specified resource name. + * @param project The project + * @param spineName The name of the spine json resource + * @returns The requested spine skeleton. + */ + async getSpineData( + project: gd.Project, + spineName: string + ): Promise; + + /** + * Return the PIXI video texture represented by the given resource. + * If not loaded, it will load it. + * @returns The PIXI.Texture to be used. It can be loading, so you + * should listen to PIXI.Texture `update` event, and refresh your object + * if this event is triggered. + */ + getPIXIVideoTexture(project: gd.Project, resourceName: string): PIXI.Texture; + + /** + * Load the given font from its url/filename. + * @returns a Promise that resolves with the font-family to be used + * to render a text with the font. + */ + loadFontFamily(project: gd.Project, resourceName: string): Promise; + + /** + * Get the font family name for the given font resource. + * The font won't be loaded. + * @returns The font-family to be used to render a text with the font. + */ + getFontFamily(project: gd.Project, resourceName: string): string; + + /** + * Get the data from a bitmap font file (fnt/xml) resource in the IDE. + */ + getBitmapFontData(project: gd.Project, resourceName: string): Promise; + + getInvalidPIXITexture(); + + getResourceJsonData(project: gd.Project, resourceName: string); +} + /** * RenderedInstance is the base class used for creating 2D renderers of instances, * which display on the scene editor, using Pixi.js, the instance of an object (see InstancesEditor). @@ -14,17 +115,17 @@ class RenderedInstance { _instance: gd.InitialInstance; _associatedObjectConfiguration: gd.ObjectConfiguration; _pixiContainer: PIXI.Container; - _pixiResourcesLoader: Class; + _pixiResourcesLoader: PixiResourcesLoader; _pixiObject: PIXI.DisplayObject; wasUsed: boolean; constructor( - project: gdProject, - layout: gdLayout, - instance: gdInitialInstance, - associatedObjectConfiguration: gdObjectConfiguration, + project: gd.Project, + layout: gd.Layout, + instance: gd.InitialInstance, + associatedObjectConfiguration: gd.ObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ); /** @@ -85,25 +186,25 @@ class RenderedInstance { * It can also display 2D artifacts on Pixi 2D plane (3D object shadow projected on the plane for instance). */ class Rendered3DInstance { - _project: gdProject; - _layout: gdLayout; - _instance: gdInitialInstance; - _associatedObjectConfiguration: gdObjectConfiguration; + _project: gd.Project; + _layout: gd.Layout; + _instance: gd.InitialInstance; + _associatedObjectConfiguration: gd.ObjectConfiguration; _pixiContainer: PIXI.Container; _threeGroup: THREE.Group; - _pixiResourcesLoader: Class; + _pixiResourcesLoader: PixiResourcesLoader; _pixiObject: PIXI.DisplayObject; _threeObject: THREE.Object3D | null; wasUsed: boolean; constructor( - project: gdProject, - layout: gdLayout, - instance: gdInitialInstance, - associatedObjectConfiguration: gdObjectConfiguration, + project: gd.Project, + layout: gd.Layout, + instance: gd.InitialInstance, + associatedObjectConfiguration: gd.ObjectConfiguration, pixiContainer: PIXI.Container, threeGroup: THREE.Group, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ); /** diff --git a/Extensions/TileMap/JsExtension.js b/Extensions/TileMap/JsExtension.js index 3b21b120771d..b4ac0a217773 100644 --- a/Extensions/TileMap/JsExtension.js +++ b/Extensions/TileMap/JsExtension.js @@ -1290,6 +1290,7 @@ module.exports = { manager.getOrLoadTextureCache( this._loadTileMapWithCallback.bind(this), (textureName) => + // @ts-ignore this._pixiResourcesLoader.getPIXITexture( this._project, mapping[textureName] || textureName diff --git a/newIDE/app/src/MainFrame/index.js b/newIDE/app/src/MainFrame/index.js index 896540b4e8db..59f7adfe2b01 100644 --- a/newIDE/app/src/MainFrame/index.js +++ b/newIDE/app/src/MainFrame/index.js @@ -175,7 +175,7 @@ import useCreateProject from '../Utils/UseCreateProject'; import newNameGenerator from '../Utils/NewNameGenerator'; import { addDefaultLightToAllLayers } from '../ProjectCreation/CreateProject'; import useEditorTabsStateSaving from './EditorTabs/UseEditorTabsStateSaving'; -import PixiResourcesLoader from '../ObjectsRendering/PixiResourcesLoader'; +import { pixiResourcesLoader } from '../ObjectsRendering/PixiResourcesLoader'; import useResourcesWatcher from './ResourcesWatcher'; import { extractGDevelopApiErrorStatusAndCode } from '../Utils/GDevelopServices/Errors'; import useVersionHistory from '../VersionHistory/UseVersionHistory'; @@ -901,7 +901,7 @@ const MainFrame = (props: Props) => { // the URL to a resource with a name in the old project is not re-used // for another resource with the same name in the new project. ResourcesLoader.burstAllUrlsCache(); - PixiResourcesLoader.burstCache(); + pixiResourcesLoader.burstCache(); const state = await setState(state => ({ ...state, diff --git a/newIDE/app/src/ObjectEditor/Editors/Model3DEditor.js b/newIDE/app/src/ObjectEditor/Editors/Model3DEditor.js index 76a7aeff65be..e25680d6edc8 100644 --- a/newIDE/app/src/ObjectEditor/Editors/Model3DEditor.js +++ b/newIDE/app/src/ObjectEditor/Editors/Model3DEditor.js @@ -25,7 +25,7 @@ import { makeDragSourceAndDropTarget } from '../../UI/DragAndDrop/DragSourceAndD import { DragHandleIcon } from '../../UI/DragHandle'; import DropIndicator from '../../UI/SortableVirtualizedItemList/DropIndicator'; import GDevelopThemeContext from '../../UI/Theme/GDevelopThemeContext'; -import PixiResourcesLoader from '../../ObjectsRendering/PixiResourcesLoader'; +import { pixiResourcesLoader } from '../../ObjectsRendering/PixiResourcesLoader'; import useAlertDialog from '../../UI/Alert/useAlertDialog'; import { type GLTF } from 'three/examples/jsm/loaders/GLTFLoader'; import * as SkeletonUtils from 'three/examples/jsm/utils/SkeletonUtils'; @@ -155,7 +155,7 @@ const Model3DEditor = ({ const [gltf, setGltf] = React.useState(null); const loadGltf = React.useCallback( async (modelResourceName: string) => { - const newModel3d = await PixiResourcesLoader.get3DModel( + const newModel3d = await pixiResourcesLoader.get3DModel( project, modelResourceName ); diff --git a/newIDE/app/src/ObjectEditor/Editors/SpineEditor.js b/newIDE/app/src/ObjectEditor/Editors/SpineEditor.js index 7e7f026d9ffe..9cdcbc930791 100644 --- a/newIDE/app/src/ObjectEditor/Editors/SpineEditor.js +++ b/newIDE/app/src/ObjectEditor/Editors/SpineEditor.js @@ -24,7 +24,8 @@ import { makeDragSourceAndDropTarget } from '../../UI/DragAndDrop/DragSourceAndD import { DragHandleIcon } from '../../UI/DragHandle'; import DropIndicator from '../../UI/SortableVirtualizedItemList/DropIndicator'; import GDevelopThemeContext from '../../UI/Theme/GDevelopThemeContext'; -import PixiResourcesLoader, { +import { + pixiResourcesLoader, type SpineDataOrLoadingError, } from '../../ObjectsRendering/PixiResourcesLoader'; import useAlertDialog from '../../UI/Alert/useAlertDialog'; @@ -109,7 +110,7 @@ const SpineEditor = ({ React.useEffect( () => { (async () => { - const spineData = await PixiResourcesLoader.getSpineData( + const spineData = await pixiResourcesLoader.getSpineData( project, spineResourceName ); diff --git a/newIDE/app/src/ObjectsRendering/ObjectsRenderingService.js b/newIDE/app/src/ObjectsRendering/ObjectsRenderingService.js index 8475e21e7785..b9f0607a661a 100644 --- a/newIDE/app/src/ObjectsRendering/ObjectsRenderingService.js +++ b/newIDE/app/src/ObjectsRendering/ObjectsRenderingService.js @@ -10,7 +10,7 @@ import RenderedTextEntryInstance from './Renderers/RenderedTextEntryInstance'; import RenderedParticleEmitterInstance from './Renderers/RenderedParticleEmitterInstance'; import RenderedCustomObjectInstance from './Renderers/RenderedCustomObjectInstance'; import RenderedSprite3DInstance from './Renderers/RenderedSprite3DInstance'; -import PixiResourcesLoader from './PixiResourcesLoader'; +import { pixiResourcesLoader } from './PixiResourcesLoader'; import ResourcesLoader from '../ResourcesLoader'; import RenderedInstance from './Renderers/RenderedInstance'; import Rendered3DInstance from './Renderers/Rendered3DInstance'; @@ -90,7 +90,7 @@ const ObjectsRenderingService = { associatedObjectConfiguration, pixiContainer, threeGroup, - PixiResourcesLoader + pixiResourcesLoader ); } else if (this.renderers.hasOwnProperty(objectType)) return new this.renderers[objectType]( @@ -99,7 +99,7 @@ const ObjectsRenderingService = { instance, associatedObjectConfiguration, pixiContainer, - PixiResourcesLoader + pixiResourcesLoader ); else { if (project.hasEventsBasedObject(objectType)) { @@ -116,7 +116,7 @@ const ObjectsRenderingService = { associatedObjectConfiguration, pixiContainer, threeGroup, - PixiResourcesLoader + pixiResourcesLoader ); } else { return new RenderedCustomObjectInstance( @@ -126,7 +126,7 @@ const ObjectsRenderingService = { associatedObjectConfiguration, pixiContainer, threeGroup, - PixiResourcesLoader + pixiResourcesLoader ); } } @@ -140,7 +140,7 @@ const ObjectsRenderingService = { instance, associatedObjectConfiguration, pixiContainer, - PixiResourcesLoader + pixiResourcesLoader ); } }, diff --git a/newIDE/app/src/ObjectsRendering/PixiResourcesLoader.js b/newIDE/app/src/ObjectsRendering/PixiResourcesLoader.js index e237f84a1212..424f869bf6d0 100644 --- a/newIDE/app/src/ObjectsRendering/PixiResourcesLoader.js +++ b/newIDE/app/src/ObjectsRendering/PixiResourcesLoader.js @@ -234,7 +234,7 @@ const getEmbedderResources = ( * This internally uses ResourcesLoader to get the URL of the resources. */ export default class PixiResourcesLoader { - static burstCache() { + burstCache() { loadedBitmapFonts = {}; loadedFontFamilies = {}; loadedTextures = {}; @@ -245,7 +245,7 @@ export default class PixiResourcesLoader { spineDataPromises = {}; } - static async _reloadEmbedderResources( + async _reloadEmbedderResources( project: gdProject, embeddedResourceName: string, embedderResourceKind: ResourceKind @@ -262,7 +262,7 @@ export default class PixiResourcesLoader { ); } - static async reloadResource(project: gdProject, resourceName: string) { + async reloadResource(project: gdProject, resourceName: string) { const loadedTexture = loadedTextures[resourceName]; if (loadedTexture && loadedTexture.textureCacheIds) { // The property textureCacheIds indicates that the PIXI.Texture object has some @@ -279,7 +279,7 @@ export default class PixiResourcesLoader { await this._reloadEmbedderResources(project, resourceName, 'atlas'); } - await PixiResourcesLoader.loadTextures(project, [resourceName]); + await this.reloadResources(project, [resourceName]); if (loadedOrLoading3DModelPromises[resourceName]) { delete loadedOrLoading3DModelPromises[resourceName]; @@ -333,9 +333,9 @@ export default class PixiResourcesLoader { } } /** - * (Re)load the PIXI texture represented by the given resources. + * Reload the the given resources. */ - static async loadTextures( + async reloadResources( project: gdProject, resourceNames: Array ): Promise { @@ -449,7 +449,7 @@ export default class PixiResourcesLoader { * should listen to PIXI.Texture `update` event, and refresh your object * if this event is triggered. */ - static getPIXITexture(project: gdProject, resourceName: string) { + getPIXITexture(project: gdProject, resourceName: string) { if (loadedTextures[resourceName]) { // TODO: we never consider textures as not valid anymore. When we // update the IDE to unload textures, we should handle loading them again @@ -494,20 +494,14 @@ export default class PixiResourcesLoader { * @param resourceName The name of the resource * @returns The requested texture, or a placeholder if not found. */ - static getThreeTexture( - project: gdProject, - resourceName: string - ): THREE.Texture { + getThreeTexture(project: gdProject, resourceName: string): THREE.Texture { const loadedThreeTexture = loadedThreeTextures[resourceName]; if (loadedThreeTexture) return loadedThreeTexture; // Texture is not loaded, load it now from the PixiJS texture. // TODO (3D) - optimization: don't load the PixiJS Texture if not used by PixiJS. // TODO (3D) - optimization: Ideally we could even share the same WebGL texture. - const pixiTexture = PixiResourcesLoader.getPIXITexture( - project, - resourceName - ); + const pixiTexture = this.getPIXITexture(project, resourceName); // @ts-ignore - source does exist on resource. const image = pixiTexture.baseTexture.resource.source; @@ -540,7 +534,7 @@ export default class PixiResourcesLoader { * @param options Set if the material should be transparent or not. * @returns The requested material. */ - static getThreeMaterial( + getThreeMaterial( project: gdProject, resourceName: string, { useTransparentTexture }: {| useTransparentTexture: boolean |} @@ -566,7 +560,7 @@ export default class PixiResourcesLoader { * @param options * @returns The requested material. */ - static get3DModel( + get3DModel( project: gdProject, resourceName: string ): Promise { @@ -584,7 +578,7 @@ export default class PixiResourcesLoader { * @param spineTextureAtlasName The name of the atlas texture resource. * @returns The requested texture atlas, or null if it could not be loaded. */ - static async _getSpineTextureAtlas( + async _getSpineTextureAtlas( project: gdProject, spineTextureAtlasName: string ): Promise { @@ -707,7 +701,7 @@ export default class PixiResourcesLoader { * @param spineName The name of the spine json resource * @returns The requested spine skeleton. */ - static async getSpineData( + async getSpineData( project: gdProject, spineName: string ): Promise { @@ -811,7 +805,7 @@ export default class PixiResourcesLoader { * should listen to PIXI.Texture `update` event, and refresh your object * if this event is triggered. */ - static getPIXIVideoTexture(project: gdProject, resourceName: string) { + getPIXIVideoTexture(project: gdProject, resourceName: string) { if (loadedTextures[resourceName]) { // TODO: we never consider textures as not valid anymore. When we // update the IDE to unload textures, we should handle loading them again @@ -860,10 +854,7 @@ export default class PixiResourcesLoader { * @returns a Promise that resolves with the font-family to be used * to render a text with the font. */ - static loadFontFamily( - project: gdProject, - resourceName: string - ): Promise { + loadFontFamily(project: gdProject, resourceName: string): Promise { // Avoid reloading a font if it's already cached if (loadedFontFamilies[resourceName]) { return Promise.resolve(loadedFontFamilies[resourceName]); @@ -909,7 +900,7 @@ export default class PixiResourcesLoader { * The font won't be loaded. * @returns The font-family to be used to render a text with the font. */ - static getFontFamily(project: gdProject, resourceName: string) { + getFontFamily(project: gdProject, resourceName: string) { if (loadedFontFamilies[resourceName]) { return loadedFontFamilies[resourceName]; } @@ -921,10 +912,7 @@ export default class PixiResourcesLoader { /** * Get the data from a bitmap font file (fnt/xml) resource in the IDE. */ - static getBitmapFontData( - project: gdProject, - resourceName: string - ): Promise { + getBitmapFontData(project: gdProject, resourceName: string): Promise { if (loadedBitmapFonts[resourceName]) { return Promise.resolve(loadedBitmapFonts[resourceName].data); } @@ -963,17 +951,14 @@ export default class PixiResourcesLoader { }); } - static getInvalidPIXITexture() { + getInvalidPIXITexture() { return invalidTexture; } /** * Get the data from a json resource in the IDE. */ - static getResourceJsonData( - project: gdProject, - resourceName: string - ): Promise { + getResourceJsonData(project: gdProject, resourceName: string): Promise { if (!project.getResourcesManager().hasResource(resourceName)) return Promise.reject( new Error(`Can't find resource called ${resourceName}.`) @@ -999,3 +984,6 @@ export default class PixiResourcesLoader { .then(response => response.data); } } + +/** The global, unique instance of PixiResourcesLoader. */ +export const pixiResourcesLoader = new PixiResourcesLoader(); diff --git a/newIDE/app/src/ObjectsRendering/Renderers/Rendered3DInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/Rendered3DInstance.js index 0f7ef641fb58..7a9b1e01d6d0 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/Rendered3DInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/Rendered3DInstance.js @@ -15,7 +15,7 @@ export default class Rendered3DInstance { _associatedObjectConfiguration: gdObjectConfiguration; _pixiContainer: PIXI.Container; _threeGroup: THREE.Group; - _pixiResourcesLoader: Class; + _pixiResourcesLoader: PixiResourcesLoader; _pixiObject: PIXI.DisplayObject; _threeObject: THREE.Object3D | null; wasUsed: boolean; @@ -27,7 +27,7 @@ export default class Rendered3DInstance { associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, threeGroup: THREE.Group, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { this._pixiObject = null; this._threeObject = null; diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedCustomObjectInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedCustomObjectInstance.js index b61c97ee61f1..2190bbd1887a 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedCustomObjectInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedCustomObjectInstance.js @@ -45,7 +45,7 @@ export default class RenderedCustomObjectInstance extends Rendered3DInstance associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, threeGroup: THREE.Group, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, @@ -175,7 +175,7 @@ export default class RenderedCustomObjectInstance extends Rendered3DInstance if (this.childrenRenderedInstances.length === 0) { // Show a placeholder. this._pixiObject = new PIXI.Sprite( - PixiResourcesLoader.getInvalidPIXITexture() + this._pixiResourcesLoader.getInvalidPIXITexture() ); this._pixiContainer.addChild(this._pixiObject); } diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedIconInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedIconInstance.js index 2d80dc59e7f5..fcbbdc7b320f 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedIconInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedIconInstance.js @@ -15,7 +15,7 @@ export default function makeRenderer(iconPath: string) { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedInstance.js index fb305b5da7a5..a8e874cc03dd 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedInstance.js @@ -12,7 +12,7 @@ export default class RenderedInstance { _instance: gdInitialInstance; _associatedObjectConfiguration: gdObjectConfiguration; _pixiContainer: PIXI.Container; - _pixiResourcesLoader: Class; + _pixiResourcesLoader: PixiResourcesLoader; _pixiObject: PIXI.DisplayObject; wasUsed: boolean; @@ -22,7 +22,7 @@ export default class RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { this._pixiObject = null; this._instance = instance; diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedPanelSpriteInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedPanelSpriteInstance.js index 948a5f7b5d57..fe5075501992 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedPanelSpriteInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedPanelSpriteInstance.js @@ -28,7 +28,7 @@ export default class RenderedPanelSpriteInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, @@ -86,7 +86,7 @@ export default class RenderedPanelSpriteInstance extends RenderedInstance { this._associatedObjectConfiguration ); this._textureName = panelSprite.getTexture(); - const texture = PixiResourcesLoader.getPIXITexture( + const texture = this._pixiResourcesLoader.getPIXITexture( this._project, this._textureName ); @@ -237,7 +237,7 @@ export default class RenderedPanelSpriteInstance extends RenderedInstance { this._associatedObjectConfiguration ); this._textureName = panelSprite.getTexture(); - const texture = PixiResourcesLoader.getPIXITexture( + const texture = this._pixiResourcesLoader.getPIXITexture( this._project, this._textureName ); diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedParticleEmitterInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedParticleEmitterInstance.js index eaf4054c6750..ee9c318240a5 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedParticleEmitterInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedParticleEmitterInstance.js @@ -16,7 +16,7 @@ export default class RenderedParticleEmitterInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedSprite3DInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedSprite3DInstance.js index 9a7a622bbace..b483a01c9b92 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedSprite3DInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedSprite3DInstance.js @@ -29,7 +29,7 @@ export default class RenderedSprite3DInstance extends Rendered3DInstance { associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, threeGroup: THREE.Group, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedSpriteInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedSpriteInstance.js index be44092eee12..6eba16ad30e2 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedSpriteInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedSpriteInstance.js @@ -24,7 +24,7 @@ export default class RenderedSpriteInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedTextInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedTextInstance.js index 8ecae964239d..f95f2cbdac71 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedTextInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedTextInstance.js @@ -38,7 +38,7 @@ export default class RenderedTextInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, @@ -133,10 +133,8 @@ export default class RenderedTextInstance extends RenderedInstance { if (this._fontName !== textObjectConfiguration.getFontName()) { //Avoid calling loadFontFamily if the font didn't changed. this._fontName = textObjectConfiguration.getFontName(); - PixiResourcesLoader.loadFontFamily( - this._project, - textObjectConfiguration.getFontName() - ) + this._pixiResourcesLoader + .loadFontFamily(this._project, textObjectConfiguration.getFontName()) .then(fontFamily => { // Once the font is loaded, we can use the given fontFamily. this._fontFamily = fontFamily; diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedTiledSpriteInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedTiledSpriteInstance.js index 6876d5df3942..321d342e7f56 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedTiledSpriteInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedTiledSpriteInstance.js @@ -17,7 +17,7 @@ export default class RenderedTiledSpriteInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, @@ -34,7 +34,10 @@ export default class RenderedTiledSpriteInstance extends RenderedInstance { ); this._texture = tiledSprite.getTexture(); this._pixiObject = new PIXI.TilingSprite( - PixiResourcesLoader.getPIXITexture(project, tiledSprite.getTexture()), + this._pixiResourcesLoader.getPIXITexture( + project, + tiledSprite.getTexture() + ), tiledSprite.getWidth(), tiledSprite.getHeight() ); @@ -80,7 +83,7 @@ export default class RenderedTiledSpriteInstance extends RenderedInstance { if (this._texture !== tiledSprite.getTexture()) { this._texture = tiledSprite.getTexture(); - this._pixiObject.texture = PixiResourcesLoader.getPIXITexture( + this._pixiObject.texture = this._pixiResourcesLoader.getPIXITexture( this._project, tiledSprite.getTexture() ); diff --git a/newIDE/app/src/ObjectsRendering/Renderers/RenderedUnknownInstance.js b/newIDE/app/src/ObjectsRendering/Renderers/RenderedUnknownInstance.js index 25ac70ba4002..9aeb3f02e218 100644 --- a/newIDE/app/src/ObjectsRendering/Renderers/RenderedUnknownInstance.js +++ b/newIDE/app/src/ObjectsRendering/Renderers/RenderedUnknownInstance.js @@ -14,7 +14,7 @@ export default class RenderedUnknownInstance extends RenderedInstance { instance: gdInitialInstance, associatedObjectConfiguration: gdObjectConfiguration, pixiContainer: PIXI.Container, - pixiResourcesLoader: Class + pixiResourcesLoader: PixiResourcesLoader ) { super( project, diff --git a/newIDE/app/src/SceneEditor/index.js b/newIDE/app/src/SceneEditor/index.js index 0bdba908bfc8..cde44b181610 100644 --- a/newIDE/app/src/SceneEditor/index.js +++ b/newIDE/app/src/SceneEditor/index.js @@ -38,7 +38,7 @@ import { getHistoryInitialState, saveToHistory, } from '../Utils/History'; -import PixiResourcesLoader from '../ObjectsRendering/PixiResourcesLoader'; +import { pixiResourcesLoader } from '../ObjectsRendering/PixiResourcesLoader'; import { type ObjectWithContext, type GroupWithContext, @@ -236,7 +236,7 @@ export default class SceneEditor extends React.Component { // through the RenderedInstance's, triggering crashes. So the scene rendering // is paused during this period. editorDisplay.startSceneRendering(false); - await PixiResourcesLoader.reloadResource(project, resourceName); + await pixiResourcesLoader.reloadResource(project, resourceName); editorDisplay.forceUpdateObjectsList(); @@ -1610,12 +1610,14 @@ export default class SceneEditor extends React.Component { .toJSArray(); resourcesInUse.delete(); - PixiResourcesLoader.loadTextures(project, objectResourceNames).then(() => { - if (this.editorDisplay) - this.editorDisplay.instancesHandlers.resetInstanceRenderersFor( - object.getName() - ); - }); + pixiResourcesLoader + .reloadResources(project, objectResourceNames) + .then(() => { + if (this.editorDisplay) + this.editorDisplay.instancesHandlers.resetInstanceRenderersFor( + object.getName() + ); + }); }; render() {