Skip to content

Commit

Permalink
πŸ‘¨β€πŸ”¬ Bool / Absolute Node
Browse files Browse the repository at this point in the history
  • Loading branch information
wobbier committed Jun 1, 2024
1 parent efa0c0b commit 232b93b
Show file tree
Hide file tree
Showing 3 changed files with 189 additions and 5 deletions.
132 changes: 131 additions & 1 deletion Tools/ShaderEditor/Source/Nodes/BasicNodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "Utils\ImGuiUtils.h"
#include "Utils\PlatformUtils.h"
#include "Utils\ShaderEditorUtils.h"
#include "Mathf.h"

LessThanNode::LessThanNode( int& inId )
: Node( inId++, "Less Than" )
Expand Down Expand Up @@ -49,6 +50,121 @@ bool LessThanNode::OnEvaluate()
}


AbsoluteNode::AbsoluteNode( int& inId )
: Node( inId++, "Absolute", { 68, 201, 156 } )
{
Outputs.emplace_back( inId++, "Value", PinType::Float );

Inputs.emplace_back( inId++, "Value", PinType::Float );
Inputs.back().Data = value;

BuildNode();
}

bool AbsoluteNode::OnEvaluate()
{
float evaluatedValue = value;
if( Inputs.size() > 0 )
{
if( Inputs[0].LinkedInput )
{
float linkedValue = std::get<float>( Inputs[0].LinkedInput->Data );
//Inputs[0].Name = linkedValue ? "true" : "false";
evaluatedValue = linkedValue;
}
}

evaluatedValue = Mathf::Abs( evaluatedValue );
Outputs[0].Data = evaluatedValue;
Outputs[0].Name = std::string( "Value(" + std::to_string( evaluatedValue ) + ")" ).c_str();
// update the output pin
return false;
}

bool AbsoluteNode::OnRender()
{
if( Inputs.size() > 0 && Inputs[0].LinkedInput )
{
return false;
}
//ImGui::PushItemWidth( 100 );
//if( ImGui::Checkbox( "Value", &value ) )
//{
//}
//ImGui::PopItemWidth();

return true;
}

void AbsoluteNode::OnExport( ShaderWriter& inFile )
{
// Make this a helper
if( !ExportLinkedPin( 0, inFile ) )
{
inFile.WriteFloat( value );
}

std::string var = "f_" + std::to_string( inFile.ID++ );
inFile.WriteLine( "float " + var + " = abs(" + inFile.LastVariable + ");" );
inFile.LastVariable = var;
}


BoolNode::BoolNode( int& inId )
: Node( inId++, "Bool", { 68, 201, 156 } )
{
Outputs.emplace_back( inId++, "Value", PinType::Bool );

Inputs.emplace_back( inId++, "Value", PinType::Bool );
Inputs.back().Data = value;

BuildNode();
}

bool BoolNode::OnEvaluate()
{
bool evaluatedValue = value;
if( Inputs.size() > 0 )
{
if( Inputs[0].LinkedInput )
{
bool linkedValue = std::get<bool>( Inputs[0].LinkedInput->Data );
Inputs[0].Name = linkedValue ? "true" : "false";
evaluatedValue = linkedValue;
}
else
{
Inputs[0].Name = value ? "true" : "false";
}
}

Outputs[0].Data = evaluatedValue;
Outputs[0].Name = std::string( "Value(" + std::to_string( evaluatedValue ) + ")" ).c_str();
// update the output pin
return false;
}

bool BoolNode::OnRender()
{
if( Inputs.size() > 0 && Inputs[0].LinkedInput )
{
return false;
}
ImGui::PushItemWidth( 100 );
if( ImGui::Checkbox( "Value", &value ) )
{
}
ImGui::PopItemWidth();

return true;
}

void BoolNode::OnExport( ShaderWriter& inFile )
{
//inFile.WriteInt( value );
}


