@@ -5,9 +5,15 @@ using namespace TFE_Editor;
5
5
6
6
namespace LevelEditor
7
7
{
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
+
8
14
FeatureId createFeatureId (const EditorSector* sector, s32 featureIndex, s32 featureData, bool isOverlapped)
9
15
{
10
- return FeatureId (u64 (sector ? sector->id : 0 ) |
16
+ return FeatureId (u64 (sector ? u32 ( sector->id ) : INVALID_SECTOR_ID ) |
11
17
(u64 (featureIndex) << FID_FEATURE_INDEX) |
12
18
(u64 (featureData) << FID_FEATURE_DATA) |
13
19
(u64 (isOverlapped ? 1 : 0 ) << FID_OVERLAPPED));
@@ -23,10 +29,10 @@ namespace LevelEditor
23
29
EditorSector* unpackFeatureId (FeatureId id, s32* featureIndex, s32* featureData, bool * isOverlapped)
24
30
{
25
31
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); }
27
33
if (featureData) { *featureData = s32 ((id >> FID_FEATURE_DATA) & FID_FEATURE_DATA_MASK); }
28
34
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 .
30
36
return sectorId < (u32 )s_level.sectors .size () ? &s_level.sectors [sectorId] : nullptr ;
31
37
}
32
38
}
0 commit comments