载入中...
搜索中...
未找到
EditorExtension.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <cstdint>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
12namespace eve::editor {
13
15enum class ExtensionAudience : std::uint32_t {
16 None = 0,
17 Developer = 1u << 0,
18 Player = 1u << 1,
19 Admin = 1u << 2,
20 Automation = 1u << 3
21};
22
25 return static_cast<ExtensionAudience>(static_cast<std::uint32_t>(left) | static_cast<std::uint32_t>(right));
26}
29 return static_cast<ExtensionAudience>(static_cast<std::uint32_t>(left) & static_cast<std::uint32_t>(right));
30}
33 return (value & audience) == audience;
34}
35
45
49 std::string ownerModule;
50 std::string titleKey;
51 std::vector<ToolId> tools;
52 std::vector<CommandId> commands;
54};
55
62
78
81public:
83 virtual ~IGameEditorExtension() = default;
85 virtual std::string ownerModule() const = 0;
87 virtual void registerEditor(IEditorExtensionRegistry& registry) = 0;
88};
89
97public:
100
102 Result<void> load(IGameEditorExtension& extension);
104 std::size_t unload(const std::string& ownerModule);
106 void configureProfile(HostProfile& profile) const;
107
109 std::vector<ExtensionToolDescriptor> tools(const HostProfile& profile) const;
111 std::vector<ExtensionPaletteDescriptor> palettes(const HostProfile& profile) const;
113 std::vector<ExtensionRuleDescriptor> rules(const HostProfile& profile) const;
114
117 ExtensionAudience audiences) override;
119 Result<void> registerTool(ExtensionToolDescriptor descriptor) override;
121 Result<void> registerPalette(ExtensionPaletteDescriptor descriptor) override;
123 Result<void> registerRule(ExtensionRuleDescriptor descriptor) override;
124
125private:
126 struct CommandVisibility {
128 std::string ownerModule;
129 ExtensionAudience audiences;
130 };
131
132 static ExtensionAudience audienceFor(const HostProfile& profile);
133 static Result<void> invalid(const char* rule, std::string message);
134
135 EditorCommandService* commands_ = nullptr;
136 std::string activeOwner_;
137 std::vector<CommandVisibility> commandVisibility_;
138 std::vector<ExtensionToolDescriptor> tools_;
139 std::vector<ExtensionPaletteDescriptor> palettes_;
140 std::vector<ExtensionRuleDescriptor> rules_;
141};
142
143} // namespace eve::editor
double value
std::string descriptor
#define EVENGINE_API_ORCHESTRATION
Definition Export.h:111
std::string message
HexVec3 left
HexVec3 right
HSQOBJECT handler
std::string id
Definition PlayHost.cpp:108
std::vector< VegetationPresetCommand > commands
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Registry and execution gate for UI-, script- and automation-neutral commands.
Loads game extensions and filters their descriptors for each host.
EditorExtensionRegistry(EditorCommandService *commands)
Editor extension registry.
Upper capability boundary for one editor host.
Scoped registration surface exposed to game modules.
virtual Result< void > registerRule(ExtensionRuleDescriptor descriptor)=0
Register gameplay validation metadata.
virtual ~IEditorExtensionRegistry()=default
Releases IEditorExtensionRegistry resources.
virtual Result< void > registerTool(ExtensionToolDescriptor descriptor)=0
Register semantic tool metadata.
virtual Result< EditorValue > registerCommand(CommandDescriptor descriptor, EditorCommandHandler handler, ExtensionAudience audiences)=0
Register a command; the registry overwrites ownerModule with the active extension owner.
virtual Result< void > registerPalette(ExtensionPaletteDescriptor descriptor)=0
Register a host-specific palette for existing tools/commands.
Entry point implemented by a gameplay module to inject editor behavior.
virtual ~IGameEditorExtension()=default
Releases IGameEditorExtension resources.
virtual void registerEditor(IEditorExtensionRegistry &registry)=0
Register all game-provided editor components.
virtual std::string ownerModule() const =0
Stable module owner used for unload and duplicate protection.
constexpr bool hasAudience(ExtensionAudience value, ExtensionAudience audience)
True when audience.
std::function< Result< EditorValue >(const CommandContext &, const EditorValue &)> EditorCommandHandler
ExtensionAudience
Host audiences to which a game-provided editor extension may be published.
Presentation and execution metadata for a registered command.
Semantic palette that can place the same tool differently per audience.
Discoverable gameplay validation rule registered by a game extension.
Host-neutral metadata for a game-provided editor tool.
std::vector< CapabilityId > targetRequirements