日誌2017-05-24 10:50
[UE4] BitMask 使用介紹作者:dorgon
enum class EHorizonPlayerSortType | |
{ | |
Invalidated = ( 1 << 0), | |
Leve= ( 1 << 1), | |
Power = ( 1 << 2), | |
Speed= ( 1 << 3), | |
PlaceHolder1 = ( 1 << 4), | |
PlaceHolder2= ( 1 << 5), | |
PlaceHolder3= ( 1 << 6), | |
PlaceHolder4 = ( 1 << 7), | |
}; | |
void Usage(){ | |
int flag = EHorizonPlayerSortType::Level | EHorizonPlayerSortType::Speed; | |
} |
UENUM(BlueprintType, meta = (Bitflags)) | |
enum class EHorizonPlayerSortType : uint8 | |
{ | |
Invalidated = 0, | |
LevelUMETA(DisplayName = "PlayerLevel"), | |
PowerUMETA(DisplayName = "Power"), | |
SpeedUMETA(DisplayName = "Speed"), | |
PlaceHolder1 UMETA(DisplayName = "PlaceHolder1"), | |
PlaceHolder2UMETA(DisplayName = "PlaceHolder2"), | |
PlaceHolder3UMETA(DisplayName = "PlaceHolder3"), | |
PlaceHolder4UMETA(DisplayName = "PlaceHolder4"), | |
}; | |
ENUM_CLASS_FLAGS(EHorizonPlayerSortType) | |
USTRUCT(BlueprintType) | |
struct HORIZONTWEEN_API FHorizonPlayerParameters | |
{ | |
GENERATED_BODY() | |
FHorizonPlayerParameters() | |
: PlayerSortTypeFlags((int)EHorizonPlayerSortType::Level) | |
{ | |
} | |
public: | |
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (Bitmask, BitmaskEnum = "EHorizonPlayerSortType")) | |
int PlayerSortTypeFlags; | |
}; | |
bool HasFlag(const INT32& Flags, EHorizonPlayerSortType TestFlag) | |
{ | |
INT32 bitFlag = static_cast<int32>(1 << (INT32)TestFlag); //shift to the bit corresponding to the enum value | |
return (Flags & bitFlag ) != 0; | |
} | |
void Usage(const FHorizonPlayerParameters& param){ | |
INT32 bitFlag = static_cast<int32>((1 << (INT32)EHorizonPlayerSortType::Level) | | |
(1 << (INT32)EHorizonPlayerSortType::Speed)); // 10 | |
bool b1 = HasFlag(param.PlayerSortTypeFlags, EHorizonPlayerSortType::Level); //true | |
bool b2 = HasFlag(param.PlayerSortTypeFlags, EHorizonPlayerSortType::Power); //false | |
bool b3 = HasFlag(param.PlayerSortTypeFlags, EHorizonPlayerSortType::Speed); //true | |
} |