92 lines
4.3 KiB
C++
92 lines
4.3 KiB
C++
#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<VisualNodeKind>()
|
|
.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<TileType>()
|
|
.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<VisualNodeType>()
|
|
.member<VisualNodeKind>("kind");
|
|
|
|
world.component<VisualNodePos>()
|
|
.member<float>("x")
|
|
.member<float>("y");
|
|
|
|
world.component<VisualNodeOutput>();
|
|
|
|
// ── Connection relationship tags ────────────────────────────────────────
|
|
world.component<InputPin0>();
|
|
world.component<InputPin1>();
|
|
world.component<InputPin2>();
|
|
|
|
// ── Leaf parameter components ───────────────────────────────────────────
|
|
world.component<NodeParam_Constant>()
|
|
.member<float>("value");
|
|
|
|
world.component<NodeParam_Noise>()
|
|
.member<float>("frequency");
|
|
|
|
world.component<NodeParam_IsTile>()
|
|
.member<int8_t>("relativeX")
|
|
.member<int8_t>("relativeY")
|
|
.member<TileType>("tileType");
|
|
|
|
world.component<NodeParam_TileDistance>()
|
|
.member<int8_t>("range")
|
|
.member<TileType>("tileType");
|
|
}
|