#pragma once #include "domain/Project.h" #include #include #include #include #include #include namespace core::library { /// 资源库中的一个“可拖拽实体资源”。未来可来自在线服务器。 struct LibraryResource { enum class Kind { Entity, Tool }; QString resourceId; QString displayName; Kind kind = Kind::Entity; /// 拖到画布后用于创建实体的模板(id 可为空,主窗口会自动分配 entity-)。 core::Project::Entity entityTemplate; /// 拖到画布后用于创建工具的模板(id 可为空,主窗口会自动分配 tool-)。 core::Project::Tool toolTemplate; /// 资源预览/占位贴图生成参数(当前无真实来源时用)。 QSize imageSize = QSize(256, 256); QColor accent = QColor(80, 160, 255); /// 贴图相对 originWorld 的偏移(world 坐标;落到画布后会做 originWorld + offset)。 QPointF imageOffsetFromOrigin = QPointF(-128, -128); }; /// 资源库提供者接口:可用假实现占位,后续接入在线服务时替换。 class ResourceLibraryProvider : public QObject { Q_OBJECT public: explicit ResourceLibraryProvider(QObject* parent = nullptr) : QObject(parent) {} ~ResourceLibraryProvider() override = default; virtual void fetchResourcesAsync() = 0; signals: void resourcesReady(const QVector& resources); void resourcesFailed(const QString& error); }; /// 假资源提供者:返回内置的若干资源,预留接口用于未来在线获取。 class FakeResourceLibraryProvider final : public ResourceLibraryProvider { Q_OBJECT public: explicit FakeResourceLibraryProvider(QObject* parent = nullptr); void fetchResourcesAsync() override; }; } // namespace core::library