Code Monkey home page Code Monkey logo

swissarmylib's Introduction

https://raw.githubusercontent.com/ArchonInteractive/SwissArmyLib/master/logo.png

SwissArmyLib

Build status Documentation Status Download

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
  • 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
  • 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.

swissarmylib's People

Contributors

phault avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.