diff --git a/extern/libphysis b/extern/libphysis index 60df89b..63051e0 160000 --- a/extern/libphysis +++ b/extern/libphysis @@ -1 +1 @@ -Subproject commit 60df89b0ee0989fc844a0b344229c5fdc60e3fb4 +Subproject commit 63051e0056a521d9165445fe6f6f1a2221dcea37 diff --git a/mateditor/include/materialpropertyedit.h b/mateditor/include/materialpropertyedit.h index 4cce214..fc6f5a0 100644 --- a/mateditor/include/materialpropertyedit.h +++ b/mateditor/include/materialpropertyedit.h @@ -8,6 +8,7 @@ #include #include +#include #include class MaterialPropertyEdit : public QWidget @@ -24,8 +25,10 @@ private: QVBoxLayout *m_itemsLayout = nullptr; QLineEdit *m_shaderPackageName = nullptr; - QFrame *m_propertiesFrame = nullptr; + + QTabWidget *m_tabWidget = nullptr; QVBoxLayout *m_propertiesLayout = nullptr; + QVBoxLayout *m_texturesLayout = nullptr; physis_Material m_material = {}; physis_SHPK m_shpk = {}; diff --git a/mateditor/src/materialpropertyedit.cpp b/mateditor/src/materialpropertyedit.cpp index 1d478e7..d7ec867 100644 --- a/mateditor/src/materialpropertyedit.cpp +++ b/mateditor/src/materialpropertyedit.cpp @@ -344,10 +344,19 @@ MaterialPropertyEdit::MaterialPropertyEdit(GameData *data, QWidget *parent) auto selectShaderPackageButton = new QPushButton(i18n("Shaders…")); shaderPackageLayout->addWidget(selectShaderPackageButton); - m_propertiesFrame = new QFrame(); + m_tabWidget = new QTabWidget(); + m_itemsLayout->addWidget(m_tabWidget); + + auto propertiesTab = new QWidget(); m_propertiesLayout = new QVBoxLayout(); - m_propertiesFrame->setLayout(m_propertiesLayout); - m_itemsLayout->addWidget(m_propertiesFrame); + propertiesTab->setLayout(m_propertiesLayout); + + auto texturesTab = new QWidget(); + m_texturesLayout = new QVBoxLayout(); + texturesTab->setLayout(m_texturesLayout); + + m_tabWidget->addTab(propertiesTab, i18n("Parameters")); + m_tabWidget->addTab(texturesTab, i18n("Textures")); setLayout(m_itemsLayout); @@ -418,6 +427,82 @@ void MaterialPropertyEdit::rebuild() layout->addRow(i18n("Value:"), label); } + + child = nullptr; + while ((child = m_texturesLayout->takeAt(0)) != nullptr) { + child->widget()->setParent(nullptr); + child->widget()->deleteLater(); + } + + for (int i = 0; i < m_material.num_samplers; i++) { + const auto sampler = m_material.samplers[i]; + + QString name; + switch (sampler.texture_usage) { + case TextureUsage::Sampler: + case TextureUsage::Sampler0: + case TextureUsage::Sampler1: + name = i18n("Generic"); + break; + case TextureUsage::SamplerCatchlight: + name = i18n("Catchlight"); + break; + case TextureUsage::SamplerColorMap0: + name = i18n("Color Map 0"); + break; + case TextureUsage::SamplerColorMap1: + name = i18n("Color Map 1"); + break; + case TextureUsage::SamplerDiffuse: + name = i18n("Diffuse"); + break; + case TextureUsage::SamplerEnvMap: + name = i18n("Environment Map"); + break; + case TextureUsage::SamplerMask: + name = i18n("Mask"); + break; + case TextureUsage::SamplerNormal: + name = i18n("Normal"); + break; + case TextureUsage::SamplerNormalMap0: + name = i18n("Normal Map 0"); + break; + case TextureUsage::SamplerNormalMap1: + name = i18n("Normal Map 1"); + break; + case TextureUsage::SamplerReflection: + name = i18n("Reflection"); + break; + case TextureUsage::SamplerSpecular: + name = i18n("Specular"); + break; + case TextureUsage::SamplerSpecularMap0: + name = i18n("Specular Map 0"); + break; + case TextureUsage::SamplerSpecularMap1: + name = i18n("Specular Map 1"); + break; + case TextureUsage::SamplerWaveMap: + name = i18n("Wave Map"); + break; + case TextureUsage::SamplerWaveletMap0: + name = i18n("Wavelet Map 0"); + break; + case TextureUsage::SamplerWaveletMap1: + name = i18n("Wavelet Map 1"); + break; + case TextureUsage::SamplerWhitecapMap: + name = i18n("Whitecap Map"); + break; + default: + name = i18n("Unknown"); + break; + } + + auto groupBox = new QGroupBox(name); + m_texturesLayout->addWidget(groupBox); + } } #include "moc_materialpropertyedit.cpp"