Skip to content

Commit e5991af

Browse files
committed
Editor: Fixed glitchy behaviour of warps settings
1 parent 271aa1a commit e5991af

14 files changed

Lines changed: 423 additions & 423 deletions

Editor/defines.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,17 @@ class ItemTypes
7474
LVL_S_BGO = 1<<1,
7575
LVL_S_NPC = 1<<2,
7676
LVL_S_PhysEnv = 1<<3,
77-
LVL_S_Door = 1<<4,
78-
LVL_S_Player = 1<<5,
77+
LVL_S_DoorEnter = 1<<5,
78+
LVL_S_DoorExit = 1<<6,
79+
LVL_S_Door = LVL_S_DoorEnter | LVL_S_DoorExit,
80+
LVL_S_Player = 1<<7,
7981
LVL_S_ALL_BASE = LVL_S_Block | LVL_S_BGO | LVL_S_NPC | LVL_S_Door | LVL_S_PhysEnv,
8082

81-
WLD_S_Tile = 1<<6,
82-
WLD_S_Scenery = 1<<7,
83-
WLD_S_Path = 1<<8,
84-
WLD_S_Level = 1<<9,
85-
WLD_S_MusicBox = 1<<10,
83+
WLD_S_Tile = 1<<8,
84+
WLD_S_Scenery = 1<<9,
85+
WLD_S_Path = 1<<10,
86+
WLD_S_Level = 1<<11,
87+
WLD_S_MusicBox = 1<<12,
8688
WLD_S_ALL = WLD_S_Tile | WLD_S_Scenery | WLD_S_Path | WLD_S_Level | WLD_S_MusicBox
8789
};
8890

Editor/editing/_components/history/history_element_item_setting.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <editing/_scenes/level/lvl_scene.h>
1313
#include <editing/_scenes/world/wld_scene.h>
1414
#include <common_features/main_window_ptr.h>
15+
#include <main_window/dock/lvl_warp_props.h>
1516

1617
#include <editing/_components/history/item_searcher.h>
1718

@@ -170,6 +171,7 @@ void HistoryElementItemSetting::processLevelUndo()
170171
return;
171172

172173
ItemSearcher levelSearcher;
174+
bool syncWarpsDialogue = false;
173175

174176
if(m_modLevelSetting == HistorySettings::SETTING_INVISIBLE)
175177
{
@@ -231,56 +233,67 @@ void HistoryElementItemSetting::processLevelUndo()
231233
{
232234
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
233235
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsTwoWayDoors(LevelDoor, QGraphicsItem *)));
236+
syncWarpsDialogue = true;
234237
}
235238
else if(m_modLevelSetting == HistorySettings::SETTING_NOVEHICLE)
236239
{
237240
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
238241
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsNoVehiclesDoors(LevelDoor, QGraphicsItem *)));
242+
syncWarpsDialogue = true;
239243
}
240244
else if(m_modLevelSetting == HistorySettings::SETTING_ALLOWNPC)
241245
{
242246
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
243247
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsAllowNPCDoors(LevelDoor, QGraphicsItem *)));
248+
syncWarpsDialogue = true;
244249
}
245250
else if(m_modLevelSetting == HistorySettings::SETTING_ALLOWNPC_IL)
246251
{
247252
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
248253
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsAllowNPCILDoors(LevelDoor, QGraphicsItem *)));
254+
syncWarpsDialogue = true;
249255
}
250256
else if(m_modLevelSetting == HistorySettings::SETTING_LOCKED)
251257
{
252258
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
253259
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsLockedDoors(LevelDoor, QGraphicsItem *)));
260+
syncWarpsDialogue = true;
254261
}
255262
else if(m_modLevelSetting == HistorySettings::SETTING_NEED_A_BOMB)
256263
{
257264
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
258265
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsBombNeedDoors(LevelDoor, QGraphicsItem *)));
266+
syncWarpsDialogue = true;
259267
}
260268
else if(m_modLevelSetting == HistorySettings::SETTING_HIDE_STAR_NUMBER)
261269
{
262270
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
263271
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsHideStarNumDoors(LevelDoor, QGraphicsItem *)));
272+
syncWarpsDialogue = true;
264273
}
265274
else if(m_modLevelSetting == HistorySettings::SETTING_ENABLE_CANNON)
266275
{
267276
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
268277
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsEnCannonDoors(LevelDoor, QGraphicsItem *)));
278+
syncWarpsDialogue = true;
269279
}
270280
else if(m_modLevelSetting == HistorySettings::SETTING_W_SPECIAL_STATE_REQUIRED)
271281
{
272282
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
273283
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsSpecialStateReqDoors(LevelDoor, QGraphicsItem *)));
284+
syncWarpsDialogue = true;
274285
}
275286
else if(m_modLevelSetting == HistorySettings::SETTING_W_NEEDS_FLOOR)
276287
{
277288
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
278289
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsStoodReqDoors(LevelDoor, QGraphicsItem *)));
290+
syncWarpsDialogue = true;
279291
}
280292
else if(m_modLevelSetting == HistorySettings::SETTING_HIDE_LEVEL_ENTER_SCENE)
281293
{
282294
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
283295
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyUndoSettingsHideLvlEntSceneDoors(LevelDoor, QGraphicsItem *)));
296+
syncWarpsDialogue = true;
284297
}
285298
else if(m_modLevelSetting == HistorySettings::SETTING_GENACTIVATE)
286299
{
@@ -369,6 +382,9 @@ void HistoryElementItemSetting::processLevelUndo()
369382
}
370383

