New nodes: Logical boolean operations (OR, AND, XOR, NOT) (#1399)

* Add Boolean Operations Nodes

Adds OR AND XOR and NOT operators

* Fix operand naming

Inputs to the 'Min' 'Max' 'Equality' and boolean operations nodes were
previously named 'First' and 'Second' and are now called 'Operand A' and
'Operand B'

* Rename Equality to Equals

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
isiko
2023-08-29 23:55:14 -07:00
committed by GitHub
co-authored by Keavon Chambers
parent 48fdaddc37
commit 3419e739af
5 changed files with 98 additions and 10 deletions
@@ -1861,8 +1861,8 @@ fn static_nodes() -> Vec<DocumentNodeType> {
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::MaxParameterNode<_>"),
inputs: vec![
DocumentInputType::value("First", TaggedValue::F32(0.), true),
DocumentInputType::value("Second", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand A", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand B", TaggedValue::F32(0.), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::max_properties,
@@ -1873,20 +1873,20 @@ fn static_nodes() -> Vec<DocumentNodeType> {
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::MinParameterNode<_>"),
inputs: vec![
DocumentInputType::value("First", TaggedValue::F32(0.), true),
DocumentInputType::value("Second", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand A", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand B", TaggedValue::F32(0.), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::min_properties,
..Default::default()
},
DocumentNodeType {
name: "Equality",
name: "Equals",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::EqParameterNode<_>"),
inputs: vec![
DocumentInputType::value("First", TaggedValue::F32(0.), true),
DocumentInputType::value("Second", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand A", TaggedValue::F32(0.), true),
DocumentInputType::value("Operand B", TaggedValue::F32(0.), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::eq_properties,
@@ -1908,11 +1908,56 @@ fn static_nodes() -> Vec<DocumentNodeType> {
name: "Log to Console",
category: "Logic",
identifier: NodeImplementation::proto("graphene_core::logic::LogToConsoleNode"),
inputs: vec![DocumentInputType::value("First", TaggedValue::String("Not Connected to a value yet".into()), true)],
inputs: vec![DocumentInputType::value("Input", TaggedValue::String("Not Connected to a value yet".into()), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::General)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Or",
category: "Logic",
identifier: NodeImplementation::proto("graphene_core::logic::LogicOrNode<_>"),
inputs: vec![
DocumentInputType::value("Operand A", TaggedValue::Bool(false), true),
DocumentInputType::value("Operand B", TaggedValue::Bool(false), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Boolean)],
properties: node_properties::logic_operator_properties,
..Default::default()
},
DocumentNodeType {
name: "And",
category: "Logic",
identifier: NodeImplementation::proto("graphene_core::logic::LogicAndNode<_>"),
inputs: vec![
DocumentInputType::value("Operand A", TaggedValue::Bool(false), true),
DocumentInputType::value("Operand B", TaggedValue::Bool(false), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Boolean)],
properties: node_properties::logic_operator_properties,
..Default::default()
},
DocumentNodeType {
name: "XOR",
category: "Logic",
identifier: NodeImplementation::proto("graphene_core::logic::LogicXorNode<_>"),
inputs: vec![
DocumentInputType::value("Operand A", TaggedValue::Bool(false), true),
DocumentInputType::value("Operand B", TaggedValue::Bool(false), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Boolean)],
properties: node_properties::logic_operator_properties,
..Default::default()
},
DocumentNodeType {
name: "Not",
category: "Logic",
identifier: NodeImplementation::proto("graphene_core::logic::LogicNotNode"),
inputs: vec![DocumentInputType::value("Input", TaggedValue::Bool(false), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Boolean)],
properties: node_properties::no_properties,
..Default::default()
},
(*IMAGINATE_NODE).clone(),
DocumentNodeType {
name: "Circle",
@@ -1145,7 +1145,7 @@ pub fn eq_properties(document_node: &DocumentNode, node_id: NodeId, _context: &m
LayoutGroup::Row { widgets }
};
vec![operand("Equality", 1)]
vec![operand("Equals", 1)]
}
pub fn modulo_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
@@ -1206,6 +1206,11 @@ pub fn spline_properties(document_node: &DocumentNode, node_id: NodeId, _context
}]
}
pub fn logic_operator_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let widgets = bool_widget(document_node, node_id, 0, "Operand B", true);
vec![LayoutGroup::Row { widgets }]
}
pub fn transform_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let translation_assist = |widgets: &mut Vec<WidgetHolder>| {
let pivot_index = 5;