Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1
Fast and memory efficient implementation of C#'s ISet for enums, storing data as bit masks
License
gilzoide/unity-enum-bitset
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Fast and memory efficient implementation of C#'sISet for enums, storing data as bit masks:
EnumBitSet32<T>: usesEnumBitMask32<T>as data, supporting enums with up to 32 values.EnumBitSet64<T>: usesEnumBitMask64<T>as data, supporting enums with up to 64 values.
Bit masks are readonly structs implementingIReadOnlySet for enums:
EnumBitMask32<T>: usesintas data, supporting enums with up to 32 values.EnumBitMask64<T>: useslongas data, supporting enums with up to 64 values.
All implementations support enums both with and without[Flags] attributes.
Conversions between enum values and integer types are non-boxing where possible by using unsafe utilities from Unity 2018+, .NET 5+ or .NET Core 3.0+
This package is available on theopenupm registry and can be installed using theopenupm-cli:
openupm add com.gilzoide.enum-bitsetOtherwise, you can install directly using theUnity Package Manager with the following URL:
https://github.com/gilzoide/unity-enum-bitset.git#1.1.0In Unity 2020+,EnumBitSets are serializable directly as generic classes.There's also a custom property drawer for selecting the containing enums:
usingSystem;usingUnityEngine;usingGilzoide.EnumBitSet;publicenumTestEnum{Zero,One,Two,Three}[Flags]publicenumTestEnumFlags{Zero=1<<0,One=1<<1,Two=1<<2,Three=1<<3}publicclassScriptWithBitSet:MonoBehaviour{publicEnumBitSet32<TestEnum>aBitset;publicEnumBitSet64<TestEnumFlags>anotherBitset;}
In Unity 2019 and earlier, create non-generic classes thatinherit from the generic ones:
usingSystem;usingUnityEngine;usingGilzoide.EnumBitSet;publicenumTestEnum{Zero,One,Two,Three}[Flags]publicenumTestEnumFlags{Zero=1<<0,One=1<<1,Two=1<<2,Three=1<<3}[Serializable]publicclassTestEnumBitSet32:EnumBitSet32<TestEnum>{}[Serializable]publicclassTestEnumFlagsBitSet64:EnumBitSet64<TestEnumFlags>{}publicclassScriptWithBitSet:MonoBehaviour{publicEnumBitSet32<TestEnum>aBitset;publicEnumBitSet64<TestEnumFlags>anotherBitset;}
For the custom Property Drawer, the same applies.Create a class that inherits fromEnumBitSetPropertyDrawer:
usingUnityEditor;usingGilzoide.EnumBitSet.Editor;[CustomPropertyDrawer(typeof(TestEnumBitSet32))]publicclassTestEnumBitSet32PropertyDrawer:EnumBitSetPropertyDrawer{}
About
Fast and memory efficient implementation of C#'s ISet for enums, storing data as bit masks
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