371384
levelSearcher.find(m_modLevelData, lvlScene);
385+
386+
if(syncWarpsDialogue)
387+
MainWinConnect::pMainWin->dock_LvlWarpProps->setDoorData(-2);
372388
}
373389

374390
void HistoryElementItemSetting::processWorldRedo()
@@ -440,6 +456,7 @@ void HistoryElementItemSetting::processLevelRedo()
440456
return;
441457

442458
ItemSearcher levelSearcher;
459+
bool syncWarpsDialogue = false;
443460

444461
if(m_modLevelSetting == HistorySettings::SETTING_INVISIBLE)
445462
{
@@ -501,56 +518,67 @@ void HistoryElementItemSetting::processLevelRedo()
501518
{
502519
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
503520
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsTwoWayDoors(LevelDoor, QGraphicsItem *)));
521+
syncWarpsDialogue = true;
504522
}
505523
else if(m_modLevelSetting == HistorySettings::SETTING_NOVEHICLE)
506524
{
507525
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
508526
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsNoVehiclesDoors(LevelDoor, QGraphicsItem *)));
527+
syncWarpsDialogue = true;
509528
}
510529
else if(m_modLevelSetting == HistorySettings::SETTING_ALLOWNPC)
511530
{
512531
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
513532
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsAllowNPCDoors(LevelDoor, QGraphicsItem *)));
533+
syncWarpsDialogue = true;
514534
}
515535
else if(m_modLevelSetting == HistorySettings::SETTING_ALLOWNPC_IL)
516536
{
517537
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
518538
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsAllowNPCILDoors(LevelDoor, QGraphicsItem *)));
539+
syncWarpsDialogue = true;
519540
}
520541
else if(m_modLevelSetting == HistorySettings::SETTING_LOCKED)
521542
{
522543
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
523544
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsLockedDoors(LevelDoor, QGraphicsItem *)));
545+
syncWarpsDialogue = true;
524546
}
525547
else if(m_modLevelSetting == HistorySettings::SETTING_NEED_A_BOMB)
526548
{
527549
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
528550
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsBombNeedDoors(LevelDoor, QGraphicsItem *)));
551+
syncWarpsDialogue = true;
529552
}
530553
else if(m_modLevelSetting == HistorySettings::SETTING_HIDE_STAR_NUMBER)
531554
{
532555
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
533556
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsHideStarNumDoors(LevelDoor, QGraphicsItem *)));
557+
syncWarpsDialogue = true;
534558
}
535559
else if(m_modLevelSetting == HistorySettings::SETTING_ENABLE_CANNON)
536560
{
537561
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
538562
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsEnCannonDoors(LevelDoor, QGraphicsItem *)));
563+
syncWarpsDialogue = true;
539564
}
540565
else if(m_modLevelSetting == HistorySettings::SETTING_W_SPECIAL_STATE_REQUIRED)
541566
{
542567
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
543568
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsSpecialStateReqDoors(LevelDoor, QGraphicsItem *)));
569+
syncWarpsDialogue = true;
544570
}
545571
else if(m_modLevelSetting == HistorySettings::SETTING_W_NEEDS_FLOOR)
546572
{
547573
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
548574
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsStoodReqDoors(LevelDoor, QGraphicsItem *)));
575+
syncWarpsDialogue = true;
549576
}
550577
else if(m_modLevelSetting == HistorySettings::SETTING_HIDE_LEVEL_ENTER_SCENE)
551578
{
552579
levelSearcher.setFindFilter(ItemTypes::LVL_S_Door);
553580
connect(&levelSearcher, SIGNAL(foundDoor(LevelDoor, QGraphicsItem *)), this, SLOT(historyRedoSettingsHideLvlEntSceneDoors(LevelDoor, QGraphicsItem *)));
581+
syncWarpsDialogue = true;
554582
}
555583
else if(m_modLevelSetting == HistorySettings::SETTING_GENACTIVATE)
556584
{
@@ -639,6 +667,9 @@ void HistoryElementItemSetting::processLevelRedo()
639667
}
640668

