Add cache clearing method for tilemap objects and use it when reloading resources

This commit is contained in:
AlexandreSi
2023-10-09 17:54:26 +02:00
parent 2c92c1a259
commit 4f1b75cacf
2 changed files with 26 additions and 1 deletions

View File

@@ -1044,7 +1044,9 @@ module.exports = {
.setExtensionInformation(
'TileMap',
_('Tilemap'),
"The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc...",
_(
"The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc..."
),
'Todor Imreorov',
'Open source (MIT License)'
)
@@ -1061,6 +1063,25 @@ module.exports = {
return extension;
},
registerClearCache: function (
objectsRenderingService /*: ObjectsRenderingService */
) {
const TilemapHelper = objectsRenderingService.requireModule(
__dirname,
'helper/TileMapHelper'
);
const clearCaches = (
project /* InstanceHolder - gdProject in the editor */
) => {
/** @type {TileMapHelper.TileMapManager} */
const manager = TilemapHelper.TileMapManager.getManager(project);
manager.clearCaches();
};
objectsRenderingService.registerClearCache(clearCaches);
},
/**
* You can optionally add sanity tests that will check the basic working
* of your extension behaviors/objects by instantiating behaviors/objects

View File

@@ -62,6 +62,7 @@ import MosaicEditorsDisplay from './MosaicEditorsDisplay';
import SwipeableDrawerEditorsDisplay from './SwipeableDrawerEditorsDisplay';
import { type SceneEditorsDisplayInterface } from './EditorsDisplay.flow';
import newNameGenerator from '../Utils/NewNameGenerator';
import ObjectsRenderingService from '../ObjectsRendering/ObjectsRenderingService';
const gd: libGDevelop = global.gd;
@@ -235,6 +236,9 @@ export default class SceneEditor extends React.Component<Props, State> {
gd.ProjectBrowserHelper.exposeProjectObjects(project, objectsCollector);
const objectNames = objectsCollector.getObjectNames().toJSArray();
objectsCollector.delete();
ObjectsRenderingService.renderersCacheClearingMethods.forEach(clear =>
clear(project)
);
objectNames.forEach(objectName => {
editorDisplay.instancesHandlers.resetInstanceRenderersFor(objectName);
});