PhaserEditor2D / PhaserEditor

A friendly IDE to develop HTML5 games based on the Phaser framework.
https://phasereditor2d.com
Eclipse Public License 1.0
330 stars 45 forks source link

Removing sprites from an atlas breaks canvases that use that sprite #72

Closed jsenson closed 6 years ago

jsenson commented 6 years ago

Came across this when our artist tried to update some texture atlases made in TexturePacker.

If you remove a sprite from an atlas and replace the atlas on the file system, opening a .canvas file that used that sprite generates the error below. The canvas is completely unusable and doesn't load at all beyond showing that error.

The error only occurs if you open the canvas file after replacing the atlas file. If you open the canvas and THEN replace the atlas it properly updates and shows the red box in the canvas for a missing asset.

So the workaround we're using is to make sure all canvases are open in the editor before updating atlases.

Thanks,

Failed to create the part's controls

java.lang.ClassCastException: phasereditor.assetpack.core.AtlasAssetModel cannot be cast to phasereditor.assetpack.core.IAssetFrameModel at phasereditor.canvas.ui.shapes.AtlasSpriteNode.(AtlasSpriteNode.java:36) at phasereditor.canvas.ui.shapes.AtlasSpriteControl.createNode(AtlasSpriteControl.java:50) at phasereditor.canvas.ui.shapes.AtlasSpriteControl.createNode(AtlasSpriteControl.java:1) at phasereditor.canvas.ui.shapes.BaseObjectControl.(BaseObjectControl.java:81) at phasereditor.canvas.ui.shapes.BaseSpriteControl.(BaseSpriteControl.java:74) at phasereditor.canvas.ui.shapes.AtlasSpriteControl.(AtlasSpriteControl.java:40) at phasereditor.canvas.ui.shapes.CanvasObjectFactory.createObjectControl(CanvasObjectFactory.java:49) at phasereditor.canvas.ui.shapes.GroupControl.createNode(GroupControl.java:82) at phasereditor.canvas.ui.shapes.BaseObjectControl.(BaseObjectControl.java:81) at phasereditor.canvas.ui.shapes.GroupControl.(GroupControl.java:59) at phasereditor.canvas.ui.editors.ObjectCanvas.createScene(ObjectCanvas.java:220) at phasereditor.canvas.ui.editors.ObjectCanvas.init(ObjectCanvas.java:100) at phasereditor.canvas.ui.editors.CanvasEditor.initCanvas(CanvasEditor.java:468) at phasereditor.canvas.ui.editors.CanvasEditor.afterCreateWidgets(CanvasEditor.java:393) at phasereditor.canvas.ui.editors.CanvasEditor.createCanvasPartControl(CanvasEditor.java:381) at phasereditor.canvas.ui.editors.CanvasEditor.createDesignPage(CanvasEditor.java:311) at phasereditor.canvas.ui.editors.CanvasEditor.createPages(CanvasEditor.java:249) at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151) at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:99) at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:355) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990) at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955) at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124) at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399) at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318) at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74) at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56) at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:997) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:666) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1289) at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda$0(LazyStackRenderer.java:68) at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:144) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4870) at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:212) at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39) at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:52) at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60) at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374) at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:173) at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:620) at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:584) at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:768) at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:401) at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1187) at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3261) at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3176) at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3158) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3153) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3117) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3107) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:563) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:518) at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileAction.java:100) at org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystemEditorAction.java:97) at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:216) at org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191) at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:46) at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:851) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:44) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:848) at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1163) at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:451) at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:273) at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:268) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:308) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4257) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1502) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1525) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1510) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1314) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4081) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3698) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151) at phasereditor.ide.intro.PhaserIDE2.start(PhaserIDE2.java:42) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) at org.eclipse.equinox.launcher.Main.run(Main.java:1499)

PhaserEditor2D commented 6 years ago

Ok, I can reproduce the error.

PhaserEditor2D commented 6 years ago

Fixed.

I created a patch for you. Please download this ZIP:

patch-v1.4.4-issue-72-0.zip

Backup the old file if you like, I have it here anyway. Tell me if it works.

jsenson commented 6 years ago

That seems to have done the trick. I'm not seeing the error any more and the canvas loads properly.

Thanks a lot for the quick update.