IntegerNode::IntegerNode( int& inId )
: Node( inId++, "Integer", { 68, 201, 156 } )
{
Expand Down Expand Up @@ -125,7 +241,7 @@ void FloatNode::OnExport( ShaderWriter& inFile )
Vector3Node::Vector3Node( int& inId )
: Node( inId++, "Vector 3", { 68, 201, 156 } )
{
Size = { 400, 0 };
Size = { 300, 0 };
Inputs.emplace_back( inId++, "X(1)", PinType::Float );
Inputs.back().Data = 0.f;
Inputs.emplace_back( inId++, "Y(1)", PinType::Float );
Expand Down Expand Up @@ -172,6 +288,7 @@ void Vector3Node::OnExport( ShaderWriter& inFile )
AddNode::AddNode( int& inId )
: Node( inId++, "Add", { 168, 201, 156 } )
{
Size = { 300, 0 };
Inputs.emplace_back( inId++, "A(3)", PinType::Vector3Type );
Inputs.back().Data = 0.f;
Inputs.emplace_back( inId++, "B(3)", PinType::Vector3Type );
Expand Down Expand Up @@ -341,6 +458,19 @@ BasicShaderMasterNode::BasicShaderMasterNode( int& inId )

bool BasicShaderMasterNode::OnEvaluate()
{
//if( Inputs.size() > 1 )
//{
// if( Inputs[2].LinkedInput )
// {
// float linkedValue = std::get<float>( Inputs[2].LinkedInput->Data );
// Inputs[2].Name = linkedValue ? std::string("Alpha(" + std::to_string(linkedValue) + ")") : "Alpha(1)";
// //evaluatedValue = linkedValue;
// }
// else
// {
// //Inputs[2].Name = value ? "true" : "false";
// }
//}
return false;
}

Expand Down
27 changes: 27 additions & 0 deletions Tools/ShaderEditor/Source/Nodes/BasicNodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,33 @@ class LessThanNode
bool OnEvaluate() override;
};


class AbsoluteNode
: public Node
{
public:
// is this needed?
float value = 0.f;
AbsoluteNode( int& inId );

bool OnEvaluate() override;
bool OnRender() override;
void OnExport( ShaderWriter& inFile ) override;
};


class BoolNode
: public Node
{
public:
bool value = false;
BoolNode( int& inId );

bool OnEvaluate() override;
bool OnRender() override;
void OnExport( ShaderWriter& inFile ) override;
};

class IntegerNode
: public Node
{
Expand Down
35 changes: 31 additions & 4 deletions Tools/ShaderEditor/Source/ShaderEditorInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -455,9 +455,27 @@ void ShaderEditorInstance::HandleAddNodeConxtualMenu()
//drawList->AddCircleFilled(ImGui::GetMousePosOnOpeningCurrentPopup(), 10.0f, 0xFFFF00FF);

Node* node = nullptr;
if( ImGui::MenuItem( "Add" ) )

if( ImGui::BeginMenu( "Math" ) )
{
if( ImGui::MenuItem( "Add" ) )
{
node = SpawnNodeFromString( m_NextId, std::string( "Add" ) );
m_Nodes.push_back( node );
}
if( ImGui::MenuItem( "Absolute" ) )
{
node = SpawnNodeFromString( m_NextId, std::string( "Absolute" ) );
m_Nodes.push_back( node );
}
ImGui::EndMenu();
}

ImGui::Separator();

if( ImGui::MenuItem( "Bool" ) )
{
node = SpawnNodeFromString( m_NextId, std::string( "Add" ) );
node = SpawnNodeFromString( m_NextId, std::string( "Bool" ) );
m_Nodes.push_back( node );
}
if( ImGui::MenuItem( "Vector 3" ) )
Expand Down Expand Up @@ -585,6 +603,15 @@ Node* ShaderEditorInstance::SpawnNodeFromString( int& inNodeId, std::string& inI
m_masterNode = new BasicShaderMasterNode( inNodeId );
return m_masterNode;
}

if( inId == "Absolute" )
{
return new AbsoluteNode( inNodeId );
}
if( inId == "Bool" )
{
return new BoolNode( inNodeId );
}
if( inId == "Integer" )
{
return new IntegerNode( inNodeId );
Expand Down Expand Up @@ -1127,8 +1154,8 @@ void ShaderEditorInstance::DrawBasicNodes()
}
if( input.Type == PinType::Bool )
{
ImGui::Button( "Hello" );
ImGui::Spring( 0 );
//ImGui::Button( "" );
//ImGui::Spring( 0 );
}
ImGui::PopStyleVar();
builder.EndInput();
Expand Down

0 comments on commit 232b93b

Please sign in to comment.