Skip to content

Instantly share code, notes, and snippets.

@kamend
Forked from stramit/CustomEvents.cs
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kamend/faee1c83e2dbeebd3a45 to your computer and use it in GitHub Desktop.
Save kamend/faee1c83e2dbeebd3a45 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using UnityEngine.Events;
// interface you implement in your MB to receive events
public interface ICustomHandler : IEventSystemHandler
{
void OnCustomCode(CustomEventData eventData);
}
// Custom data we will send via the event system
public class CustomEventData : BaseEventData
{
public string m_CustomData;
public CustomEventData(EventSystem eventSystem, string customData)
: base(eventSystem)
{
m_CustomData = customData;
}
}
// container class that holds the execution logic
// called by the event system to delecate the call to
// the intercea
public static class MyCustomEvents
{
// call that does the mapping
private static void Execute(ICustomHandler handler, BaseEventData eventData)
{
// The ValidateEventData makes sure the passed event data is of the correct type
handler.OnCustomCode (ExecuteEvents.ValidateEventData<CustomEventData> (eventData));
}
// helper to return the functor that should be invoked
public static ExecuteEvents.EventFunction<ICustomHandler> customEventHandler
{
get { return Execute; }
}
}
//Custom input module that can send the events
public class MyInputModule : BaseInputModule
{
// list of objects to invoke on
public GameObject[] m_TargetObjects;
// called each tick on active input module
public override void Process()
{
// if we don't have targets return
if (m_TargetObjects == null || m_TargetObjects.Length == 0)
return;
// for each target invoke our custom event
foreach (var target in m_TargetObjects)
ExecuteEvents.Execute (target, new CustomEventData (eventSystem, "Custom Data"), MyCustomEvents.customEventHandler);
}
}
// Class that implements the Handler
public class MyCustomMB : MonoBehaviour, ICustomHandler
{
public void OnCustomCode(CustomEventData eventData)
{
Debug.Log (eventData.m_CustomData);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment