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
|
|
|