载入中...
搜索中...
未找到
GridGraph.h
浏览该文件的文档.
1#pragma once
2
4#include "procgen/Grid2D.h"
5#include "procgen/PointSet.h"
6
7#include <cstdint>
8#include <memory>
9#include <string>
10#include <string_view>
11#include <unordered_map>
12#include <variant>
13#include <vector>
14
15namespace eve::procgen {
16
17class PointGraph;
18
20using GridGraphValue = std::variant<Grid2D, PointSet>;
21
23enum class GridGraphValueType : std::uint8_t { Grid, PointSet };
24
36public:
38 [[nodiscard]] Result<void> addNode(std::string id, std::string operation);
40 [[nodiscard]] Result<void> connect(std::string_view fromId, std::string_view toId, int inputIndex = 0);
42 [[nodiscard]] Result<void> setNodeGrid(std::string_view id, const Grid2D& grid);
44 [[nodiscard]] Result<void> setNodeInt(std::string_view id, std::string key, int value);
46 [[nodiscard]] Result<void> setNodeFloat(std::string_view id, std::string key, float value);
48 [[nodiscard]] Result<void> setNodeString(std::string_view id, std::string key, std::string value);
54 [[nodiscard]] Result<void> setNodePointSubgraph(std::string_view id, const PointGraph& graph, std::string inputNode,
55 std::string outputNode);
56
62 [[nodiscard]] Result<GridGraphValue> execute(std::string_view outputId);
64 [[nodiscard]] Result<void> validate(std::string_view outputId) const;
66 void clearCache();
68 [[nodiscard]] std::uint64_t revision() const noexcept { return revision_; }
70 [[nodiscard]] std::string serializeDefinition() const;
72 [[nodiscard]] Result<void> deserializeDefinition(std::string_view definition);
73
75 [[nodiscard]] static int operationCount();
77 [[nodiscard]] static std::string operationId(int index);
79 [[nodiscard]] static Result<GridGraphValueType> operationOutputType(std::string_view operation);
80
81private:
82 struct Node {
83 std::string id;
84 std::string operation;
85 std::string inputs[3];
86 std::unordered_map<std::string, int> ints;
87 std::unordered_map<std::string, float> floats;
88 std::unordered_map<std::string, std::string> strings;
89 Grid2D inputGrid;
90 bool hasInputGrid = false;
91 std::shared_ptr<PointGraph> pointSubgraph;
92 std::string pointInputNode;
93 std::string pointOutputNode;
94 GridGraphValue cache;
95 bool cacheValid = false;
96 };
97
98 [[nodiscard]] ResultRef<const GridGraphValue> evaluate(std::string_view id,
99 std::unordered_map<std::string, int>& states);
100 void invalidateFrom(std::string_view id);
101
102 std::unordered_map<std::string, Node> nodes_;
103 std::vector<std::string> order_;
104 std::uint64_t revision_ = 0;
105};
106
107} // namespace eve::procgen
ActionParameterOperation operation
double value
Vocabulary aliases for nullable and checked borrowed references.
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t key
int inputs
Definition GridGraph.cpp:23
std::map< std::string, std::vector< std::string > > graph
Definition Package.cpp:59
std::string id
Definition PlayHost.cpp:108
LogicalId definition
uint32_t index
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
Deterministic data-flow graph for grid generation and explicit grid-to-point composition.
Definition GridGraph.h:35
std::uint64_t revision() const noexcept
Monotonic authoring revision; successful mutations increment it.
Definition GridGraph.h:68
EVENGINE_API_DOMAINS public API.
Definition PointGraph.h:66
Script-friendly collection of attributed 3D samples.
Definition PointSet.h:59
GridGraphValueType
Declared output kind of a GridGraph operation.
Definition GridGraph.h:23
std::variant< Grid2D, PointSet > GridGraphValue
Strong runtime value passed between typed GridGraph ports.
Definition GridGraph.h:20