SwissArmyLib is an attempt to create a collection of useful utilities with a focus on being performant. It is primarily intended for Unity projects, but feel free to rip parts out and use them for whatever you want.
A very important part in the design decisions of this library was to keep the garbage generation low. This means you will probably frown a little upon the use of interfaces for callbacks, instead of just using delicious delegates. It also means using the trusty old for loops for iterating through collections where possible.
There's a lot of libraries with some of the same features, but they're often walled off behind a restrictive or ambiguous license. This project is under the very permissive MIT license and we honestly do not care what you use it for.
- Supports both interface and delegate listeners
- Can be prioritized to control call order
- Check out GlobalEvents if you need.. well.. global events.
- Supports both scaled and unscaled time
- Optional arbitrary args to pass in
- Also uses interfaces for callbacks to avoid garbage
- More performant alternative to Unity's coroutines with a very similar API.
- Service Locator
- An implementation of the Service Locator pattern
- Aware of MonoBehaviours and how to work with them
- Supports scene-specific resolvers
- Supports both singletons and short-lived objects
- Singletons can be lazy loaded
- Managed Update Loop
- Spatial Partitioning
- GC-friendly implementations of common space-partitioning systems
- Resource Pool
- Generic and flexible resource pool (health, mana, energy etc.)
- Flexible gravitational system
- Useful for planet gravity, black holes, magnets and all that sort of stuff.
- A wrapper for Unity's static Time class that caches the values per frame to avoid the marshal overhead.
- About 4x faster than using the Time class directly, but we're talking miniscule differences here.
- Useful for creating proper screen shake
- Some collection types
- Some useful attributes
- A few other tiny utilities
MIT - Do whatever you want. :)
Pull requests are very welcome!
I might deny new features if they're too niche though, but it's still very much appreciated!
If you're looking for a way to contribute, please consider helping with the documentation at this repository.