|  | @@ -3870,6 +3870,14 @@ eval_inst_cleanup:
 | 
											
												
													
														|  |      ed->OverrideID=origid; ed->FillOutline=origoutline;
 |  |      ed->OverrideID=origid; ed->FillOutline=origoutline;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +void tnsRunNode(tnsEvaluatedNode* en, char* func, tnsObject* root){
 | 
											
												
													
														|  | 
 |  | +    tnsObject* ob=root; // should be the same as en->Target.
 | 
											
												
													
														|  | 
 |  | +    for(laRackPage* rp=ob->Drivers->Pages.pFirst;rp;rp=rp->Item.pNext){
 | 
											
												
													
														|  | 
 |  | +        if(!rp->Eval.pFirst) continue;
 | 
											
												
													
														|  | 
 |  | +        laRunPage(rp, 1);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  #ifdef LA_WITH_LUAJIT
 |  |  #ifdef LA_WITH_LUAJIT
 | 
											
												
													
														|  |  void tnsLuaEnsureNode(lua_State* L,int index,tnsObject* o);
 |  |  void tnsLuaEnsureNode(lua_State* L,int index,tnsObject* o);
 | 
											
												
													
														|  |  void tnsLuaRunNode(lua_State* L, tnsEvaluatedNode* en, char* func, tnsObject* root);
 |  |  void tnsLuaRunNode(lua_State* L, tnsEvaluatedNode* en, char* func, tnsObject* root);
 | 
											
										
											
												
													
														|  | @@ -3883,6 +3891,7 @@ void tnsEvaluateThisObject(tnsObject *o, tnsEvaluateData* ed){
 | 
											
												
													
														|  |              ed->Scene->CurrentParent=ed->Scene->CurrentChild; ed->Scene->CurrentChild=ed->Scene->CurrentParent->Children.pFirst;
 |  |              ed->Scene->CurrentParent=ed->Scene->CurrentChild; ed->Scene->CurrentChild=ed->Scene->CurrentParent->Children.pFirst;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          if(o->Type==TNS_OBJECT_ROOT){ tnsEvaluatedNode* en=ed->Scene->CurrentChild;
 |  |          if(o->Type==TNS_OBJECT_ROOT){ tnsEvaluatedNode* en=ed->Scene->CurrentChild;
 | 
											
												
													
														|  | 
 |  | +            tnsRunNode(en,"any",o);
 | 
											
												
													
														|  |  #ifdef LA_WITH_LUAJIT
 |  |  #ifdef LA_WITH_LUAJIT
 | 
											
												
													
														|  |              tnsLuaEnsureNode(ed->L,en->LuaID,o);
 |  |              tnsLuaEnsureNode(ed->L,en->LuaID,o);
 | 
											
												
													
														|  |              tnsLuaRunNode(ed->L,en,"run",o);
 |  |              tnsLuaRunNode(ed->L,en,"run",o);
 | 
											
										
											
												
													
														|  | @@ -3902,8 +3911,15 @@ void tnsEvaluateThisObject(tnsObject *o, tnsEvaluateData* ed){
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +void tnsClearDriversEval(tnsObject* o){
 | 
											
												
													
														|  | 
 |  | +    if(!o->Drivers) return;
 | 
											
												
													
														|  | 
 |  | +    for(laRackPage* rp=o->Drivers->Pages.pFirst;rp;rp=rp->Item.pNext){
 | 
											
												
													
														|  | 
 |  | +        while(lstPopPointer(&rp->Eval)); while(lstPopPointer(&rp->AlwaysBranchers));
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  void tnsClearPlayDuplicate(tnsObject* o){
 |  |  void tnsClearPlayDuplicate(tnsObject* o){
 | 
											
												
													
														|  |      if(!o || !o->PlayDuplicate) return;
 |  |      if(!o || !o->PlayDuplicate) return;
 | 
											
												
													
														|  | 
 |  | +    tnsClearDriversEval(o);
 | 
											
												
													
														|  |      while(lstPopPointer(&o->PlayDuplicate->ChildObjects));
 |  |      while(lstPopPointer(&o->PlayDuplicate->ChildObjects));
 | 
											
												
													
														|  |      for(laListItemPointer* lip=o->ChildObjects.pFirst;lip;lip=lip->pNext){
 |  |      for(laListItemPointer* lip=o->ChildObjects.pFirst;lip;lip=lip->pNext){
 | 
											
												
													
														|  |          tnsObject*co=lip->p; tnsClearPlayDuplicate(co);
 |  |          tnsObject*co=lip->p; tnsClearPlayDuplicate(co);
 | 
											
										
											
												
													
														|  | @@ -3931,7 +3947,14 @@ void tnsClearPlayState(tnsObject* o){
 | 
											
												
													
														|  |      if(o->EvaluatedPlay.Commands) tnsFreeEvaluatedArray(&o->EvaluatedPlay);
 |  |      if(o->EvaluatedPlay.Commands) tnsFreeEvaluatedArray(&o->EvaluatedPlay);
 | 
											
												
													
														|  |      tnsFreeEvaluatedScene(&o->EvaluatedPlay);
 |  |      tnsFreeEvaluatedScene(&o->EvaluatedPlay);
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +void tnsEnsureDriversEval(tnsObject* o){
 | 
											
												
													
														|  | 
 |  | +    if(!o->Drivers) return;
 | 
											
												
													
														|  | 
 |  | +    for(laRackPage* rp=o->Drivers->Pages.pFirst;rp;rp=rp->Item.pNext){
 | 
											
												
													
														|  | 
 |  | +        laRebuildPageEval(rp);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  tnsObject* tnsEnsurePlayDuplicate(tnsObject* o){
 |  |  tnsObject* tnsEnsurePlayDuplicate(tnsObject* o){
 | 
											
												
													
														|  | 
 |  | +    tnsEnsureDriversEval(o);
 | 
											
												
													
														|  |      if(o->Flags&TNS_OBJECT_FLAGS_PLAY_DUPLICATE) return o;
 |  |      if(o->Flags&TNS_OBJECT_FLAGS_PLAY_DUPLICATE) return o;
 | 
											
												
													
														|  |      if(o->PlayDuplicate) return o->PlayDuplicate;
 |  |      if(o->PlayDuplicate) return o->PlayDuplicate;
 | 
											
												
													
														|  |      int obsize=tnsSizeOfObject(o);
 |  |      int obsize=tnsSizeOfObject(o);
 | 
											
										
											
												
													
														|  | @@ -4025,6 +4048,7 @@ void tnsLuaRunNode(lua_State* L, tnsEvaluatedNode* en, char* func, tnsObject* ro
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  #endif //luajit
 |  |  #endif //luajit
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  void tnsAddEvaluatedInstance(tnsEvaluateData* ed, tnsObject* ob, tnsDrawEvaluatedInstanceF Draw, int Layer, 
 |  |  void tnsAddEvaluatedInstance(tnsEvaluateData* ed, tnsObject* ob, tnsDrawEvaluatedInstanceF Draw, int Layer, 
 | 
											
												
													
														|  |      int IsActive, int MeshSelectionType, int InstanceSelectionID){
 |  |      int IsActive, int MeshSelectionType, int InstanceSelectionID){
 | 
											
												
													
														|  |      tnsEvaluatedInstance* ei;
 |  |      tnsEvaluatedInstance* ei;
 |