|
@@ -3870,6 +3870,14 @@ eval_inst_cleanup:
|
|
|
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
|
|
|
void tnsLuaEnsureNode(lua_State* L,int index,tnsObject* o);
|
|
|
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;
|
|
|
}
|
|
|
if(o->Type==TNS_OBJECT_ROOT){ tnsEvaluatedNode* en=ed->Scene->CurrentChild;
|
|
|
+ tnsRunNode(en,"any",o);
|
|
|
#ifdef LA_WITH_LUAJIT
|
|
|
tnsLuaEnsureNode(ed->L,en->LuaID,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){
|
|
|
if(!o || !o->PlayDuplicate) return;
|
|
|
+ tnsClearDriversEval(o);
|
|
|
while(lstPopPointer(&o->PlayDuplicate->ChildObjects));
|
|
|
for(laListItemPointer* lip=o->ChildObjects.pFirst;lip;lip=lip->pNext){
|
|
|
tnsObject*co=lip->p; tnsClearPlayDuplicate(co);
|
|
@@ -3931,7 +3947,14 @@ void tnsClearPlayState(tnsObject* o){
|
|
|
if(o->EvaluatedPlay.Commands) tnsFreeEvaluatedArray(&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){
|
|
|
+ tnsEnsureDriversEval(o);
|
|
|
if(o->Flags&TNS_OBJECT_FLAGS_PLAY_DUPLICATE) return o;
|
|
|
if(o->PlayDuplicate) return o->PlayDuplicate;
|
|
|
int obsize=tnsSizeOfObject(o);
|
|
@@ -4025,6 +4048,7 @@ void tnsLuaRunNode(lua_State* L, tnsEvaluatedNode* en, char* func, tnsObject* ro
|
|
|
}
|
|
|
|
|
|
#endif //luajit
|
|
|
+
|
|
|
void tnsAddEvaluatedInstance(tnsEvaluateData* ed, tnsObject* ob, tnsDrawEvaluatedInstanceF Draw, int Layer,
|
|
|
int IsActive, int MeshSelectionType, int InstanceSelectionID){
|
|
|
tnsEvaluatedInstance* ei;
|