641669
levelSearcher.find(m_modLevelData, lvlScene);
670+
671+
if(syncWarpsDialogue)
672+
MainWinConnect::pMainWin->dock_LvlWarpProps->setDoorData(-2);
642673
}
643674

644675
void HistoryElementItemSetting::historyUndoSettingPathBackgroundLevel(const WorldLevelTile &sourceLevel, QGraphicsItem *item)

Editor/editing/_components/history/history_element_place_door.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88

99
HistoryElementPlaceDoor::HistoryElementPlaceDoor(const LevelDoor &door, bool isEntrance, QObject *parent) :
1010
QObject(parent),
11-
m_door(door)
12-
{
13-
m_door.isSetIn = isEntrance;
14-
m_door.isSetOut = !isEntrance;
15-
}
11+
m_door(door),
12+
m_isEntrance(isEntrance)
13+
{}
1614

1715
HistoryElementPlaceDoor::~HistoryElementPlaceDoor()
1816
{}
@@ -31,12 +29,12 @@ void HistoryElementPlaceDoor::undo()
3129
if(!(lvlScene = qobject_cast<LvlScene*>(m_scene)))
3230
return;
3331

34-
ItemSearcher* searcher = new ItemSearcher(ItemTypes::LVL_S_Door);
32+
ItemSearcher* searcher = new ItemSearcher(m_isEntrance ? ItemTypes::LVL_S_DoorEnter : ItemTypes::LVL_S_DoorExit);
3533

3634
LevelData data;
3735
data.doors << m_door;
3836

39-
QObject::connect(searcher,&ItemSearcher::foundDoor, this, &HistoryElementPlaceDoor::historyRemoveDoors);
37+
QObject::connect(searcher, &ItemSearcher::foundDoor, this, &HistoryElementPlaceDoor::historyRemoveDoors);
4038
searcher->find(data, lvlScene);
4139
delete searcher;
4240
}
@@ -46,15 +44,18 @@ void HistoryElementPlaceDoor::redo()
4644
if(!m_scene)
4745
return;
4846

49-
LvlScene* lvlScene;
50-
if(!(lvlScene = qobject_cast<LvlScene*>(m_scene)))
47+
LvlScene* lvlScene = qobject_cast<LvlScene*>(m_scene);
48+
49+
if(!lvlScene)
5150
return;
5251

5352
bool found = false;
5453
LevelDoor door;
5554

56-
foreach(LevelDoor findDoor, lvlScene->m_data->doors){
57-
if(m_door.meta.array_id == findDoor.meta.array_id){
55+
foreach(const LevelDoor &findDoor, lvlScene->m_data->doors)
56+
{
57+
if(m_door.meta.array_id == findDoor.meta.array_id)
58+
{
5859
door = findDoor;
5960
found = true;
6061
break;
@@ -64,27 +65,33 @@ void HistoryElementPlaceDoor::redo()
6465
if(!found)
6566
return;
6667

67-
bool isEntrance = m_door.isSetIn;
68-
69-
if(isEntrance) {
68+
if(m_isEntrance)
69+
{
7070
door.ix = m_door.ix;
7171
door.iy = m_door.iy;
7272
door.isSetIn = true;
7373
lvlScene->placeDoorEnter(door, false, false);
74-
} else {
74+
}
75+
else
76+
{
7577
door.ox = m_door.ox;
7678
door.oy = m_door.oy;
7779
door.isSetOut = true;
7880
lvlScene->placeDoorExit(door, false, false);
7981
}
8082

8183
MainWinConnect::pMainWin->dock_LvlWarpProps->setDoorData(-2);
82-
8384
}
8485

8586
void HistoryElementPlaceDoor::historyRemoveDoors(const LevelDoor &/*door*/, QGraphicsItem* item)
8687
{
87-
((ItemDoor *)item)->removeFromArray();
88-
if(item) delete (item);
88+
ItemDoor *sceneItem = qgraphicsitem_cast<ItemDoor*>(item);
89+
90+
if(sceneItem)
91+
sceneItem->removeFromArray();
92+
93+
if(item)
94+
delete (item);
95+
8996
MainWinConnect::pMainWin->dock_LvlWarpProps->setDoorData(-2);
9097
}

Editor/editing/_components/history/history_element_place_door.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public slots:
2424
void historyRemoveDoors(const LevelDoor &door, QGraphicsItem *item);
2525
private:
2626
LevelDoor m_door;
27+
bool m_isEntrance;
2728
};
2829

2930
#endif // HISTORYELEMENTPLACEDOOR_H

0 commit comments

Comments
 (0)