|
@@ -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);
|
|
}
|
|
}
|