An open API service indexing awesome lists of open source software.

https://github.com/dkozar/edriven

Unity3d event-driven framework
https://github.com/dkozar/edriven

Last synced: 7 months ago
JSON representation

Unity3d event-driven framework

Awesome Lists containing this project

README

          

h1. eDriven Framework

h1. Event-driven / asynchronous framework for "Unity3d":http://unity3d.com/.

h2. Author: "Danko Kozar":http://dankokozar.com

h2. Concept

* eDriven framework is the result of 10 years of programming experience, self-education and research.
* This framework turns Unity into an asynchronous system.
* It's inspired by RIA (Rich Internet Applications) frameworks, such as Apache Flex and other Actionscript and Javascript frameworks.
* The idea behind building a framework was to bring the event-driven (publish-subscribe type of) programming paradigm to Unity.
* There have been a number of libraries for Unity, but I decided to go with my own. That's because I wanted to build additional libraries upon my event-dispatching system and wanted the total control.
* .NET framework events were not appropriate.
* There are two parallel event-dispatching systems inside eDriven:
1) Signals
2) Events
* Signals are inspired by "Robert Penner's Signals":https://github.com/robertpenner/as3-signals and are used for framework internals. Signals are faster than events because there's no instantiation involved. Also, your class isn't required to inherit some base (dispatcher) class.
* Events are more common and are inspired by "DOM Level 3 Events":http://www.w3.org/TR/DOM-Level-3-Events/. They support event bubbling, which is the important feature for GUI. The class that needs to dispatch events must inherit from EventDispatcher class.

h2. Event syntax

Publish:

MouseEvent me = new MouseEvent(MouseEvent.CLICK);

button.DispatchEvent(me);

Subscribe:

button.AddEventListener(MouseEvent.CLICK, ClickHandler);

private void ClickHandler(Event e) // eDriven.Core.Events.Event
{
Button button = e.Target as Button;
Debug.Log("Clicked button with label: " + button.Text);

// or
MouseEvent me = (MouseEvent)e; // we got to know the type of the Event
Point position = me.GlobalPosition;
Debug.Log("Clicked at position: " + position);
}

h2. Signal syntax

Publish:

Signal ClickSignal = new Signal();

ClickSignal.Emit("foo", "bar", 3);

Subscribe:

ClickSignal.Connect(ClickSlot);

private void ClickSlot(params object[] parameters)
{
// do something with parameters (we got to know the number of parameters and each one's type)
string first = (string)parameters[0]; // "foo"
string second = (string)parameters[1]; // "bar"
int third = (int)parameters[2]; // 3
}

h2. Core classes and utilities

eDriven framework contains a number of classes:

* SystemManager (emits system signals)
* SystemEventDispatcher (dispatches system events)
* MouseEventDispatcher (dispatches mouse events)
* KeyboardMapper (easy mapping for keyboard gestures)
* CallbackQueue (implements queuing of async operations)
* TaskQueue (sequences async operations)
* PowerMapper (maps strings to stuff)
* AudioPlayerMapper (maps strings to AudioPlayers)
* Cache (caches stuff)
* ObjectPool (prevents instantiation and garbage collection problems)
* Timer (handy source of timed events)
* HttpConnector (loads stuff from the web and triggers responders when finished)
* JavascriptConnector (talks with a host web page)

... and many others. They all serve the purpose of the framework: making the asynchronous, event-driven programming possible with Unity.

h2. Resources

* "eDriven Programming Manual":https://github.com/dkozar/public/blob/master/documents/eDriven_Manual_2-0.pdf (note: eDriven.Gui and eDriven.Animation also included)
* "AssetStore":http://u3d.as/content/adjungo/e-driven/308
* "Additional downloads":http://code.google.com/p/edriven/downloads/list
* "Videos":http://www.youtube.com/playlist?list=PL7EE340828F962941
* "Unity Forum Q&A thread":http://forum.unity3d.com/threads/148424-eDriven-Q-amp-A
* "Author's homepage":http://dankokozar.com
* "I’m @DankoKozar on Twitter":https://twitter.com/DankoKozar.