diff --git a/include/nodes.h b/include/nodes.h index 6349209..93dc072 100644 --- a/include/nodes.h +++ b/include/nodes.h @@ -1,6 +1,7 @@ #ifndef NODES_H #define NODES_H +#include "aliases/aliases.h" #include "window.h" #define MAX_NODES 1024 @@ -13,20 +14,27 @@ #define OP_NODE_FILL_COLOUR ((colour_t){.abgr = 0xffad6c3a}) #define OP_NODE_BORDER_COLOUR ((colour_t){.abgr = 0xff8e4a33}) +typedef i32 (*node_func_t)(i32 a, i32 b); +typedef enum node_type node_type_t; +typedef union node_data node_data_t; typedef struct node node_t; -enum comp_ops { - COMP_OP_ADD, - COMP_OP_SUB, - COMP_OP_MUL, - COMP_OP_DIV, +enum node_type { + NODE_TYPE_IO, + NODE_TYPE_OP, - COUNT_COMP_OPS, + COUNT_NODE_TYPES, +}; + +union node_data { + const char *path; + node_func_t func; }; struct node { rect_t rect; - const char *path; + node_type_t type; + node_data_t data; }; bool aabb(const node_t *node, i32 x, i32 y); diff --git a/src/nodes.c b/src/nodes.c index a99de33..d73309c 100644 --- a/src/nodes.c +++ b/src/nodes.c @@ -1,13 +1,33 @@ #include "nodes.h" #include "aliases/aliases.h" +#include "window.h" #include +typedef struct node_colours node_colours_t; +struct node_colours { + colour_t fill; + colour_t border; +}; + +INTERNAL node_colours_t colours[COUNT_NODE_TYPES] = { + [NODE_TYPE_IO] = + (node_colours_t){ + .fill = IO_NODE_FILL_COLOUR, + .border = IO_NODE_BORDER_COLOUR, + }, + [NODE_TYPE_OP] = + (node_colours_t){ + .fill = OP_NODE_FILL_COLOUR, + .border = OP_NODE_BORDER_COLOUR, + }, +}; + bool aabb(const node_t *node, i32 x, i32 y) { return x > node->rect.topleft.x && x <= node->rect.topleft.x + node->rect.w && y > node->rect.topleft.y && y <= node->rect.topleft.y + node->rect.h; } void draw_node(const window_t *wnd, const node_t *node) { - fill_rect(wnd, &(node->rect), IO_NODE_FILL_COLOUR); - draw_rect(wnd, &(node->rect), IO_NODE_BORDER_COLOUR); + fill_rect(wnd, &(node->rect), colours[node->type].fill); + draw_rect(wnd, &(node->rect), colours[node->type].border); }