#pragma once #include "flecs.h" #include "Types/WorldGraph/WorldGraphVisualNode.h" // Register all WorldGraph components with Flecs reflection so they can be // serialized to/from JSON via world.to_json() / world.from_json(). inline void Flecs_WorldGraph(flecs::world& world) { // ── Node kind enum ────────────────────────────────────────────────────── world.component() .constant("Add", VisualNodeKind::Add) .constant("Subtract", VisualNodeKind::Subtract) .constant("Multiply", VisualNodeKind::Multiply) .constant("Divide", VisualNodeKind::Divide) .constant("Modulo", VisualNodeKind::Modulo) .constant("Pow", VisualNodeKind::Pow) .constant("Max", VisualNodeKind::Max) .constant("Min", VisualNodeKind::Min) .constant("Negate", VisualNodeKind::Negate) .constant("Abs", VisualNodeKind::Abs) .constant("Ceil", VisualNodeKind::Ceil) .constant("Floor", VisualNodeKind::Floor) .constant("Sin", VisualNodeKind::Sin) .constant("Cos", VisualNodeKind::Cos) .constant("Tan", VisualNodeKind::Tan) .constant("Exp", VisualNodeKind::Exp) .constant("Log", VisualNodeKind::Log) .constant("Square", VisualNodeKind::Square) .constant("Round", VisualNodeKind::Round) .constant("OneMinus", VisualNodeKind::OneMinus) .constant("Lerp", VisualNodeKind::Lerp) .constant("Clamp", VisualNodeKind::Clamp) .constant("Equal", VisualNodeKind::Equal) .constant("Smaller", VisualNodeKind::Smaller) .constant("Greater", VisualNodeKind::Greater) .constant("SmallerEqual", VisualNodeKind::SmallerEqual) .constant("GreaterEqual", VisualNodeKind::GreaterEqual) .constant("And", VisualNodeKind::And) .constant("Or", VisualNodeKind::Or) .constant("Branch", VisualNodeKind::Branch) .constant("Simplex", VisualNodeKind::Simplex) .constant("OpenSimplex", VisualNodeKind::OpenSimplex) .constant("Perlin", VisualNodeKind::Perlin) .constant("Value", VisualNodeKind::Value) .constant("ValueCubic", VisualNodeKind::ValueCubic) .constant("Constant", VisualNodeKind::Constant) .constant("IsTile", VisualNodeKind::IsTile) .constant("TileDistance", VisualNodeKind::TileDistance); // ── TileType enum (needed by IsTile / TileDistance params) ───────────── world.component() .constant("Air", TileType::Air) .constant("Filler", TileType::Filler) .constant("Liquid", TileType::Liquid) .constant("Ore", TileType::Ore) .constant("NPC", TileType::NPC) .constant("Plant", TileType::Plant); // ── Core node components ──────────────────────────────────────────────── world.component() .member("kind"); world.component() .member("x") .member("y"); world.component(); // ── Connection relationship tags ──────────────────────────────────────── world.component(); world.component(); world.component(); // ── Leaf parameter components ─────────────────────────────────────────── world.component() .member("value"); world.component() .member("frequency"); world.component() .member("relativeX") .member("relativeY") .member("tileType"); world.component() .member("range") .member("tileType"); }