| 
														
															@@ -561,6 +561,9 @@ void tnsset_InstancerInstance(tnsInstancer *o, tnsObject* value){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 void *tnsget_detached_FirstRootObject(void *UNUSED1, void *UNUSED2){ 
														 | 
														
														 | 
														
															 void *tnsget_detached_FirstRootObject(void *UNUSED1, void *UNUSED2){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return T->World->RootObjects.pFirst; 
														 | 
														
														 | 
														
															     return T->World->RootObjects.pFirst; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+void *tnsget_detached_FirstMaterial(void *UNUSED1, void *UNUSED2){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    return T->World->Materials.pFirst; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 void *tnsget_detached_FirstTexture(void *UNUSED1, void *UNUSED2){ 
														 | 
														
														 | 
														
															 void *tnsget_detached_FirstTexture(void *UNUSED1, void *UNUSED2){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return T->Textures.pFirst; 
														 | 
														
														 | 
														
															     return T->Textures.pFirst; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -793,6 +796,9 @@ int lafilter_NodeCategory(void* unused, laNodeCategory* c){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if(c->For&MAIN.FilterNodeCategory) return 1; return 0; 
														 | 
														
														 | 
														
															     if(c->For&MAIN.FilterNodeCategory) return 1; return 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+void tnspost_Material(tnsMaterial *m){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    tnsEnsureMaterialShader(m,1); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 void tnspost_Object(tnsObject *o){ 
														 | 
														
														 | 
														
															 void tnspost_Object(tnsObject *o){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     laListItemPointer* NextLip; 
														 | 
														
														 | 
														
															     laListItemPointer* NextLip; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for(laListItemPointer* lip=o->ChildObjects.pFirst;lip;lip=NextLip){ 
														 | 
														
														 | 
														
															     for(laListItemPointer* lip=o->ChildObjects.pFirst;lip;lip=NextLip){ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -824,10 +830,11 @@ void* tnsget_MeshObjectFaceRaw(tnsMeshObject* o, int* r_size, int* r_is_copy){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     arrEnsureLength(&arr, i, &max, sizeof(int)); 
														 | 
														
														 | 
														
															     arrEnsureLength(&arr, i, &max, sizeof(int)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     arr[i]=o->totf; i++; 
														 | 
														
														 | 
														
															     arr[i]=o->totf; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     for(int f=0;f<o->totf;f++){ 
														 | 
														
														 | 
														
															     for(int f=0;f<o->totf;f++){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        arrEnsureLength(&arr, i+o->f[f].looplen+2, &max, sizeof(int)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        arrEnsureLength(&arr, i+o->f[f].looplen+6, &max, sizeof(int)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         arr[i]=o->f[f].looplen; i++; 
														 | 
														
														 | 
														
															         arr[i]=o->f[f].looplen; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         arr[i]=o->f[f].flags; i++; 
														 | 
														
														 | 
														
															         arr[i]=o->f[f].flags; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         arr[i]=o->f[f].mat; i++; 
														 | 
														
														 | 
														
															         arr[i]=o->f[f].mat; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        float* nm=(void*)&arr[i]; tnsVectorSet3v(nm,o->f[f].n); i+=3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for(int l=0;l<o->f[f].looplen;l++){ 
														 | 
														
														 | 
														
															         for(int l=0;l<o->f[f].looplen;l++){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             arr[i]=o->f[f].loop[l]; i++; 
														 | 
														
														 | 
														
															             arr[i]=o->f[f].loop[l]; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -851,6 +858,7 @@ void tnsset_MeshObjectFaceRaw(tnsMeshObject* o, int* data, int s){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         f->looplen=data[i]; i++; 
														 | 
														
														 | 
														
															         f->looplen=data[i]; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         f->flags=data[i]; i++; 
														 | 
														
														 | 
														
															         f->flags=data[i]; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         f->mat=data[i]; i++; 
														 | 
														
														 | 
														
															         f->mat=data[i]; i++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        float* nm=(void*)&data[i]; tnsVectorSet3v(f->n,nm); i+=3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         f->loop=calloc(1,sizeof(int)*f->looplen); 
														 | 
														
														 | 
														
															         f->loop=calloc(1,sizeof(int)*f->looplen); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for(int li=0;li<f->looplen;li++){ 
														 | 
														
														 | 
														
															         for(int li=0;li<f->looplen;li++){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             f->loop[li]=data[i]; i++; 
														 | 
														
														 | 
														
															             f->loop[li]=data[i]; i++; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1048,14 +1056,15 @@ void la_RegisterTNSProps(){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddSubGroup(p, "active_root", "Active Root Object", "Global active root object", "tns_object",0,0,0,offsetof(tnsWorld,ActiveRoot),tnsget_detached_FirstRootObject,0,laget_ListNext,0,0,0,0,LA_UDF_REFER); 
														 | 
														
														 | 
														
															         laAddSubGroup(p, "active_root", "Active Root Object", "Global active root object", "tns_object",0,0,0,offsetof(tnsWorld,ActiveRoot),tnsget_detached_FirstRootObject,0,laget_ListNext,0,0,0,0,LA_UDF_REFER); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         sp = laAddSubGroup(p, "objects", "Objects", "List of all objects", "tns_object",tnsget_ObjectType, 0,0,-1,0,0,0,0,0,0,offsetof(tnsWorld, AllObjects), 0); 
														 | 
														
														 | 
														
															         sp = laAddSubGroup(p, "objects", "Objects", "List of all objects", "tns_object",tnsget_ObjectType, 0,0,-1,0,0,0,0,0,0,offsetof(tnsWorld, AllObjects), 0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laSubGroupExtraFunctions(sp,tnsfilter_SavableObject,tnsfilter_SavableObject,0,0,0); 
														 | 
														
														 | 
														
															         laSubGroupExtraFunctions(sp,tnsfilter_SavableObject,tnsfilter_SavableObject,0,0,0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        laAddSubGroup(p, "materials", "Materials", "List of all materials", "tns_material",0,0,0,-1,0,0,0,0,0,0,offsetof(tnsWorld, Materials), 0); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        sp = laAddSubGroup(p, "materials", "Materials", "List of all materials", "tns_material",0,0,0,-1,0,0,0,0,0,0,offsetof(tnsWorld, Materials), 0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        laSubGroupDetachable(sp, tnsget_detached_FirstMaterial, laget_ListNext); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     p = laAddPropertyContainer("tns_child_object", "Child Object", "Child object linker", 0,0,sizeof(laListItemPointer), 0,0,0);{ 
														 | 
														
														 | 
														
															     p = laAddPropertyContainer("tns_child_object", "Child Object", "Child object linker", 0,0,sizeof(laListItemPointer), 0,0,0);{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddSubGroup(p, "object", "Object", "Object link", "tns_object",tnsget_ObjectType, 0,0,offsetof(laListItemPointer, p), 0,0,0,0,0,0,0,LA_UDF_REFER); 
														 | 
														
														 | 
														
															         laAddSubGroup(p, "object", "Object", "Object link", "tns_object",tnsget_ObjectType, 0,0,offsetof(laListItemPointer, p), 0,0,0,0,0,0,0,LA_UDF_REFER); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    p = laAddPropertyContainer("tns_material", "Material" "Object material", 0,0,0,sizeof(tnsMaterial),0,0,2);{ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    p = laAddPropertyContainer("tns_material", "Material" "Object material", 0,0,0,sizeof(tnsMaterial),tnspost_Material,0,2);{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         TNS_PC_MATERIAL=p; 
														 | 
														
														 | 
														
															         TNS_PC_MATERIAL=p; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddStringProperty(p, "name", "Material Name", "The name ff the material", 0,0,0,0,1, offsetof(tnsMaterial, Name), 0,0,0,0,LA_AS_IDENTIFIER); 
														 | 
														
														 | 
														
															         laAddStringProperty(p, "name", "Material Name", "The name ff the material", 0,0,0,0,1, offsetof(tnsMaterial, Name), 0,0,0,0,LA_AS_IDENTIFIER); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddFloatProperty(p, "color", "Color", "Base color of the material", LA_WIDGET_FLOAT_COLOR, "R,G,B,A", 0,1,0,0.025, 1, 0,offsetof(tnsMaterial, Color), 0,0,4, 0,0,0,0,tnsset_MaterialColor, 0,0,0); 
														 | 
														
														 | 
														
															         laAddFloatProperty(p, "color", "Color", "Base color of the material", LA_WIDGET_FLOAT_COLOR, "R,G,B,A", 0,1,0,0.025, 1, 0,offsetof(tnsMaterial, Color), 0,0,4, 0,0,0,0,tnsset_MaterialColor, 0,0,0); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1063,12 +1072,15 @@ void la_RegisterTNSProps(){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             laAddEnumItemAs(ep, "NONE", "None", "Display materials normally",0,0); 
														 | 
														
														 | 
														
															             laAddEnumItemAs(ep, "NONE", "None", "Display materials normally",0,0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             laAddEnumItemAs(ep, "COLORFUL", "Colorful", "Display material with colorful halftone",1,0); 
														 | 
														
														 | 
														
															             laAddEnumItemAs(ep, "COLORFUL", "Colorful", "Display material with colorful halftone",1,0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        laAddSubGroup(p, "shader_page", "Shader Page", "Shader page of this material","la_rack_page",0,0,0,offsetof(tnsMaterial,Page),0,0,0,0,0,0,0,LA_UDF_SINGLE|LA_HIDE_IN_SAVE); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        laAddOperatorProperty(p,"refresh","Refresh","Refresh material shader","M_refresh_material_shader",L'🗘',0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     p = laAddPropertyContainer("tns_material_slot", "Material Slot" "Material Slot", 0,0,0,sizeof(tnsMaterialSlot),0,0,1);{ 
														 | 
														
														 | 
														
															     p = laAddPropertyContainer("tns_material_slot", "Material Slot" "Material Slot", 0,0,0,sizeof(tnsMaterialSlot),0,0,1);{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         TNS_PC_MATERIAL_SLOT=p; 
														 | 
														
														 | 
														
															         TNS_PC_MATERIAL_SLOT=p; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddStringProperty(p,"name","Name","Name of the material slot",LA_WIDGET_STRING_PLAIN,0,0,0,0,0,0,tnsget_MaterialSlotname,0,0,LA_READ_ONLY|LA_UDF_IGNORE); 
														 | 
														
														 | 
														
															         laAddStringProperty(p,"name","Name","Name of the material slot",LA_WIDGET_STRING_PLAIN,0,0,0,0,0,0,tnsget_MaterialSlotname,0,0,LA_READ_ONLY|LA_UDF_IGNORE); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddSubGroup(p, "material", "Material", "Material reference of this slot","tns_material",0,0,0,offsetof(tnsMaterialSlot,Material),tnsget_FirstMaterial,tnsgetactive_SlotMaterial,laget_ListNext,0,0,0,0,LA_UDF_REFER); 
														 | 
														
														 | 
														
															         laAddSubGroup(p, "material", "Material", "Material reference of this slot","tns_material",0,0,0,offsetof(tnsMaterialSlot,Material),tnsget_FirstMaterial,tnsgetactive_SlotMaterial,laget_ListNext,0,0,0,0,LA_UDF_REFER); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        laAddSubGroup(p, "parent", "Parent", "Parent object","tns_object",0,0,0,offsetof(tnsMaterialSlot,Parent),0,0,0,0,0,0,0,LA_UDF_REFER|LA_READ_ONLY); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddIntProperty(p,"index","Index","Index of the material slot",LA_WIDGET_INT_PLAIN,0,0,0,0,0,0,0,offsetof(tnsMaterialSlot,Index),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY); 
														 | 
														
														 | 
														
															         laAddIntProperty(p,"index","Index","Index of the material slot",LA_WIDGET_INT_PLAIN,0,0,0,0,0,0,0,offsetof(tnsMaterialSlot,Index),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         laAddOperatorProperty(p,"remove","Remove","Remove this material slot","M_remove_material_slot",L'🗴',0); 
														 | 
														
														 | 
														
															         laAddOperatorProperty(p,"remove","Remove","Remove this material slot","M_remove_material_slot",L'🗴',0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 |