Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions engine/includes/editor/assetmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class ENGINE_EXPORT AssetManager : public QObject {

bool pushToImport(AssetConverterSettings *settings);

void createFromTemplate(const TString &destination);

public slots:
void reimport();

Expand Down
4 changes: 2 additions & 2 deletions engine/includes/editor/converters/prefabconverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ class PrefabConverter : public AssetConverter {
public:
void makePrefab(Actor *actor, AssetConverterSettings *settings);

AssetConverterSettings *createSettings() override;

private:
StringList suffixes() const override { return {"fab"}; }

ReturnCode convertFile(AssetConverterSettings *) override;

AssetConverterSettings *createSettings() override;

Actor *createActor(const AssetConverterSettings *settings, const TString &guid) const override;

TString templatePath() const override;
Expand Down
30 changes: 26 additions & 4 deletions engine/src/editor/assetmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,23 @@ bool AssetManager::pushToImport(AssetConverterSettings *settings) {
return true;
}

void AssetManager::createFromTemplate(const TString &destination) {
AssetConverter *converter = getConverter(destination);
if(converter) {
converter->createFromTemplate(destination);
} else {
TString suffix = Url(destination).suffix().toLower();
for(auto builder : m_builders) {
for(auto it : builder->suffixes()) {
if(it == suffix) {
builder->createFromTemplate(destination);
return;
}
}
}
}
}

TString AssetManager::pathToLocal(const TString &source) const {
static QDir dir(m_projectManager->contentPath().data());
TString path(dir.relativeFilePath(source.data()).toStdString());
Expand Down Expand Up @@ -236,7 +253,7 @@ void AssetManager::makePrefab(const TString &source, const TString &target) {
int index = source.indexOf(':');
TString id = source.left(index);
TString name = source.right(index + 1);
Actor *actor = dynamic_cast<Actor *>(Engine::findObject(id.toInt()));
Actor *actor = dynamic_cast<Actor *>(Engine::findObject(id.toLong()));
if(actor) {
TString path(m_projectManager->contentPath());
path += TString("/") + QFileInfo(target.data()).filePath().toStdString() + "/" + name + ".fab";
Expand All @@ -245,7 +262,12 @@ void AssetManager::makePrefab(const TString &source, const TString &target) {
if(converter) {
Object *parent = actor->parent();

AssetConverterSettings *settings = fetchSettings(path);
AssetConverterSettings *settings = converter->createSettings();

settings->setSource(path);
settings->setDestination(QUuid::createUuid().toString().toStdString());
settings->setAbsoluteDestination(m_projectManager->importPath() + "/" + settings->destination());
m_converterSettings[path] = settings;

converter->makePrefab(actor, settings);

Expand All @@ -255,7 +277,7 @@ void AssetManager::makePrefab(const TString &source, const TString &target) {

Actor *clone = static_cast<Actor *>(actor->clone(parent));

emit prefabCreated(id.toInt(), clone->uuid());
emit prefabCreated(id.toLong(), clone->uuid());
}
}
}
Expand Down Expand Up @@ -517,7 +539,7 @@ void AssetManager::onPerform() {
}

AssetConverter *AssetManager::getConverter(const TString &source) {
auto it = m_converters.find(QFileInfo(source.data()).completeSuffix().toLower().toStdString());
auto it = m_converters.find(Url(source).suffix().toLower());
if(it != m_converters.end()) {
return it->second;
}
Expand Down
6 changes: 3 additions & 3 deletions engine/src/editor/converters/prefabconverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ TString PrefabConverter::templatePath() const {
}

void PrefabConverter::createFromTemplate(const TString &destination) {
File src(templatePath().data());
if(src.open(File::ReadOnly)) {
TString data = src.readAll();
QFile src(templatePath().data());
if(src.open(QFile::ReadOnly)) {
TString data = src.readAll().toStdString();
src.close();

Variant variant = Json::load(data);
Expand Down
5 changes: 1 addition & 4 deletions worldeditor/src/screens/contentbrowser/contenttree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,7 @@ bool ContentTree::setData(const QModelIndex &index, const QVariant &value, int r
QDir dir(path);
dir.mkdir(value.toString());
} else {
AssetConverter *converter = AssetManager::instance()->getConverter(source.toStdString());
if(converter) {
converter->createFromTemplate((QString(path + "/" + value.toString() + "." + QFileInfo(source).suffix())).toStdString());
}
AssetManager::instance()->createFromTemplate((path + "/" + value.toString() + "." + QFileInfo(source).suffix()).toStdString());
}

m_newAsset->setParent(nullptr);
Expand Down
6 changes: 6 additions & 0 deletions worldeditor/src/screens/objecthierarchy/hierarchybrowser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ HierarchyBrowser::HierarchyBrowser(QWidget *parent) :
}

HierarchyBrowser::~HierarchyBrowser() {
delete m_filter->sourceModel();

delete m_filter;

delete m_components;

delete ui;
}

Expand Down
Loading