/eDriven

Unity3D Event Driven Framework

Primary LanguageC#MIT LicenseMIT

eDriven Framework

Event-driven / asynchronous framework for Unity3d.

Author: Danko Kozar

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 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. They support event bubbling, which is the important feature for GUI. The class that needs to dispatch events must inherit from EventDispatcher class.

Event syntax

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);
}

Signal syntax

button.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)
}

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.

Resources