| 11 | #define PCGEX_NAMESPACE WriteGUID |
| 12 | |
| 13 | bool FPCGExGUIDDetails::Init(FPCGExContext* InContext, TSharedRef<PCGExData::FFacade>& InFacade) |
| 14 | { |
| 15 | switch (Format) |
| 16 | { |
| 17 | default: |
| 18 | case EPCGExGUIDFormat::Digits: |
| 19 | GUIDFormat = EGuidFormats::Digits; |
| 20 | break; |
| 21 | case EPCGExGUIDFormat::DigitsLower: |
| 22 | GUIDFormat = EGuidFormats::DigitsLower; |
| 23 | break; |
| 24 | case EPCGExGUIDFormat::DigitsWithHyphens: |
| 25 | GUIDFormat = EGuidFormats::DigitsWithHyphens; |
| 26 | break; |
| 27 | case EPCGExGUIDFormat::DigitsWithHyphensLower: |
| 28 | GUIDFormat = EGuidFormats::DigitsWithHyphensLower; |
| 29 | break; |
| 30 | case EPCGExGUIDFormat::DigitsWithHyphensInBraces: |
| 31 | GUIDFormat = EGuidFormats::DigitsWithHyphensInBraces; |
| 32 | break; |
| 33 | case EPCGExGUIDFormat::DigitsWithHyphensInParentheses: |
| 34 | GUIDFormat = EGuidFormats::DigitsWithHyphensInParentheses; |
| 35 | break; |
| 36 | case EPCGExGUIDFormat::HexValuesInBraces: |
| 37 | GUIDFormat = EGuidFormats::HexValuesInBraces; |
| 38 | break; |
| 39 | case EPCGExGUIDFormat::UniqueObjectGuid: |
| 40 | GUIDFormat = EGuidFormats::UniqueObjectGuid; |
| 41 | break; |
| 42 | case EPCGExGUIDFormat::Short: |
| 43 | GUIDFormat = EGuidFormats::Short; |
| 44 | break; |
| 45 | case EPCGExGUIDFormat::Base36Encoded: |
| 46 | GUIDFormat = EGuidFormats::Base36Encoded; |
| 47 | break; |
| 48 | } |
| 49 | |
| 50 | AdjustedGridHashCollision = FVector(1 / GridHashCollision.X, 1 / GridHashCollision.Y, 1 / GridHashCollision.Z); |
| 51 | AdjustedPositionHashCollision = FVector(1 / PositionHashCollision.X, 1 / PositionHashCollision.Y, 1 / PositionHashCollision.Z); |
| 52 | |
| 53 | bUseIndex = (Uniqueness & static_cast<uint8>(EPCGExGUIDUniquenessFlags::Index)) != 0; |
| 54 | bUseSeed = (Uniqueness & static_cast<uint8>(EPCGExGUIDUniquenessFlags::Seed)) != 0; |
| 55 | bUsePosition = (Uniqueness & static_cast<uint8>(EPCGExGUIDUniquenessFlags::Position)) != 0; |
| 56 | |
| 57 | UniqueKeyReader = GetValueSettingUniqueKey(); |
| 58 | if (!UniqueKeyReader->Init(InContext, InFacade)) { return false; } |
| 59 | |
| 60 | const uint32 BaseUniqueKey = UniqueKeyReader->IsConstant() ? 0 : UniqueKeyConstant; |
| 61 | if ((Uniqueness & static_cast<uint8>(EPCGExGUIDUniquenessFlags::Grid)) != 0) |
| 62 | { |
| 63 | const FBox RefBounds = PCGHelpers::GetGridBounds(InContext->GetTargetActor(InFacade->Source->GetIn()), InContext->SourceComponent.Get()); |
| 64 | GridHash = HashCombine(BaseUniqueKey, PCGEx::GH3(RefBounds.Min, AdjustedGridHashCollision)); |
| 65 | GridHash = HashCombine(GridHash, PCGEx::GH3(RefBounds.Max, AdjustedGridHashCollision)); |
| 66 | } |
| 67 | else |
| 68 | { |
| 69 | GridHash = BaseUniqueKey; |
| 70 | } |