Skip to content

Commit e91409c

Browse files
committed
* If a null sector is used to create a feature ID, a null sector will come out
when unpacked (instead of sector 0). * Passing in featureIndex = null to unpackFeatureId is now valid.
1 parent 8c895c7 commit e91409c

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

TheForceEngine/TFE_Editor/LevelEditor/featureId.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,15 @@ using namespace TFE_Editor;
55

66
namespace LevelEditor
77
{
8+
enum FeatureIdConst : u32
9+
{
10+
// TFE doesn't support levels with over 4 billion sectors, so this is safe.
11+
INVALID_SECTOR_ID = 0xffffffffu
12+
};
13+
814
FeatureId createFeatureId(const EditorSector* sector, s32 featureIndex, s32 featureData, bool isOverlapped)
915
{
10-
return FeatureId(u64(sector ? sector->id : 0) |
16+
return FeatureId(u64(sector ? u32(sector->id) : INVALID_SECTOR_ID) |
1117
(u64(featureIndex) << FID_FEATURE_INDEX) |
1218
(u64(featureData) << FID_FEATURE_DATA) |
1319
(u64(isOverlapped ? 1 : 0) << FID_OVERLAPPED));
@@ -23,10 +29,10 @@ namespace LevelEditor
2329
EditorSector* unpackFeatureId(FeatureId id, s32* featureIndex, s32* featureData, bool* isOverlapped)
2430
{
2531
u32 sectorId = u32(id & FID_SECTOR_MASK);
26-
*featureIndex = s32((id >> FID_FEATURE_INDEX) & FID_FEATURE_INDEX_MASK);
32+
if (featureIndex) { *featureIndex = s32((id >> FID_FEATURE_INDEX) & FID_FEATURE_INDEX_MASK); }
2733
if (featureData) { *featureData = s32((id >> FID_FEATURE_DATA) & FID_FEATURE_DATA_MASK); }
2834
if (isOverlapped) { *isOverlapped = (id & (1ull << FID_OVERLAPPED)) != 0; }
29-
// Handle the case where sectorId is invalid, which may happen for guidelines or level notes.
35+
// Features outside of sectors will have an invalid sector ID.
3036
return sectorId < (u32)s_level.sectors.size() ? &s_level.sectors[sectorId] : nullptr;
3137
}
3238
}

0 commit comments

Comments
 (0)