60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#pragma once
|
||
|
||
#include "domain/Project.h"
|
||
|
||
#include <QColor>
|
||
#include <QImage>
|
||
#include <QObject>
|
||
#include <QSize>
|
||
#include <QString>
|
||
#include <QVector>
|
||
|
||
namespace core::library {
|
||
|
||
/// 资源库中的一个“可拖拽实体资源”。未来可来自在线服务器。
|
||
struct LibraryResource {
|
||
enum class Kind { Entity, Tool };
|
||
QString resourceId;
|
||
QString displayName;
|
||
|
||
Kind kind = Kind::Entity;
|
||
|
||
/// 拖到画布后用于创建实体的模板(id 可为空,主窗口会自动分配 entity-<n>)。
|
||
core::Project::Entity entityTemplate;
|
||
|
||
/// 拖到画布后用于创建工具的模板(id 可为空,主窗口会自动分配 tool-<n>)。
|
||
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<core::library::LibraryResource>& 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
|
||
|