Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/juniordiscart/impossibleodds-toolkit
Unity C# toolkit to kickstart your project's codebase.
https://github.com/juniordiscart/impossibleodds-toolkit
csharp dependency-injection game-development http json json-parser photon photon-pun serialization serializer toolkit tools unity unity3d webrpc xml xml-parser xml-parsing xml-serialization
Last synced: about 2 months ago
JSON representation
Unity C# toolkit to kickstart your project's codebase.
- Host: GitHub
- URL: https://github.com/juniordiscart/impossibleodds-toolkit
- Owner: juniordiscart
- License: mit
- Created: 2019-08-21T20:48:48.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-07-23T14:54:21.000Z (5 months ago)
- Last Synced: 2024-07-23T17:18:20.435Z (5 months ago)
- Topics: csharp, dependency-injection, game-development, http, json, json-parser, photon, photon-pun, serialization, serializer, toolkit, tools, unity, unity3d, webrpc, xml, xml-parser, xml-parsing, xml-serialization
- Language: C#
- Homepage: https://www.impossible-odds.net/csharp-toolkit/
- Size: 15.3 MB
- Stars: 18
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ![Impossible Odds Logo][Logo] Impossible Odds - C# Toolkit
The Impossible Odds C# Toolkit for Unity is a set of carefully crafted tools to help you kickstart your project's codebase. It's designed with ease-of-use in mind, provide tools to keep your codebase clean and efficient. It combines several utilities and frameworks to help you think more about your game and gameplay design rather than code design.
You can expect to find the following features in this toolkit:
* [Core utilities](#core-utilities): extension and utility functions to speed-up programming work and reduce boiler-plate code.
* [Dependency injection](#dependency-injection): keep your code organized and clean by removing tightly coupled design patterns.
* [Runnables](#runnables): avoid the MonoBehaviour and GameObject tax if your classes only need the `Update` functionality.
* [State machines](#state-machines): use the state machine design pattern with a quick, easy and robust setup.
* [JSON](#json): serialize your data to and from the JSON data format, with support for saving type information.
* [XML](#xml): serialize your data to and from the XML data format using an easier alternative compared to C#'s built-in XML tools.
* [HTTP](#http): easily transform your objects for sending data to your server using Unity’s web requests.
* [Photon - WebRPC Extensions](#photon---webrpc-extensions): a convenience framework when sending requests over Photon's multiplayer network to your custom web server.## Core Utilities
In the overarching `ImpossibleOdds` namespace, you'll find many smaller, but useful functions to speed up your development. Some highlights of what you will find in here:
* Custom logging tool for which logging levels can be enabled/disabled.
* Clear out delegates of specific objects in a single line of code.
* Invoke actions with a null-check in a single line of code.
* Useful list extensions to write more concise code.
* Decorate enum values with a display name or translation key.
* Automatic script execution ordering based on execution dependencies between scripts.
* Object and string extensions to throw or log an error when null.All details and more about these little additions can be found [here][CoreUtilities].
## Dependency Injection
The `ImpossibleOdds.DependencyInjection` namespace contains a simple framework for adding the dependency injection methodology to your project. There are similar frameworks out there, packed with a ton more features and validation mechanisms. However, the goal of this particular implementation is to provide a more simple and streamlined setup that takes the essence of what dependency injection is all about.
Interested in integrating this in your project? Read more about how it works [here][DependencyInjection]!
## Runnables
The `ImpossibleOdds.Runnables` namespace provides the tools to ditch the GameObject and MonoBehaviour methodology for classes and data that require the `Update` functionality, but don't need anything more than that to function properly.
Read about how to get your scripts running [here][Runnables].
## State Machines
A state machine is a commonly used pattern in game development and comes in a wide variety of shapes, sizes and complexity. The `ImpossibleOdds.StateMachines` namespace contains a generic framework to get you started on setting up custom state machines.
To learn all about it's ins and outs, please read its documentation page [here][StateMachines].
## JSON
The `ImpossibleOdds.Json` namespace allows you to (de)serialize your data from/to the JSON data format. Unity already has a built-in `JsonUtility` class that allows you to serialize your objects. However, it lacks control in terms of which members and under what name you want to serialize them. On the other side, there's the widely popular Json.NET library which is packed with tons of features.
This implementation aims to be somewhere in between. The main advantages over Unity's `JsonUtility` class is that you can decide which members should be serialized (from public all the way to private) and under what name they are saved. Additionally, it also provides support for serializing type information, allowing you to keep the inheritance chain intact when deserializing your data.
Curious to know how it works? Get all the details [here][Json].
For more details about the data (de)serialization process itself, check the [Serialization][Serialization] section.
## XML
The `ImpossibleOdds.Xml` namespace provides tools to process your data to/from the XML data format. The C# language has a bunch of XML tools already available for you to use, but they have a few shortcomings such as only capable of picking up public members, or force you to use tedious classes such as the `DataContractSerializer` class.
The XML implementation in this toolkit aims to give a great amount of control which members of your classes and how they should get processed.
Get to know the XML tools and what they have to offer [here][Xml].
For more details about the data (de)serialization process, check the [Serialization][Serialization] section.
## HTTP
The `ImpossibleOdds.Http` namespace contains allows you to process your objects directly to requests and responses suitable to send over to your game sever as well as a helpful messenger system that takes care of performing callback operations on interested objects when a response is received.
To start communicating with your server, check the documentations page [here][Http].
For more details about the data (de)serialization process, check the [Serialization][Serialization] section.
## Photon - WebRPC Extensions
In the `ImpossibleOdds.Photon.WebRpc` namespace, you'll find an extension framework on Photon's multiplayer package, specifically for sending requests and receiving responses from your web server over the WebRPC feature.
For more information about this tool and how to get started, read on [here][PhotonWebRPC].
For more details about the data (de)serialization process, check the [Serialization][Serialization] section.
**Note**: this tool is only available when a valid Photon package is installed in your project. It is disabled otherwise.
## Editor Settings
This toolkit has a custom entry in your project settings panel. It currently allows you to adjust the following settings:
* Enable editor extensions: whether or not some context sensitive menu's are enabled or not.
* Editor logging level: enable/disable certain logging messages from being executed while playing in editor.
* Player logging level: enable/disable certain logging messages from being executed in the player build.
* Json serialization settings: define the default behaviour of the JSON serializer for certain Unity data types such as `Color`, `Vector3`, `Quaternion`, etc.
* Xml serialization settings: define the default behavior of the XML serializer for certain Unity data types such as `Color`, `Vector3`, `Quaternion`, etc.![Editor Settings][EditorSettings]
Most settings are saved using preprocessor directives in the ProjectSettings.asset file.
## Advanced
The sub-sections found below are most likely not sections you'll come in direct contact with unless you wish to build or expand upon the features provided in this toolkit.
### Serialization
The `ImpossibleOdds.Serialization` namespace contains a flexible data transformation framework, ideal for serialization purposes. It allows to define a blueprint for rules on how data should be processed and transformed from one format to the other. It is the backbone for the [JSON][Json] and [HTTP][Http] features found in this toolkit.
All details can be found [here][Serialization].
### Weblink
The `ImpossibleOdds.Weblink` tool provides a request-response mechanism along with automated processing of the data coming through it as well as providing a plethora of ways on getting notified when a message has completed. This removes the worry to manually keep track of request objects and waiting for their responses, as well as processing their data to the right format. The [HTTP][Http] and [Photon WebRPC][PhotonWebRPC] extension tools are practical implementations of the Weblink framework.
For more details, check its documentations page [here][Weblink].
## Contributing
Contributions are more than welcome! If you have ideas on how to improve the concepts or structure of this toolkit, have additional ideas for features to add, come across a bug, or want to let me know you're using this toolkit in your project, feel free to [get in touch][Contact]!
## Unity Version
Developed and tested on Unity 2019.4 LTS.
## License
This package is provided under the [MIT][License] license.
## Changelog
View the [update history][Changelog] of this package.
[License]: ./LICENSE.md
[Changelog]: ./CHANGELOG.md
[EditorSettings]: ./Docs/Images/EditorSettings.png
[CoreUtilities]: ./Docs/CoreUtilities.md
[DependencyInjection]: ./Docs/DependencyInjection.md
[Runnables]: ./Docs/Runnables.md
[Json]: ./Docs/Json.md
[Xml]: ./Docs/Xml.md
[Http]: ./Docs/Http.md
[PhotonWebRPC]: ./Docs/PhotonWebRPC.md
[StateMachines]: ./Docs/StateMachines.md
[Weblink]: ./Docs/Weblink.md
[Serialization]: ./Docs/Serialization.md
[Contact]: https://www.impossible-odds.net/support-request/
[Logo]: ./Docs/Images/ImpossibleOddsLogo.png