Files
factory-hole-core/include/Components/WorldGraph.hpp
2026-02-20 22:50:05 +09:00

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");
}