• Stars
    star
    242
  • Rank 167,048 (Top 4 %)
  • Language
    C#
  • License
    MIT License
  • Created about 13 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Unity3d event-driven framework

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

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

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
}

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