Files

95 lines
2.4 KiB
C++
Raw Permalink Normal View History

2025-05-13 02:46:21 +03:00
#ifndef GUINodeContainer_h__
#define GUINodeContainer_h__
#include <gui/GUIWindow.h>
#include <gui/GUIManager.h>
#include <gui/GUIMenu.h>
#include "GUIShaderNode.h"
#include "GUIShaderNodeTexture.h"
#include <shaders/IShaderGraph.h>
#include <vector>
#include <ISerializable.h>
#include <delegate/Delegate.h>
struct LinkInfo
{
GUIShaderNodeIO* left;
GUIShaderNodeIO* right;
};
#define SPLINE_FREQ 20
typedef std::vector<GUIShaderNode*> NodeCollection;
typedef std::vector<GUIShaderNode*>::iterator NodeCollectionItr;
class GUINodeContainer : public GUIWindow, public ISerializable
{
public:
EVENT2(GUINodeContainer_NodeEvent, GUINodeContainer*, GUIShaderNode*);
GUINodeContainer_NodeEvent Event_DeleteNode;
GUINodeContainer(IShaderGraph* graph);
~GUINodeContainer();
bool Serialize(Core::IMemoryStream* stm);
bool Deserialize(Core::IMemoryStream* stm);
//void AddChild(GUIWindow* val);
void MakeLink(GUIShaderNodeIO* left, GUIShaderNodeIO* right);
void BreakLink(GUIShaderNodeIO* left, GUIShaderNodeIO* right);
void SetBackColor(const Vec4f& color);
void RenderSelf();
GUIShaderNode* FindNode(int id);
GUIShaderNode* AddNode(const String& name);
void Invalidate()
{
GUIWindow::Invalidate();
invalid = true;
}
GUIShaderNode* GetMaterialNode()
{
return materialNode;
}
NodeCollection* GetTextureUnits();
void RebuildGraph();
size_t GetNodeCount()
{
return nodes.size();
}
GUIShaderNode* getNode(int id)
{
return nodes[id];
}
String GetTexNameByID(int id);
private:
void OnNodeSelect(GUIShaderNode* node);
void GenGeom();
void OnNodeLayoutUpdate();
void SetSelection(GUIShaderNode* node);
void DeleteNode(GUIShaderNode* node);
void OnNodeHeaderMouseClick(GUIWindow* wnd, int param);
void OnNodePortMouseClick(GUIWindow* wnd, int param);
void OnDeleteLink(GUIMenuItem* itm);
void OnDeleteNode(GUIMenuItem* itm);
void RegisterNewNode(GUIShaderNode* node);
GUIShaderNode* FindNodeByGraphicsID(int id);
GUIShaderNode* selection;
GUIShaderNodeIO* selected_port;
GUIMenu* menu;
NodeCollection nodes;
NodeCollection texNodes;
GUIShaderNode* materialNode;
bool invalid;
IShaderGraph* graphics_graph;
typedef std::vector<LinkInfo> LinksCollection;
typedef std::vector<LinkInfo>::iterator LinksCollectionItr;
LinksCollection links;
int cache_length;
GUIVertex cache[SPLINE_FREQ * 2];
GUIVertex cache2[SPLINE_FREQ * 2 * 128]; //128 splines cache
};
#endif // GUINodeContainer_h__