Skip to content
Permalink
Browse files
Editor: Make "supported features" work
main.ini now has the "supported-features" section which allows you to
enable or disable certain non-SMBX64 feature (mainly needed for SMBX2 project)
  • Loading branch information
Wohlstand committed Apr 4, 2019
1 parent 0f8e6aa commit 4745069dbcbc46302467710b6825cf1c7cc3fa10
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 26 deletions.
@@ -203,6 +203,27 @@ bool dataconfigs::loadBasics()
}
guiset.endGroup();

guiset.beginGroup("supported-features");
{
guiset.read("level-section-vertical-wrap", editor.supported_features.level_section_vertical_wrap, true);

guiset.read("level-phys-ez-new-types", editor.supported_features.level_phys_ez_new_types, true);

guiset.read("level-bgo-z-layer", editor.supported_features.level_bgo_z_layer, true);
guiset.read("level-bgo-z-position", editor.supported_features.level_bgo_z_position, true);

guiset.read("level-warp-two-way", editor.supported_features.level_warp_two_way, true);
guiset.read("level-warp-portal", editor.supported_features.level_warp_portal, true);
guiset.read("level-warp-bomb-exit", editor.supported_features.level_warp_bomb_exit, true);
guiset.read("level-warp-allow-special-state-only", editor.supported_features.level_warp_allow_sp_state_only, true);
guiset.read("level-warp-hide-interlevel-scene", editor.supported_features.level_warp_hide_interlevel_scene, true);
guiset.read("level-warp-allow-interlevel-npc", editor.supported_features.level_warp_allow_interlevel_npc, true);
guiset.read("level-warp-hide-stars", editor.supported_features.level_warp_hide_stars, true);
guiset.read("level-warp-needed-stars-message", editor.supported_features.level_warp_needstars_message, true);
guiset.read("level-warp-on-enter-event", editor.supported_features.level_warp_on_enter_event, true);
guiset.read("level-warp-cannon-exit", editor.supported_features.level_warp_cannon_exit, true);
}

if(!openSection(&guiset, "main"))
return false;

@@ -108,7 +108,11 @@ struct EditorSetup
bool level_warp_bomb_exit = true;
bool level_warp_allow_sp_state_only = true;
bool level_warp_hide_interlevel_scene = true;
bool level_warp_allow_interlevel_npc = true;
bool level_warp_hide_stars = true;
bool level_warp_needstars_message = true;
bool level_warp_on_enter_event = true;
bool level_warp_cannon_exit = true;
} supported_features;
};

@@ -120,23 +120,25 @@ void ItemPhysEnv::contextMenu(QGraphicsSceneMouseEvent *mouseEvent)

QAction *envTypes[16];
int typeID = 0;
bool support_for_new_phys_env_zone_types = !m_scene->m_data->meta.smbx64strict
&& m_scene->m_configs->editor.supported_features.level_phys_ez_new_types;

