Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/archoninteractive/swissarmylib
Collection of helpful utilities we use in our Unity projects.
https://github.com/archoninteractive/swissarmylib
automata events game-development gamedev gamedev-library object-pool optimization optimize performance pooling pushdown-automaton service-locator state-machine timers unity unity-library unity3d unity3d-plugin utilities
Last synced: about 2 months ago
JSON representation
Collection of helpful utilities we use in our Unity projects.
- Host: GitHub
- URL: https://github.com/archoninteractive/swissarmylib
- Owner: ArchonInteractive
- License: mit
- Archived: true
- Created: 2017-08-21T18:13:55.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-10-20T17:13:52.000Z (about 5 years ago)
- Last Synced: 2024-09-28T10:21:47.296Z (about 2 months ago)
- Topics: automata, events, game-development, gamedev, gamedev-library, object-pool, optimization, optimize, performance, pooling, pushdown-automaton, service-locator, state-machine, timers, unity, unity-library, unity3d, unity3d-plugin, utilities
- Language: C#
- Homepage:
- Size: 9.62 MB
- Stars: 190
- Watchers: 21
- Forks: 19
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
.. image:: https://raw.githubusercontent.com/ArchonInteractive/SwissArmyLib/master/logo.png
SwissArmyLib
============.. image:: https://ci.appveyor.com/api/projects/status/sapkbwkbl5ug901u/branch/master?svg=true
:alt: Build status
:target: https://ci.appveyor.com/project/Phault/swissarmylib/branch/master.. image:: https://readthedocs.org/projects/swissarmylib-docs/badge/?version=latest
:alt: Documentation Status
:target: http://swissarmylib-docs.readthedocs.io/en/latest/?badge=latest.. image:: https://api.bintray.com/packages/phault/SwissArmyLib/development/images/download.svg
:alt: Download
:target: https://bintray.com/phault/SwissArmyLib/development/_latestVersion#files`API Reference `_
----
About
-----**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.Features
--------* Events_
- Supports both interface and delegate listeners
- Can be prioritized to control call order
- Check out GlobalEvents_ if you need.. well.. global events.
* Timers_- Supports both scaled and unscaled time
- Optional arbitrary args to pass in
- Also uses interfaces for callbacks to avoid garbage
* Coroutines_- More performant alternative to Unity's coroutines with a very similar API.
* Automata_- `Finite State Machine`_
- `Pushdown Automaton`_* Pooling_
- Support for both arbitrary classes and GameObjects
- IPoolable_ interface for callbacks+ PoolableGroup_ component in case multiple IPoolable components needs to be notified
- Timed despawns
* `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`_
- An update loop maintained in managed space to avoid the `overhead of Native C++ --> Managed C# `_
- Useful for non-MonoBehaviours that needs to be part of the update loop
- Optional ManagedUpdateBehaviour_ class for easy usage* `Spatial Partitioning`_
- GC-friendly implementations of common space-partitioning systems
* `Resource Pool`_
- Generic and flexible resource pool (health, mana, energy etc.)
* Gravity
- Flexible gravitational system
- Useful for planet gravity, black holes, magnets and all that sort of stuff.* Misc
- BetterTime_
+ 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.- Shake
+ Useful for creating proper screen shake
- `Some collection types`_
- `Some useful attributes`_
+ ExecutionOrder_* Sets a default (or forces) an execution order for a MonoBehaviour
+ ReadOnly_
* Makes fields uninteractable in the inspector
- A few other tiny utilities
Download
~~~~~~~~
Binaries for the bleeding edge can be found `here `_.
Alternatively you can either `build it yourself `_ (very easily) or simply `copy the source code into your Unity project `_ and call it a day.License
~~~~~~~
`MIT `_ - Do whatever you want. :)Contributing
~~~~~~~~~~~~
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 `_.
.. _download: https://bintray.com/phault/SwissArmyLib/development/_latestVersion#files
.. _building: https://swissarmylib-docs.readthedocs.io/en/latest/Getting%20Started.html#building-the-source
.. _copysource: https://swissarmylib-docs.readthedocs.io/en/latest/Getting%20Started.html#method-2-copy-source.. _Events: https://swissarmylib-docs.readthedocs.io/en/latest/Events/Event.html
.. _GlobalEvents: https://swissarmylib-docs.readthedocs.io/en/latest/Events/GlobalEvents.html
.. _Timers: https://swissarmylib-docs.readthedocs.io/en/latest/Events/TellMeWhen.html
.. _Coroutines: https://swissarmylib-docs.readthedocs.io/en/latest/Coroutines/BetterCoroutines.html
.. _Automata: https://swissarmylib-docs.readthedocs.io/en/latest/Automata/index.html
.. _Finite State Machine: https://swissarmylib-docs.readthedocs.io/en/latest/Automata/Finite%20State%20Machine.html
.. _Pushdown Automaton: https://swissarmylib-docs.readthedocs.io/en/latest/Automata/Pushdown%20Automaton.html
.. _Pooling: https://swissarmylib-docs.readthedocs.io/en/latest/Pooling/index.html
.. _IPoolable: https://swissarmylib-docs.readthedocs.io/en/latest/Pooling/IPoolable.html
.. _PoolableGroup: https://swissarmylib-docs.readthedocs.io/en/latest/Pooling/PoolableGroup.html
.. _Service Locator: https://swissarmylib-docs.readthedocs.io/en/latest/Utils/Service%20Locator.html
.. _Managed Update Loop: https://swissarmylib-docs.readthedocs.io/en/latest/Events/ManagedUpdate.html
.. _ManagedUpdateBehaviour: https://swissarmylib-docs.readthedocs.io/en/latest/Events/ManagedUpdateBehaviour.html
.. _Spatial Partitioning: https://swissarmylib-docs.readthedocs.io/en/latest/Partitioning/index.html
.. _Resource Pool: https://swissarmylib-docs.readthedocs.io/en/latest/Resource%20System/index.html
.. _BetterTime: https://swissarmylib-docs.readthedocs.io/en/latest/Utils/BetterTime.html
.. _Some collection types: https://swissarmylib-docs.readthedocs.io/en/latest/Collections/index.html
.. _Some useful attributes: https://swissarmylib-docs.readthedocs.io/en/latest/Utils/Attributes/index.html
.. _ExecutionOrder: https://swissarmylib-docs.readthedocs.io/en/latest/Utils/Attributes/ExecutionOrder.html
.. _ReadOnly: https://swissarmylib-docs.readthedocs.io/en/latest/Utils/Attributes/ReadOnly.html