mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 18:41:14 +00:00
Merge branch 'master' into ps2
This commit is contained in:
commit
15678abe87
@ -65,6 +65,7 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
|
||||
connect(m_ui->sound3DCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckbox3DSound);
|
||||
connect(m_ui->rumbleCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxRumble);
|
||||
connect(m_ui->textureCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxTexture);
|
||||
connect(m_ui->customAssetsCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxCustomAssets);
|
||||
connect(m_ui->touchComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TouchControlsChanged);
|
||||
connect(m_ui->transitionTypeComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TransitionTypeChanged);
|
||||
connect(m_ui->exFullResComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::ExclusiveResolutionChanged);
|
||||
@ -81,6 +82,11 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
|
||||
connect(m_ui->texturePathOpen, &QPushButton::clicked, this, &CMainDialog::SelectTexturePathDialog);
|
||||
connect(m_ui->texturePath, &QLineEdit::editingFinished, this, &CMainDialog::TexturePathEdited);
|
||||
|
||||
connect(m_ui->addCustomAssetPath, &QPushButton::clicked, this, &CMainDialog::AddCustomAssetPath);
|
||||
connect(m_ui->removeCustomAssetPath, &QPushButton::clicked, this, &CMainDialog::RemoveCustomAssetPath);
|
||||
connect(m_ui->customAssetPaths, &QListWidget::currentRowChanged, this, &CMainDialog::SelectedPathChanged);
|
||||
connect(m_ui->customAssetPaths, &QListWidget::itemActivated, this, &CMainDialog::EditCustomAssetPath);
|
||||
|
||||
connect(m_ui->maxLoDSlider, &QSlider::valueChanged, this, &CMainDialog::MaxLoDChanged);
|
||||
connect(m_ui->maxLoDSlider, &QSlider::sliderMoved, this, &CMainDialog::MaxLoDChanged);
|
||||
connect(m_ui->maxActorsSlider, &QSlider::valueChanged, this, &CMainDialog::MaxActorsChanged);
|
||||
@ -96,8 +102,6 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
|
||||
connect(m_ui->yResSpinBox, &QSpinBox::valueChanged, this, &CMainDialog::YResChanged);
|
||||
connect(m_ui->framerateSpinBox, &QSpinBox::valueChanged, this, &CMainDialog::FramerateChanged);
|
||||
|
||||
layout()->setSizeConstraint(QLayout::SetFixedSize);
|
||||
|
||||
if (currentConfigApp->m_ram_quality_limit != 0) {
|
||||
m_modified = true;
|
||||
const QString ramError = QString("Insufficient RAM!");
|
||||
@ -312,6 +316,16 @@ void CMainDialog::UpdateInterface()
|
||||
m_ui->texturePath->setEnabled(currentConfigApp->m_texture_load);
|
||||
m_ui->texturePathOpen->setEnabled(currentConfigApp->m_texture_load);
|
||||
|
||||
m_ui->customAssetsCheckBox->setChecked(currentConfigApp->m_custom_assets_enabled);
|
||||
m_ui->customAssetPathContainer->setEnabled(currentConfigApp->m_custom_assets_enabled);
|
||||
m_ui->customAssetPaths->setEnabled(currentConfigApp->m_custom_assets_enabled);
|
||||
m_ui->addCustomAssetPath->setEnabled(currentConfigApp->m_custom_assets_enabled);
|
||||
m_ui->removeCustomAssetPath->setEnabled(false);
|
||||
|
||||
m_ui->customAssetPaths->clear();
|
||||
assetPaths = QString::fromStdString(currentConfigApp->m_custom_asset_path).split(u',');
|
||||
m_ui->customAssetPaths->addItems(assetPaths);
|
||||
|
||||
m_ui->aspectRatioComboBox->setCurrentIndex(currentConfigApp->m_aspect_ratio);
|
||||
m_ui->xResSpinBox->setValue(currentConfigApp->m_x_res);
|
||||
m_ui->yResSpinBox->setValue(currentConfigApp->m_y_res);
|
||||
@ -442,6 +456,13 @@ void CMainDialog::OnCheckboxTexture(bool checked)
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::OnCheckboxCustomAssets(bool checked)
|
||||
{
|
||||
currentConfigApp->m_custom_assets_enabled = checked;
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::TouchControlsChanged(int index)
|
||||
{
|
||||
currentConfigApp->m_touch_scheme = index;
|
||||
@ -571,10 +592,10 @@ void CMainDialog::SelectTexturePathDialog()
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
|
||||
);
|
||||
|
||||
QDir texture_dir = QDir(texture_path);
|
||||
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
|
||||
if (texture_dir.exists()) {
|
||||
currentConfigApp->m_texture_path = texture_dir.absolutePath().toStdString();
|
||||
if (data_path.exists(texture_path)) {
|
||||
currentConfigApp->m_texture_path = data_path.relativeFilePath(texture_path).toStdString();
|
||||
m_modified = true;
|
||||
}
|
||||
UpdateInterface();
|
||||
@ -582,15 +603,67 @@ void CMainDialog::SelectTexturePathDialog()
|
||||
|
||||
void CMainDialog::TexturePathEdited()
|
||||
{
|
||||
QDir texture_dir = QDir(m_ui->texturePath->text());
|
||||
QString texture_path = m_ui->texturePath->text();
|
||||
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
|
||||
if (texture_dir.exists()) {
|
||||
currentConfigApp->m_texture_path = texture_dir.absolutePath().toStdString();
|
||||
if (data_path.exists(texture_path)) {
|
||||
currentConfigApp->m_texture_path = data_path.relativeFilePath(texture_path).toStdString();
|
||||
m_modified = true;
|
||||
}
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::AddCustomAssetPath()
|
||||
{
|
||||
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
QStringList new_files = QFileDialog::getOpenFileNames(
|
||||
this,
|
||||
"Select one or more files to open",
|
||||
data_path.absolutePath(),
|
||||
"Interleaf files (*.si)"
|
||||
);
|
||||
for (QString& item : new_files) {
|
||||
item = data_path.relativeFilePath(item);
|
||||
}
|
||||
assetPaths += new_files;
|
||||
UpdateAssetPaths();
|
||||
}
|
||||
|
||||
void CMainDialog::RemoveCustomAssetPath()
|
||||
{
|
||||
assetPaths.removeAt(m_ui->customAssetPaths->currentRow());
|
||||
UpdateAssetPaths();
|
||||
}
|
||||
|
||||
void CMainDialog::SelectedPathChanged(int currentRow)
|
||||
{
|
||||
m_ui->removeCustomAssetPath->setEnabled(currentRow != -1 ? true : false);
|
||||
}
|
||||
|
||||
void CMainDialog::EditCustomAssetPath()
|
||||
{
|
||||
QDir data_path = QDir(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
QString prev_asset_path = assetPaths[m_ui->customAssetPaths->currentRow()];
|
||||
QString new_file = QFileDialog::getOpenFileName(
|
||||
this,
|
||||
"Open File",
|
||||
data_path.absoluteFilePath(prev_asset_path),
|
||||
"Interleaf files (*.si)"
|
||||
);
|
||||
if (!new_file.isEmpty()) {
|
||||
new_file = data_path.relativeFilePath(new_file);
|
||||
assetPaths[m_ui->customAssetPaths->currentRow()] = new_file;
|
||||
}
|
||||
UpdateAssetPaths();
|
||||
}
|
||||
|
||||
void CMainDialog::UpdateAssetPaths()
|
||||
{
|
||||
assetPaths.removeDuplicates();
|
||||
currentConfigApp->m_custom_asset_path = assetPaths.join(u',').toStdString();
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::AspectRatioChanged(int index)
|
||||
{
|
||||
currentConfigApp->m_aspect_ratio = index;
|
||||
|
||||
@ -29,6 +29,7 @@ class CMainDialog : public QDialog {
|
||||
private:
|
||||
bool m_modified = false;
|
||||
bool m_advanced = false;
|
||||
QStringList assetPaths = QStringList();
|
||||
Ui::MainDialog* m_ui = nullptr;
|
||||
SDL_DisplayMode** displayModes;
|
||||
|
||||
@ -48,6 +49,7 @@ private slots:
|
||||
void OnCheckboxMusic(bool checked);
|
||||
void OnCheckboxRumble(bool checked);
|
||||
void OnCheckboxTexture(bool checked);
|
||||
void OnCheckboxCustomAssets(bool checked);
|
||||
void TouchControlsChanged(int index);
|
||||
void TransitionTypeChanged(int index);
|
||||
void ExclusiveResolutionChanged(int index);
|
||||
@ -64,6 +66,11 @@ private slots:
|
||||
void AFChanged(int value);
|
||||
void SelectTexturePathDialog();
|
||||
void TexturePathEdited();
|
||||
void AddCustomAssetPath();
|
||||
void RemoveCustomAssetPath();
|
||||
void SelectedPathChanged(int currentRow);
|
||||
void EditCustomAssetPath();
|
||||
void UpdateAssetPaths();
|
||||
void XResChanged(int i);
|
||||
void YResChanged(int i);
|
||||
void AspectRatioChanged(int index);
|
||||
|
||||
@ -89,7 +89,9 @@ bool CConfigApp::InitInstance()
|
||||
m_haptic = TRUE;
|
||||
m_touch_scheme = 2;
|
||||
m_texture_load = TRUE;
|
||||
m_texture_path = "/textures/";
|
||||
m_texture_path = "textures/";
|
||||
m_custom_assets_enabled = TRUE;
|
||||
m_custom_asset_path = "assets/widescreen.si";
|
||||
int totalRamMiB = SDL_GetSystemRAM();
|
||||
if (totalRamMiB < 12) {
|
||||
m_ram_quality_limit = 2;
|
||||
@ -188,6 +190,8 @@ bool CConfigApp::ReadRegisterSettings()
|
||||
m_anisotropy = iniparser_getint(dict, "isle:Anisotropic", m_anisotropy);
|
||||
m_texture_load = iniparser_getboolean(dict, "extensions:texture loader", m_texture_load);
|
||||
m_texture_path = iniparser_getstring(dict, "texture loader:texture path", m_texture_path.c_str());
|
||||
m_custom_assets_enabled = iniparser_getboolean(dict, "extensions:si loader", m_custom_assets_enabled);
|
||||
m_custom_asset_path = iniparser_getstring(dict, "si loader:files", m_custom_asset_path.c_str());
|
||||
m_aspect_ratio = iniparser_getint(dict, "isle:Aspect Ratio", m_aspect_ratio);
|
||||
m_x_res = iniparser_getint(dict, "isle:Horizontal Resolution", m_x_res);
|
||||
m_y_res = iniparser_getint(dict, "isle:Vertical Resolution", m_y_res);
|
||||
@ -364,7 +368,8 @@ void CConfigApp::WriteRegisterSettings() const
|
||||
dictionary* dict = dictionary_new(0);
|
||||
iniparser_set(dict, "isle", NULL);
|
||||
iniparser_set(dict, "extensions", NULL);
|
||||
iniparser_set(dict, "texture loader", NULL);
|
||||
iniparser_set(dict, "si loader", NULL);
|
||||
|
||||
if (m_device_enumerator->FormatDeviceName(buffer, m_driver, m_device) >= 0) {
|
||||
iniparser_set(dict, "isle:3D Device ID", buffer);
|
||||
}
|
||||
@ -394,6 +399,9 @@ void CConfigApp::WriteRegisterSettings() const
|
||||
SetIniBool(dict, "extensions:texture loader", m_texture_load);
|
||||
iniparser_set(dict, "texture loader:texture path", m_texture_path.c_str());
|
||||
|
||||
SetIniBool(dict, "extensions:si loader", m_custom_assets_enabled);
|
||||
iniparser_set(dict, "si loader:files", m_custom_asset_path.c_str());
|
||||
|
||||
SetIniBool(dict, "isle:Back Buffers in Video RAM", m_3d_video_ram);
|
||||
|
||||
SetIniInt(dict, "isle:Island Quality", m_model_quality);
|
||||
@ -451,8 +459,8 @@ CConfigApp g_theApp;
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
QCoreApplication::setApplicationName("config");
|
||||
QCoreApplication::setApplicationVersion("1.0");
|
||||
QCoreApplication::setApplicationName("Isle-Config");
|
||||
QCoreApplication::setApplicationVersion("2.0");
|
||||
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription("Configure LEGO Island");
|
||||
@ -470,7 +478,7 @@ int main(int argc, char* argv[])
|
||||
if (parser.isSet(iniOption)) {
|
||||
g_theApp.SetIniPath(parser.value(iniOption).toStdString());
|
||||
}
|
||||
qInfo() << "Ini path =" << QString::fromStdString(g_theApp.GetIniPath());
|
||||
qInfo() << "INI path =" << QString::fromStdString(g_theApp.GetIniPath());
|
||||
|
||||
int result = 1;
|
||||
if (g_theApp.InitInstance()) {
|
||||
|
||||
@ -87,7 +87,9 @@ class CConfigApp {
|
||||
int m_texture_quality;
|
||||
bool m_music;
|
||||
bool m_texture_load;
|
||||
bool m_custom_assets_enabled;
|
||||
std::string m_texture_path;
|
||||
std::string m_custom_asset_path;
|
||||
std::string m_iniPath;
|
||||
std::string m_base_path;
|
||||
std::string m_cd_path;
|
||||
|
||||
46
CONFIG/res/add.svg
Normal file
46
CONFIG/res/add.svg
Normal file
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="add.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.496181"
|
||||
inkscape:cx="-4.2333101"
|
||||
inkscape:cy="11.141514"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1008"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<defs
|
||||
id="defs3051">
|
||||
<style
|
||||
type="text/css"
|
||||
id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#232629;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:#27ae60;fill-opacity:1;stroke:none;stroke-width:0.999911"
|
||||
d="M 7,3 V 8 H 2 v 1 h 5 v 5 H 8 V 9 h 5 V 8 H 8 V 3 Z"
|
||||
class="ColorScheme-Text"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@ -1,7 +1,9 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>shark.png</file>
|
||||
<file>lego1.png</file>
|
||||
<file>lego2.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
<qresource prefix="/">
|
||||
<file>add.svg</file>
|
||||
<file>remove.svg</file>
|
||||
<file>shark.png</file>
|
||||
<file>lego1.png</file>
|
||||
<file>lego2.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>600</width>
|
||||
<width>640</width>
|
||||
<height>480</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -24,6 +24,9 @@
|
||||
<normaloff>:/lego1.png</normaloff>:/lego1.png</iconset>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="sharkImageLabel">
|
||||
<property name="sizePolicy">
|
||||
@ -72,6 +75,12 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>425</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
@ -80,30 +89,6 @@
|
||||
<string>Game</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="2">
|
||||
<layout class="QVBoxLayout" name="gameSettingsCheckBoxes">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="sound3DCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable 3D positional audio effects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>3D Sound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="musicCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable in-game background music.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Music</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="3">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
@ -283,6 +268,32 @@ Set this to the CD image root.</string>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QWidget" name="gameSettingsCheckBoxes" native="true">
|
||||
<layout class="QVBoxLayout" name="layout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="sound3DCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable 3D positional audio effects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>3D Sound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="musicCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable in-game background music.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Music</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="graphicsTab">
|
||||
@ -766,7 +777,10 @@ The game will gradually increase the number of actors until this maximum is reac
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>x</string>
|
||||
<string>✕</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::TextFormat::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
@ -1012,72 +1026,210 @@ The game will gradually increase the number of actors until this maximum is reac
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="textureLoader">
|
||||
<property name="toolTip">
|
||||
<string>Settings for Texture Loader extension.</string>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Texture Loader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="textureCheckBox">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="texturePath">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Path to texture replacements.</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>textures/</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="texturePathOpen">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>449</width>
|
||||
<height>369</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="textureLoader">
|
||||
<property name="toolTip">
|
||||
<string>Settings for Texture Loader extension.</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Texture Loader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="textureCheckBox">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="texturePath">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Path to texture replacements. Relative to the Data Path.</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>textures/</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="texturePathOpen">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="customAssets">
|
||||
<property name="toolTip">
|
||||
<string>Settings for Custom Assets.</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Custom Assets</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="customAssetsCheckBox">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="customAssetPathContainer" native="true">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="addCustomAssetPath">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>28</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>28</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Add path.</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="config.qrc">
|
||||
<normaloff>:/add.svg</normaloff>:/add.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" rowspan="3">
|
||||
<widget class="QListWidget" name="customAssetPaths">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Paths used by the SI Loader extension.
|
||||
|
||||
Double-click a path to edit it.</string>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::SizeAdjustPolicy::AdjustToContentsOnFirstShow</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="removeCustomAssetPath">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>28</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>28</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Remove path.</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="config.qrc">
|
||||
<normaloff>:/remove.svg</normaloff>:/remove.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
@ -1176,9 +1328,14 @@ The game will gradually increase the number of actors until this maximum is reac
|
||||
<tabstop>AFSlider</tabstop>
|
||||
<tabstop>touchComboBox</tabstop>
|
||||
<tabstop>rumbleCheckBox</tabstop>
|
||||
<tabstop>scrollArea</tabstop>
|
||||
<tabstop>textureCheckBox</tabstop>
|
||||
<tabstop>texturePath</tabstop>
|
||||
<tabstop>texturePathOpen</tabstop>
|
||||
<tabstop>customAssetsCheckBox</tabstop>
|
||||
<tabstop>customAssetPaths</tabstop>
|
||||
<tabstop>addCustomAssetPath</tabstop>
|
||||
<tabstop>removeCustomAssetPath</tabstop>
|
||||
<tabstop>okButton</tabstop>
|
||||
<tabstop>launchButton</tabstop>
|
||||
<tabstop>cancelButton</tabstop>
|
||||
|
||||
10
CONFIG/res/remove.svg
Normal file
10
CONFIG/res/remove.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
||||
<style
|
||||
type="text/css"
|
||||
id="current-color-scheme">
|
||||
.ColorScheme-NegativeText {
|
||||
color:#da4453;
|
||||
}
|
||||
</style>
|
||||
<path class="ColorScheme-NegativeText" d="M 2.6992188,2 2,2.6992188 7.3007812,8 2,13.300781 C 2,13.300781 2.7082187,13.995 2.6992188,14 L 8,8.6992188 13.300781,14 C 13.291781,13.995 14,13.300781 14,13.300781 L 8.6992188,8 14,2.6992188 13.300781,2 8,7.3007812 Z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 526 B |
@ -1,6 +1,7 @@
|
||||
#include "filesystem.h"
|
||||
|
||||
#include "events.h"
|
||||
#include "extensions/siloader.h"
|
||||
#include "extensions/textureloader.h"
|
||||
#include "legogamestate.h"
|
||||
#include "misc.h"
|
||||
@ -107,6 +108,14 @@ void Emscripten_SetupFilesystem()
|
||||
Emscripten_SendExtensionProgress("HD Textures", (++i * 100) / sizeOfArray(g_textures));
|
||||
}
|
||||
}
|
||||
|
||||
if (Extensions::SiLoader::enabled) {
|
||||
wasmfs_create_directory("/LEGO/extra", 0644, fetchfs);
|
||||
|
||||
for (const auto& file : Extensions::SiLoader::files) {
|
||||
registerFile(file.c_str());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (GameState()->GetSavePath() && *GameState()->GetSavePath() && !Emscripten_OPFSDisabled()) {
|
||||
|
||||
@ -973,6 +973,8 @@ MxResult IsleApp::SetupWindow()
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
Lego()->LoadSiLoader();
|
||||
|
||||
DetectGameVersion();
|
||||
GameState()->SerializePlayersInfo(LegoStorage::c_read);
|
||||
GameState()->SerializeScoreHistory(LegoStorage::c_read);
|
||||
|
||||
@ -208,6 +208,7 @@ class LegoOmni : public MxOmni {
|
||||
|
||||
void SetVersion10(MxBool p_version10) { m_version10 = p_version10; }
|
||||
MxBool IsVersion10() { return m_version10; }
|
||||
LEGO1_EXPORT void LoadSiLoader();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10058b30
|
||||
// SYNTHETIC: BETA10 0x1008f8d0
|
||||
|
||||
@ -354,9 +354,6 @@ MxResult LegoOmni::Create(MxOmniCreateParam& p_param)
|
||||
else {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to create MxTransitionManager");
|
||||
}
|
||||
|
||||
Extension<SiLoader>::Call(Load);
|
||||
|
||||
done:
|
||||
return result;
|
||||
// LINE: BETA10 0x1008e35d
|
||||
@ -728,3 +725,8 @@ void LegoOmni::Resume()
|
||||
MxOmni::Resume();
|
||||
SetAppCursor(e_cursorArrow);
|
||||
}
|
||||
|
||||
void LegoOmni::LoadSiLoader()
|
||||
{
|
||||
Extension<SiLoader>::Call(Load);
|
||||
}
|
||||
|
||||
@ -19,10 +19,10 @@ class SiLoader {
|
||||
static bool RemoveWith(StreamObject p_object, LegoWorld* world);
|
||||
|
||||
static std::map<std::string, std::string> options;
|
||||
static std::vector<std::string> files;
|
||||
static bool enabled;
|
||||
|
||||
private:
|
||||
static std::vector<std::string> files;
|
||||
static std::vector<std::pair<StreamObject, StreamObject>> startWith;
|
||||
static std::vector<std::pair<StreamObject, StreamObject>> removeWith;
|
||||
|
||||
|
||||
@ -10,24 +10,29 @@
|
||||
using namespace Extensions;
|
||||
|
||||
std::map<std::string, std::string> SiLoader::options;
|
||||
std::vector<std::string> SiLoader::files;
|
||||
std::vector<std::pair<SiLoader::StreamObject, SiLoader::StreamObject>> SiLoader::startWith;
|
||||
std::vector<std::pair<SiLoader::StreamObject, SiLoader::StreamObject>> SiLoader::removeWith;
|
||||
bool SiLoader::enabled = false;
|
||||
|
||||
void SiLoader::Initialize()
|
||||
{
|
||||
}
|
||||
|
||||
bool SiLoader::Load()
|
||||
{
|
||||
char* files = SDL_strdup(options["si loader:files"].c_str());
|
||||
char* saveptr;
|
||||
|
||||
for (char* file = SDL_strtok_r(files, ",\n", &saveptr); file; file = SDL_strtok_r(NULL, ",\n", &saveptr)) {
|
||||
LoadFile(file);
|
||||
SiLoader::files.emplace_back(file);
|
||||
}
|
||||
|
||||
SDL_free(files);
|
||||
}
|
||||
|
||||
bool SiLoader::Load()
|
||||
{
|
||||
for (const auto& file : files) {
|
||||
LoadFile(file.c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user