Browse Source

Ensure we get at least one scene update on a JSComponent

Josh Engebretson 10 years ago
parent
commit
9d83d933a1
1 changed files with 9 additions and 1 deletions
  1. 9 1
      Source/Atomic/Javascript/JSComponent.cpp

+ 9 - 1
Source/Atomic/Javascript/JSComponent.cpp

@@ -270,6 +270,13 @@ void JSComponent::HandleSceneUpdate(StringHash eventType, VariantMap& eventData)
 
 
         duk_pop(ctx);
         duk_pop(ctx);
     }
     }
+    else
+    {
+        Scene* scene = GetScene();
+        if (scene)
+            UnsubscribeFromEvent(scene, E_SCENEUPDATE);
+        subscribed_ = false;
+    }
 }
 }
 
 
 void JSComponent::UpdateEventSubscription()
 void JSComponent::UpdateEventSubscription()
@@ -285,7 +292,8 @@ void JSComponent::UpdateEventSubscription()
 
 
     if (enabled)
     if (enabled)
     {
     {
-        if (!subscribed_ && (methods_[JSMETHOD_UPDATE] || methods_[JSMETHOD_DELAYEDSTART] ))
+        // we get at least one scene update if not started
+        if (!subscribed_ && (!started_ || (methods_[JSMETHOD_UPDATE] || methods_[JSMETHOD_DELAYEDSTART] )))
         {
         {
             SubscribeToEvent(scene, E_SCENEUPDATE, HANDLER(JSComponent, HandleSceneUpdate));
             SubscribeToEvent(scene, E_SCENEUPDATE, HANDLER(JSComponent, HandleSceneUpdate));
             subscribed_ = true;
             subscribed_ = true;