|
@@ -466,18 +466,18 @@ void laui_MathNode(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn
|
|
|
int OPINV_AddInputMapperPage(laOperator* a, laEvent *e){
|
|
|
laRackPage* dp=memAcquireHyper(sizeof(laRackPage));
|
|
|
strSafeSet(&dp->Name,"New Page");
|
|
|
- lstAppendItem(&MAIN.InputMappingPages, dp); MAIN.CurrentInputMappingPage=dp;
|
|
|
- laNotifyUsers("la.input_mapping_pages");
|
|
|
+ lstAppendItem(&MAIN.InputMapping->Pages, dp); MAIN.InputMapping->CurrentPage=dp;
|
|
|
+ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add Page", 0);
|
|
|
return LA_FINISHED;
|
|
|
}
|
|
|
int OPINV_AddNodesRack(laOperator* a, laEvent *e){
|
|
|
laRackPage* dp=a->This?a->This->EndInstance:0; if(!dp) return LA_FINISHED;
|
|
|
- laNodeRack* ir=memAcquire(sizeof(laNodeRack));
|
|
|
+ laNodeRack* ir=memAcquire(sizeof(laNodeRack));
|
|
|
char* type=strGetArgumentString(a->ExtraInstructionsP, "type");
|
|
|
strSafeSet(&ir->Name,"New Rack");
|
|
|
- lstAppendItem(&dp->Racks, ir);
|
|
|
- if(strSame(type,"DRIVER")){ ir->RackType=LA_RACK_TYPE_DRIVER; laNotifyUsers("la.driver_pages"); }
|
|
|
- else{ ir->RackType=LA_RACK_TYPE_INPUT; laNotifyUsers("la.input_mapping_pages"); }
|
|
|
+ lstAppendItem(&dp->Racks, ir); ir->ParentPage=dp;
|
|
|
+ if(strSame(type,"DRIVER")){ ir->RackType=LA_RACK_TYPE_DRIVER; laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Add rack", 0); }
|
|
|
+ else{ ir->RackType=LA_RACK_TYPE_INPUT; laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add rack", 0); }
|
|
|
return LA_FINISHED;
|
|
|
|
|
|
}
|
|
@@ -489,12 +489,12 @@ int OPINV_RebuildInputMapping(laOperator* a, laEvent *e){
|
|
|
laBaseNode* la_CreateInputMapperNode(laNodeRack* ir, laBaseNodeType* NodeType){
|
|
|
laBaseNode* bn=memAcquire(NodeType->NodeSize);
|
|
|
bn->Type=NodeType; NodeType->Init(bn); lstAppendItem(&ir->Nodes, bn); bn->InRack=ir;
|
|
|
- laNotifyUsers("la.input_mapping_pages");
|
|
|
+ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Add node", 0);
|
|
|
return bn;
|
|
|
}
|
|
|
void la_DestroyInputMapperNode(laBaseNode* bn){
|
|
|
lstRemoveItem(bn->InRack, bn); bn->Type->Destroy(bn);
|
|
|
- laNotifyUsers("la.input_racks");
|
|
|
+ laNotifyUsers("la.input_racks"); laRecordAndPush(0,"la.input_mapping","Delete node", 0);
|
|
|
memFree(bn);
|
|
|
}
|
|
|
|
|
@@ -539,22 +539,87 @@ void laui_AddInputMapperNode(laUiList *uil, laPropPack *This, laPropPack *Extra,
|
|
|
laShowItemFull(uil,c,This,"add_node_input",0,"type=VISUALIZER;text=Visualizer",0,0);
|
|
|
}
|
|
|
|
|
|
+int OPINV_MoveNodeToRack(laOperator* a, laEvent *e){
|
|
|
+ laBaseNode* n=a->This?a->This->EndInstance:0; if(!n||!n->InRack) return LA_CANCELED;
|
|
|
+ laBaseNodeType* bnt=0; laNodeRack* target;
|
|
|
+
|
|
|
+ char* direction=strGetArgumentString(a->ExtraInstructionsP,"direction");
|
|
|
+
|
|
|
+ if(n->InRack->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); }
|
|
|
+ else{ laNotifyUsers("la.input_mapping"); }
|
|
|
+ if(strSame(direction,"left")) target=n->InRack->Item.pPrev; else target=n->InRack->Item.pNext;
|
|
|
+ if(!target) return LA_CANCELED;
|
|
|
+
|
|
|
+ lstRemoveItem(&n->InRack->Nodes, n); lstAppendItem(&target->Nodes,n); n->InRack=target;
|
|
|
+
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int OPINV_DeleteNode(laOperator* a, laEvent *e){
|
|
|
+ laBaseNode* n=a->This?a->This->EndInstance:0; if(!n||!n->InRack) return LA_CANCELED;
|
|
|
+ laBaseNodeType* bnt=0; laNodeRack* target;
|
|
|
+
|
|
|
+ if(n->InRack->RackType==LA_RACK_TYPE_DRIVER){ laDriverRequestRebuild(); laNotifyUsers("la.drivers"); }
|
|
|
+ else{ laMappingRequestRebuild(); laNotifyUsers("la.input_mapping"); }
|
|
|
+ lstRemoveItem(&n->InRack->Nodes, n); n->Type->Destroy(n); memLeave(n);
|
|
|
+
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int OPINV_MoveRack(laOperator* a, laEvent *e){
|
|
|
+ laNodeRack* r=a->This?a->This->EndInstance:0; if(!r) return LA_CANCELED;
|
|
|
+ char* direction=strGetArgumentString(a->ExtraInstructionsP,"direction");
|
|
|
+
|
|
|
+ if(strSame(direction,"left")) lstMoveUp(&r->ParentPage->Racks,r); else lstMoveDown(&r->ParentPage->Racks,r);
|
|
|
+
|
|
|
+ if(r->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Move rack", 0); }
|
|
|
+ else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Move rack", 0); }
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int OPINV_InsertRack(laOperator* a, laEvent *e){
|
|
|
+ laNodeRack* rr=a->This?a->This->EndInstance:0; if(!rr) return LA_CANCELED;
|
|
|
+ laNodeRack* r=memAcquire(sizeof(laNodeRack));
|
|
|
+ strSafeSet(&r->Name,"New Rack");
|
|
|
+ lstInsertItemAfter(&rr->ParentPage->Racks,r,rr); r->ParentPage=rr->ParentPage; r->RackType=rr->RackType;
|
|
|
+ if(r->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.drivers","Insert rack", 0); }
|
|
|
+ else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Insert rack", 0); }
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int OPINV_DeleteRack(laOperator* a, laEvent *e){
|
|
|
+ laNodeRack* rr=a->This?a->This->EndInstance:0; if(!rr) return LA_CANCELED;
|
|
|
+ if(strSame(strGetArgumentString(a->ExtraInstructionsP,"confirm"),"true")){
|
|
|
+ laBaseNode* n; while(n=lstPopItem(&rr->Nodes)){ n->Type->Destroy(n); memLeave(n); }
|
|
|
+ strSafeDestroy(&rr->Name); lstRemoveItem(&rr->ParentPage->Racks, rr); memLeave(rr);
|
|
|
+ if(rr->RackType==LA_RACK_TYPE_DRIVER){ laNotifyUsers("la.drivers"); laRecordAndPush(0,"la.input_mapping","Delete rack", 0); }
|
|
|
+ else{ laNotifyUsers("la.input_mapping"); laRecordAndPush(0,"la.input_mapping","Delete rack", 0); }
|
|
|
+ return LA_FINISHED;
|
|
|
+ }
|
|
|
+ laEnableOperatorPanel(a,a->This,e->x,e->y,200,200,0,0,0,0,0,0,0,0,e);
|
|
|
+ return LA_RUNNING;
|
|
|
+}
|
|
|
+void laui_DeleteRack(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context){
|
|
|
+ laColumn* c=laFirstColumn(uil);
|
|
|
+ laShowItemFull(uil,c,This,"delete",0,"confirm=true;",0,0);
|
|
|
+}
|
|
|
+
|
|
|
laPropContainer* laget_BaseNodeType(laBaseNode* bn){
|
|
|
for(int i=0;i<MAIN.NodeTypeNext;i++){ if(bn->Type==MAIN.NodeTypes[i]) return MAIN.NodeTypes[i]->pc; }
|
|
|
return LA_PC_IDN_GENERIC;
|
|
|
}
|
|
|
-int laget_InputNodeGap(laNodeRack* rack_unused, laBaseNode* n){
|
|
|
+int laget_BaseNodeGap(laNodeRack* rack_unused, laBaseNode* n){
|
|
|
return n->Gap;
|
|
|
}
|
|
|
-void laset_InputNodeGap(laBaseNode* n, int gap){
|
|
|
- if(gap<0){
|
|
|
- int done=0;
|
|
|
- laBaseNode* nn=n; while(nn){ if(nn->Gap>0){ nn->Gap--; done=1; break; } nn=nn->Item.pPrev; }
|
|
|
+void laset_BaseNodeGap(laBaseNode* n, int gap){
|
|
|
+ laBaseNode* nn;
|
|
|
+ if(gap==-1){
|
|
|
+ int done=0; nn=n; while(nn){ if(nn->Gap>0){ nn->Gap--; done=1; break; } nn=nn->Item.pPrev; }
|
|
|
if(done){ nn=n->Item.pNext; while(nn){ if(nn->Gap>0){ nn->Gap++; break; } nn=nn->Item.pNext; } }
|
|
|
- }
|
|
|
- if(gap>0){
|
|
|
- n->Gap+=gap;
|
|
|
- laBaseNode* nn=n->Item.pNext; while(nn){ if(nn->Gap>0){ nn->Gap--; break; } nn=nn->Item.pNext; }
|
|
|
+ }elif(gap==1){
|
|
|
+ n->Gap+=gap; nn=n->Item.pNext; while(nn){ if(nn->Gap>0){ nn->Gap--; break; } nn=nn->Item.pNext; }
|
|
|
+ }elif(gap==-2){
|
|
|
+ if(n->Gap){ n->Gap--; if(nn=n->Item.pNext){ nn->Gap++; } }
|
|
|
+ elif(nn=n->Item.pPrev){ n->Gap=nn->Gap; nn->Gap=0; lstRemoveItem(&n->InRack->Nodes,n); lstInsertItemBefore(&n->InRack->Nodes,n,nn); }
|
|
|
+ }elif(gap==2){
|
|
|
+ if(nn=n->Item.pNext){ if(!nn->Gap){ nn->Gap=n->Gap; n->Gap=0; lstRemoveItem(&n->InRack->Nodes,n); lstInsertItemAfter(&n->InRack->Nodes,n,nn); }else{ nn->Gap--; n->Gap++; } }
|
|
|
+ else n->Gap++;
|
|
|
}
|
|
|
}
|
|
|
void laset_InputNodeUserID(laInputControllerNode* n, int i){
|
|
@@ -570,6 +635,9 @@ int laget_SocketEnumArrayLength(laInputControllerNodeSocket* s){
|
|
|
int laget_VisualizerArrayLength(laInputVisualizerNode* s){
|
|
|
return s->In->ArrLen?s->In->ArrLen:1;
|
|
|
}
|
|
|
+laBoxedTheme* laget_NodeGetTheme(laNodeRack* rack_unused, laBaseNode* n){
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
void laRegisterNode(laBaseNodeType* type, laPropContainer* pc, laBaseNodeInitF init, laBaseNodeDestroyF destroy, laBaseNodeVisitF visit, laBaseNodeEvalF eval, int nodesize, char* udf_string){
|
|
|
arrEnsureLength(&MAIN.NodeTypes, MAIN.NodeTypeNext, &MAIN.NodeTypeMax, sizeof(laBaseNode*));
|
|
@@ -597,22 +665,36 @@ void la_RegisterInputMapperOperators(){
|
|
|
at=laCreateOperatorType("LA_add_input_mapper_node", "Add Node", "Add a input mapper node",0,0,0,OPINV_AddInputMapperNode,OPMOD_FinishOnData,'+',0);
|
|
|
at->UiDefine=laui_AddInputMapperNode;
|
|
|
laCreateOperatorType("LA_input_mapping_rebuild", "Rebuild Input Mapping", "Rebuild input mapping for evaluation",0,0,0,OPINV_RebuildInputMapping,0,L'⭮',0);
|
|
|
+ laCreateOperatorType("LA_move_node_to_rack", "Move Node", "Move node to another rack",0,0,0,OPINV_MoveNodeToRack,0,0,0);
|
|
|
+ laCreateOperatorType("LA_delete_node", "Delete Node", "Delete this node",0,0,0,OPINV_DeleteNode,0,0,0);
|
|
|
+ laCreateOperatorType("LA_move_rack", "Move Rack", "Move this rack",0,0,0,OPINV_MoveRack,0,0,0);
|
|
|
+ laCreateOperatorType("LA_insert_rack", "Insert Rack", "Insert a new rack",0,0,0,OPINV_InsertRack,0,0,0);
|
|
|
+ at=laCreateOperatorType("LA_delete_rack", "Delete Rack", "Delete a rack",0,0,0,OPINV_DeleteRack,OPMOD_FinishOnData,L'❌',0);
|
|
|
+ at->UiDefine=laui_DeleteRack;
|
|
|
|
|
|
pc=laAddPropertyContainer("la_node_rack", "Input Rack", "Input rack for putting input mapping nodes",0,0,sizeof(laNodeRack),0,0,1);
|
|
|
laAddStringProperty(pc,"name","Name","Name of this rack",0,0,0,0,1,offsetof(laNodeRack,Name),0,0,0,0,LA_AS_IDENTIFIER);
|
|
|
p=laAddSubGroup(pc,"nodes","Nodes","Nodes under this rack","la_base_node",laget_BaseNodeType,0,0,-1,0,0,0,0,0,0,offsetof(laNodeRack,Nodes),0);
|
|
|
- laSubGroupExtraFunctions(p,0,0,laget_InputNodeGap);
|
|
|
+ laSubGroupExtraFunctions(p,0,laget_NodeGetTheme,laget_BaseNodeGap);
|
|
|
+ laAddSubGroup(pc,"parent_page","Parent Page","Parent page of this rack","la_rack_page",0,0,0,offsetof(laNodeRack,ParentPage),0,0,0,0,0,0,0,LA_UDF_REFER);
|
|
|
+ laAddIntProperty(pc,"type", "Type", "Type of the rack", 0,0,0,0,0,0,0,0,offsetof(laNodeRack,RackType),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY);
|
|
|
laAddOperatorProperty(pc,"add_node_input","Add Node","Add a node into this rack","LA_add_input_mapper_node",'+',0);
|
|
|
laAddOperatorProperty(pc,"add_node_driver","Add Node","Add a node into this rack","LA_add_driver_node",'+',0);
|
|
|
+ laAddOperatorProperty(pc,"insert_rack","Insert Rack","Insert a rack","LA_insert_rack",'+',0);
|
|
|
+ laAddOperatorProperty(pc,"move","Move Rack","Move this rack","LA_move_rack",0,0);
|
|
|
+ laAddOperatorProperty(pc,"delete","Delete Rack","Delete this rack","LA_delete_rack",0,0);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_base_node", "Input Node", "Input logic node",0,0,sizeof(laBaseNode),0,0,1);
|
|
|
LA_PC_IDN_GENERIC=pc;
|
|
|
laAddStringProperty(pc,"name","Name","Name of this input node",0,0,0,0,1,offsetof(laBaseNode,Name),0,0,0,0,LA_AS_IDENTIFIER);
|
|
|
- laAddIntProperty(pc,"__gap", "Gap", "Gap of the node", 0,0,0,0,0,0,0,0,offsetof(laBaseNode,Gap),0,laset_InputNodeGap,0,0,0,0,0,0,0,0,0);
|
|
|
+ laAddIntProperty(pc,"__gap", "Gap", "Gap of the node", 0,0,0,0,0,0,0,0,offsetof(laBaseNode,Gap),0,laset_BaseNodeGap,0,0,0,0,0,0,0,0,0);
|
|
|
laAddSubGroup(pc,"internal_type","Internal Type","Internal node type","any_pointer",0,0,0,offsetof(laBaseNode,Type),0,0,0,0,0,0,0,LA_READ_ONLY|LA_UDF_REFER);
|
|
|
+ laAddOperatorProperty(pc,"move","Move","Move node across racks","LA_move_node_to_rack",0,0);
|
|
|
+ laAddOperatorProperty(pc,"delete","Delete","Delete node","LA_delete_node",0,0);
|
|
|
+ laAddSubGroup(pc,"in_rack","In Rack","The rack this node is in","la_node_rack",0,0,0,offsetof(laBaseNode,InRack),0,0,0,0,0,0,0,LA_UDF_REFER);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_input_controller_node", "Controller output", "Output controller values",0,laui_ControllerNode,sizeof(laInputControllerNode),0,0,1);
|
|
|
- LA_PC_IDN_CONTROLLER=pc;
|
|
|
+ LA_PC_IDN_CONTROLLER=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddIntProperty(pc,"user_id", "User ID", "Which controller should the data come from", 0,0,0,0,0,0,0,0,offsetof(laInputControllerNode,UserID),0,0,0,0,0,0,0,0,0,0,0);
|
|
|
laAddSubGroup(pc,"out0","Out 0","Output 0","la_input_controller_node_socket",0,0,0,offsetof(laInputControllerNode, Sockets[0]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
@@ -634,7 +716,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddSubGroup(pc, "out", "Out","Output value","la_out_socket",0,0,0,offsetof(laInputControllerNodeSocket,Out),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_input_visualizer_node", "Visualizer", "Visualizer node",0,laui_InputVisualizeNode,sizeof(laInputVisualizerNode),0,0,1);
|
|
|
- LA_PC_IDN_VISUALIZER=pc;
|
|
|
+ LA_PC_IDN_VISUALIZER=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc, "in", "In","Input value","la_in_socket",0,0,0,offsetof(laInputVisualizerNode,In),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
laAddFloatProperty(pc,"axis", "🡘", "Axis value", LA_WIDGET_VALUE_METER,0,0,1,-1,0,0,0,offsetof(laInputVisualizerNode,RealVal),0,0,0,0,0,0,0,0,0,0,LA_READ_ONLY);
|
|
@@ -644,7 +726,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddEnumItemAs(p,"ACTIVE", "Active", "Button is pressed", 1, 0);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_split_node", "Split", "Split node",0,laui_SplitNode,sizeof(laSplitNode),0,0,1);
|
|
|
- LA_PC_IDN_SPLIT=pc;
|
|
|
+ LA_PC_IDN_SPLIT=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"in", "In","Input value","la_in_socket",0,0,0,offsetof(laSplitNode,In),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
laAddSubGroup(pc,"out0","Out 0","Output 0","la_split_node_out_socket",0,0,0,offsetof(laSplitNode, Out[0]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
@@ -661,7 +743,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddSubGroup(pc, "out", "Out","Output value","la_out_socket",0,0,0,offsetof(laSplitNodeOutSocket,Out),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_switch_node", "Switch", "Switch node",0,laui_SwitchNode,sizeof(laSwitchNode),0,0,1);
|
|
|
- LA_PC_IDN_SWITCH=pc;
|
|
|
+ LA_PC_IDN_SWITCH=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"out", "Out","Output value","la_out_socket",0,0,0,offsetof(laSwitchNode, Out),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
laAddSubGroup(pc,"in0","In 0","Input 0","la_switch_node_in_socket",0,0,0,offsetof(laSwitchNode, In[0]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
@@ -679,7 +761,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddSubGroup(pc, "in", "In","Input value","la_in_socket",0,0,0,offsetof(laSwitchNodeInSocket,In),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_combine_node", "Combine", "Combine node",0,laui_CombineNode,sizeof(laCombineNode),0,0,1);
|
|
|
- LA_PC_IDN_COMBINE=pc;
|
|
|
+ LA_PC_IDN_COMBINE=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"out", "Out","Output value","la_out_socket",0,0,0,offsetof(laCombineNode, Out),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
laAddSubGroup(pc,"out_int", "Out Int","Output value in int format","la_out_socket",0,0,0,offsetof(laCombineNode, OutInt),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
@@ -694,7 +776,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddSubGroup(pc,"in7","In 7","Input 7","la_switch_node_in_socket",0,0,0,offsetof(laCombineNode, In[7]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_values_node", "Values", "Values node",0,laui_ValuesNode,sizeof(laValuesNode),0,0,1);
|
|
|
- LA_PC_IDN_VALUES=pc;
|
|
|
+ LA_PC_IDN_VALUES=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"out0","Out 0","Output 0","la_split_node_out_socket",0,0,0,offsetof(laValuesNode, Out[0]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"out1","Out 1","Output 1","la_split_node_out_socket",0,0,0,offsetof(laValuesNode, Out[1]),0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
@@ -738,7 +820,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
p=laAddEnumProperty(pc,"valuee7","SW","Enum Value 7",LA_WIDGET_ENUM_CYCLE,0,0,0,0,offsetof(laValuesNode, ValuesE[7]),0,0,0,0,0,0,0,0,0,0);la_AddValuesNodeEnumValue(p);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_matrix_node", "Matrix", "Matrix node",0,laui_MatrixNode,sizeof(laMatrixNode),0,0,1);
|
|
|
- LA_PC_IDN_MATRIX=pc;
|
|
|
+ LA_PC_IDN_MATRIX=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddSubGroup(pc,"in_l", "L","Left input","la_in_socket",0,0,0,offsetof(laMatrixNode, InL),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
|
laAddSubGroup(pc,"in_r", "R","Right input","la_in_socket",0,0,0,offsetof(laMatrixNode, InR),0,0,0,0,0,0,0,LA_UDF_SINGLE);
|
|
@@ -748,7 +830,7 @@ void la_RegisterInputMapperOperators(){
|
|
|
laAddEnumItemAs(p,"INV", "Invert", "Invert L or R", LA_MATRIX_NODE_OP_INV, 0);
|
|
|
|
|
|
pc=laAddPropertyContainer("la_math_node", "Math", "Math node",0,laui_MathNode,sizeof(laMathNode),0,0,1);
|
|
|
- LA_PC_IDN_MATH=pc;
|
|
|
+ LA_PC_IDN_MATH=pc; laPropContainerExtraFunctions(pc,0,0,0,laui_DefaultNodeOperationsPropUiDefine);
|
|
|
laAddSubGroup(pc,"base","Base","Base node","la_base_node",0,0,0,0,0,0,0,0,0,0,0,LA_UDF_LOCAL);
|
|
|
laAddFloatProperty(pc, "vl", "L", "Left value", 0,0,0,0,0,0,0,0,offsetof(laMathNode, ValueL),0,0,0,0,0,0,0,0,0,0,0);
|
|
|
laAddFloatProperty(pc, "vr", "R", "Right value", 0,0,0,0,0,0,0,0,offsetof(laMathNode, ValueR),0,0,0,0,0,0,0,0,0,0,0);
|
|
@@ -789,28 +871,28 @@ void laSetExtraNodeFunctions(laUiDefineFunc AddInputNodes, laUiDefineFunc AddDri
|
|
|
MAIN.ExtraGetInputNodeType=GetInputNodeType; MAIN.ExtraGetDriverNodeType=GetDriverNodeType;
|
|
|
}
|
|
|
|
|
|
-void laMappingRequestRebuild(){ MAIN.MappingNeedRebuild=1; }
|
|
|
-void laMappingRequestEval(){ MAIN.MappingNeedEval=1; }
|
|
|
+void laMappingRequestRebuild(){ MAIN.InputMapping->NeedRebuild=1; }
|
|
|
+void laMappingRequestEval(){ MAIN.InputMapping->NeedEval=1; }
|
|
|
|
|
|
int la_RunInputMapping(){
|
|
|
- MAIN.MappingNeedEval = 0;
|
|
|
- for(laListItemPointer*lip=MAIN.InputMappingEval.pFirst;lip;lip=lip->pNext){
|
|
|
+ MAIN.InputMapping->NeedEval = 0;
|
|
|
+ for(laListItemPointer*lip=MAIN.InputMapping->Eval.pFirst;lip;lip=lip->pNext){
|
|
|
laBaseNode* n=lip->p; n->Type->Eval(n);
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
int la_RebuildInputMapping(){
|
|
|
- MAIN.MappingNeedRebuild = 0;
|
|
|
- while(lstPopPointer(&MAIN.InputMappingEval));
|
|
|
- laListHandle pending={0}; laRackPage* rp=MAIN.CurrentInputMappingPage; if(!rp)return LA_DAG_FLAG_PERM;
|
|
|
+ MAIN.InputMapping->NeedRebuild = 0;
|
|
|
+ while(lstPopPointer(&MAIN.InputMapping->Eval));
|
|
|
+ laListHandle pending={0}; laRackPage* rp=MAIN.InputMapping->CurrentPage; if(!rp)return LA_DAG_FLAG_PERM;
|
|
|
for(laNodeRack* ir=rp->Racks.pFirst;ir;ir=ir->Item.pNext){
|
|
|
for(laBaseNode*bn=ir->Nodes.pFirst;bn;bn=bn->Item.pNext){ lstAppendPointer(&pending,bn); bn->Eval=0; }
|
|
|
}
|
|
|
laBaseNode*n;int result=LA_DAG_FLAG_PERM; laListItemPointer*NextLip;
|
|
|
for(laListItemPointer*lip=pending.pFirst;lip;lip=NextLip){ n=lip->p; NextLip=lip->pNext;
|
|
|
if(n->Eval&LA_DAG_FLAG_PERM) continue;
|
|
|
- result=n->Type->Visit(n,&MAIN.InputMappingEval); if(result==LA_DAG_FLAG_ERR){ while(lstPopPointer(&pending)); break; }
|
|
|
+ result=n->Type->Visit(n,&MAIN.InputMapping->Eval); if(result==LA_DAG_FLAG_ERR){ while(lstPopPointer(&pending)); break; }
|
|
|
}
|
|
|
- if(result==LA_DAG_FLAG_ERR){ while(lstPopPointer(&MAIN.InputMappingEval)); return LA_DAG_FLAG_ERR; }
|
|
|
+ if(result==LA_DAG_FLAG_ERR){ while(lstPopPointer(&MAIN.InputMapping->Eval)); return LA_DAG_FLAG_ERR; }
|
|
|
return LA_DAG_FLAG_PERM;
|
|
|
}
|