@@ -85,6 +85,12 @@ public class ScnWidget extends Widget {
85
85
private WalkZoneWindow walkZoneWindow ;
86
86
87
87
private boolean showWalkZone ;
88
+
89
+ /**
90
+ * The NOTIFY_PROJECT_LOADED listener is called from other thread.
91
+ * This flag is to recreate the scene in the OpenGL thread.
92
+ */
93
+ private boolean projectLoadedFlag = false ;
88
94
89
95
public ScnWidget (Skin skin ) {
90
96
bigFont = skin .get ("big-font" , BitmapFont .class );
@@ -107,23 +113,19 @@ public void propertyChange(PropertyChangeEvent e) {
107
113
+ e .getPropertyName ());
108
114
109
115
if (e .getPropertyName ().equals (Project .NOTIFY_SCENE_SELECTED )) {
110
- setSelectedScene (Ctx .project .getSelectedScene ());
116
+ if (!projectLoadedFlag )
117
+ setSelectedScene (Ctx .project .getSelectedScene ());
111
118
} else if (e .getPropertyName ().equals (
112
119
Project .NOTIFY_ACTOR_SELECTED )) {
113
- setSelectedActor (Ctx .project .getSelectedActor ());
120
+ if (!projectLoadedFlag )
121
+ setSelectedActor (Ctx .project .getSelectedActor ());
114
122
} else if (e .getPropertyName ().equals (
115
123
Project .NOTIFY_FA_SELECTED )) {
116
- setSelectedFA (Ctx .project .getSelectedFA ());
124
+ if (!projectLoadedFlag )
125
+ setSelectedFA (Ctx .project .getSelectedFA ());
117
126
} else if (e .getPropertyName ().equals (
118
127
Project .NOTIFY_PROJECT_LOADED )) {
119
- if (scn != null ) {
120
- scn .dispose ();
121
- EngineAssetManager .getInstance ().dispose ();
122
- scn = null ;
123
- }
124
-
125
- EngineAssetManager .createEditInstance (Ctx .project
126
- .getProjectDir ().getAbsolutePath () + Project .ASSETS_PATH , Ctx .project .getWorld ().getWidth (), Ctx .project .getWorld ().getHeight ());
128
+ projectLoadedFlag = true ;
127
129
}
128
130
}
129
131
});
@@ -195,6 +197,23 @@ else if (((Element) e.getNewValue()).getTagName()
195
197
196
198
@ Override
197
199
public void act (float delta ) {
200
+ if (projectLoadedFlag ) {
201
+ projectLoadedFlag = false ;
202
+
203
+ if (scn != null ) {
204
+ scn .dispose ();
205
+ EngineAssetManager .getInstance ().dispose ();
206
+ scn = null ;
207
+ }
208
+
209
+ EngineAssetManager .createEditInstance (Ctx .project
210
+ .getProjectDir ().getAbsolutePath () + Project .ASSETS_PATH , Ctx .project .getWorld ().getWidth (), Ctx .project .getWorld ().getHeight ());
211
+
212
+ setSelectedScene (Ctx .project .getSelectedScene ());
213
+ setSelectedActor (Ctx .project .getSelectedActor ());
214
+ setSelectedFA (Ctx .project .getSelectedFA ());
215
+ }
216
+
198
217
if (scn != null && animation && !loading && !loadingError ) {
199
218
faRenderer .update (delta );
200
219
scn .update (delta );
0 commit comments