using System.Collections.Generic; namespace RayFire { // Event public class RFEvent { // Rigid Delegate & events public delegate void EventAction(RayfireRigid rigid); public event EventAction LocalEvent; // MeshRoot Rigid Delegate & events public delegate void EventActionMeshRoot(RayfireRigid rigid, RayfireRigid meshRoot); public event EventActionMeshRoot LocalEventMeshRoot; // RigidRoot Delegate & events public delegate void EventActionRoot(RFShard shard, RayfireRigidRoot root); public event EventActionRoot LocalEventRoot; // Local Rigid public void InvokeLocalEvent(RayfireRigid rigid) { if (LocalEvent != null) LocalEvent.Invoke(rigid); } // Local MeshRoot Rigid public void InvokeLocalEventMeshRoot(RayfireRigid rigid, RayfireRigid meshRoot) { if (LocalEventMeshRoot != null) LocalEventMeshRoot.Invoke(rigid, meshRoot); } // Local RigidRoot Shard public void InvokeLocalEventRoot(RFShard shard, RayfireRigidRoot rigidRoot) { if (LocalEventRoot != null) LocalEventRoot.Invoke(shard, rigidRoot); } } // Demolition Event public class RFDemolitionEvent : RFEvent { // Delegate & events public static event EventAction GlobalEvent; // Demolition event public static void InvokeGlobalEvent(RayfireRigid rigid) { if (GlobalEvent != null) GlobalEvent.Invoke(rigid); } } // Activation Event public class RFActivationEvent : RFEvent { // Delegate & events public static event EventAction GlobalEvent; public static event EventActionRoot GlobalEventRoot; // Activation event public static void InvokeGlobalEvent(RayfireRigid rigid) { if (GlobalEvent != null) GlobalEvent.Invoke(rigid); } // Activation event public static void InvokeGlobalEventRoot(RFShard shard, RayfireRigidRoot rigidRoot) { if (GlobalEventRoot != null) GlobalEventRoot.Invoke(shard, rigidRoot); } } // Restriction Event public class RFRestrictionEvent : RFEvent { // Delegate & events public static event EventAction GlobalEvent; // Restriction event public static void InvokeGlobalEvent(RayfireRigid rigid) { if (GlobalEvent != null) GlobalEvent.Invoke(rigid); } } // Shot Event public class RFShotEvent { // Delegate & events public delegate void EventAction(RayfireGun gun); public static event EventAction GlobalEvent; public event EventAction LocalEvent; // Global public static void InvokeGlobalEvent(RayfireGun gun) { if (GlobalEvent != null) GlobalEvent.Invoke(gun); } // Local public void InvokeLocalEvent(RayfireGun gun) { if (LocalEvent != null) LocalEvent.Invoke(gun); } } // Explosion Event public class RFExplosionEvent { // Delegate & events public delegate void EventAction(RayfireBomb bomb); public static event EventAction GlobalEvent; public event EventAction LocalEvent; // Global public static void InvokeGlobalEvent(RayfireBomb bomb) { if (GlobalEvent != null) GlobalEvent.Invoke(bomb); } // Local public void InvokeLocalEvent(RayfireBomb bomb) { if (LocalEvent != null) LocalEvent.Invoke(bomb); } } // Slice Event public class RFSliceEvent { // Delegate & events public delegate void EventAction(RayfireBlade blade); public static event EventAction GlobalEvent; public event EventAction LocalEvent; // Global public static void InvokeGlobalEvent(RayfireBlade blade) { if (GlobalEvent != null) GlobalEvent.Invoke(blade); } // Local public void InvokeLocalEvent(RayfireBlade blade) { if (LocalEvent != null) LocalEvent.Invoke(blade); } } // Connectivity Event public class RFConnectivityEvent { // Delegate & events public delegate void EventAction(RayfireConnectivity connectivity, List shards, List clusters); public static event EventAction GlobalEvent; public event EventAction LocalEvent; // Global public static void InvokeGlobalEvent(RayfireConnectivity connectivity, List shards, List clusters) { if (GlobalEvent != null) GlobalEvent.Invoke(connectivity, shards, clusters); } // Local public void InvokeLocalEvent(RayfireConnectivity connectivity, List shards, List clusters) { if (LocalEvent != null) LocalEvent.Invoke(connectivity, shards, clusters); } } }