CONTEXT_MENU_ITEM_CHK(envTypes[typeID], true, tr("Water"), m_data.env_type == LevelPhysEnv::ENV_WATER);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], true, tr("Quicksand"), m_data.env_type == LevelPhysEnv::ENV_QUICKSAND);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Custom liquid"), m_data.env_type == LevelPhysEnv::ENV_CUSTOM_LIQUID);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Gravity Field"), m_data.env_type == LevelPhysEnv::ENV_GRAVITATIONAL_FIELD);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_PLAYER);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_PLAYER);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("NPC/Player Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_NPC);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("NPC/Player Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_NPC);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Mouse click Event"), m_data.env_type == LevelPhysEnv::ENV_CLICK_EVENT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Collision script"), m_data.env_type == LevelPhysEnv::ENV_COLLISION_SCRIPT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Mouse click Script"), m_data.env_type == LevelPhysEnv::ENV_CLICK_SCRIPT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Collision Event"), m_data.env_type == LevelPhysEnv::ENV_COLLISION_EVENT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("Air chamber"), m_data.env_type == LevelPhysEnv::ENV_AIR);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("NPC Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_NPC1);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("NPC Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_NPC1);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], !m_scene->m_data->meta.smbx64strict, tr("NPC Hurting Field"), m_data.env_type == LevelPhysEnv::ENV_NPC_HURTING_FIELD);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Custom liquid"), m_data.env_type == LevelPhysEnv::ENV_CUSTOM_LIQUID);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Gravity Field"), m_data.env_type == LevelPhysEnv::ENV_GRAVITATIONAL_FIELD);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_PLAYER);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_PLAYER);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("NPC/Player Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_NPC);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("NPC/Player Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_NPC);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Mouse click Event"), m_data.env_type == LevelPhysEnv::ENV_CLICK_EVENT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Collision script"), m_data.env_type == LevelPhysEnv::ENV_COLLISION_SCRIPT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Mouse click Script"), m_data.env_type == LevelPhysEnv::ENV_CLICK_SCRIPT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Collision Event"), m_data.env_type == LevelPhysEnv::ENV_COLLISION_EVENT);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("Air chamber"), m_data.env_type == LevelPhysEnv::ENV_AIR);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("NPC Touch Event (Once)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_ONCE_NPC1);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("NPC Touch Event (Every frame)"), m_data.env_type == LevelPhysEnv::ENV_TOUCH_EVENT_NPC1);
CONTEXT_MENU_ITEM_CHK(envTypes[typeID], support_for_new_phys_env_zone_types, tr("NPC Hurting Field"), m_data.env_type == LevelPhysEnv::ENV_NPC_HURTING_FIELD);

#undef CONTEXT_MENU_ITEM_CHK

@@ -155,7 +155,11 @@ QComboBox *LvlItemProperties::cbox_event_npc_le()

void LvlItemProperties::setSMBX64Strict(bool en)
{
dataconfigs &c = mw()->configs;
ui->PROPS_BGO_Z_Pos->setEnabled(!en);
ui->PROPS_BGO_Z_Pos->setVisible(c.editor.supported_features.level_bgo_z_layer || c.editor.supported_features.level_bgo_z_position);
ui->PROPS_BGO_Z_Layer->setVisible(c.editor.supported_features.level_bgo_z_layer);
ui->PROPS_BGO_Z_Offset->setVisible(c.editor.supported_features.level_bgo_z_position);
}
/******************Comobo boxes*********************************/

@@ -99,8 +99,9 @@ QPushButton *LvlSectionProps::getEditBackground2IniButton()

void LvlSectionProps::setSMBX64Strict(bool en)
{
ui->LVLPropsWrapVertical->setEnabled(!en);
mw()->ui->actionWrapVertically->setEnabled(!en);
dataconfigs &c = mw()->configs;
ui->LVLPropsWrapVertical->setEnabled(!en && c.editor.supported_features.level_section_vertical_wrap);
mw()->ui->actionWrapVertically->setEnabled(!en && c.editor.supported_features.level_section_vertical_wrap);
}

void LvlSectionProps::re_translate()
@@ -18,6 +18,7 @@

#include <QInputDialog>
#include <QDesktopWidget>
#include <QStandardItemModel>

#include <editing/_scenes/level/lvl_history_manager.h>
#include <editing/_scenes/level/lvl_item_placing.h>
@@ -87,23 +88,34 @@ QComboBox *LvlWarpBox::cbox_event_enter()

void LvlWarpBox::setSMBX64Strict(bool en)
{
dataconfigs &c = mw()->configs;
bool shown = !en;

{
QStandardItemModel* model = qobject_cast<QStandardItemModel*>(ui->WarpType->model());
QStandardItem *item = model->item(3);//Portal warp item
if(c.editor.supported_features.level_warp_portal)
item->setFlags(item->flags() | Qt::ItemIsEnabled);
else
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
}

// Disalbe/Hide all non-supported in SMBX 1.3 parameters
ui->WarpTwoWay->setVisible(shown);
ui->WarpNeedAStarsMsg->setVisible(shown);
ui->WarpNeedAStarsMsg_label->setVisible(shown);
ui->WarpHideStars->setVisible(shown);
ui->WarpBombNeed->setVisible(shown);
ui->WarpHideLevelEnterScreen->setVisible(shown);
ui->WarpTwoWay->setVisible(shown && c.editor.supported_features.level_warp_two_way);
ui->WarpNeedAStarsMsg->setVisible(shown && c.editor.supported_features.level_warp_needstars_message);
ui->WarpNeedAStarsMsg_label->setVisible(shown && c.editor.supported_features.level_warp_needstars_message);
ui->WarpHideStars->setVisible(shown && c.editor.supported_features.level_warp_hide_stars);
ui->WarpBombNeed->setVisible(shown && c.editor.supported_features.level_warp_bomb_exit);
ui->WarpHideLevelEnterScreen->setVisible(shown && c.editor.supported_features.level_warp_hide_interlevel_scene);

ui->WarpAllowNPC_IL->setVisible(shown);
ui->WarpSpecialStateOnly->setVisible(shown);
ui->WarpAllowNPC_IL->setVisible(shown && c.editor.supported_features.level_warp_allow_interlevel_npc);
ui->WarpSpecialStateOnly->setVisible(shown && c.editor.supported_features.level_warp_allow_sp_state_only);

ui->warpBoxCannon->setVisible(shown);
ui->warpBoxCannon->setVisible(shown && c.editor.supported_features.level_warp_cannon_exit);
ui->WarpEnableCannon->setDisabled(en);
ui->WarpCannonSpeed->setDisabled(en);

ui->warpBoxEnterEvent->setVisible(shown);
ui->warpBoxEnterEvent->setVisible(shown && c.editor.supported_features.level_warp_on_enter_event);
ui->WarpEnterEvent->setDisabled(en);
ui->WarpEnterEvent_label->setDisabled(en);
}

0 comments on commit 4745069

Please sign in to comment.