/// <summary> /// Enumarable for dispatching all events on a eventIdentifier /// </summary> /// <typeparam name="T">The ForgeEventArgument Type</typeparam> /// <param name="eventIdentifier">The eventIdentifier</param> /// <param name="sender">The event sender object</param> /// <param name="args">The ForgeEventArguments</param> /// <returns> /// <see cref="DispatchEvents"/> /// </returns> public IEnumerable DispatchEvent <T>(string eventIdentifier, object sender, HammerEventArgs <T> args) { if (!_eventList.ContainsKey(eventIdentifier)) { yield break; } foreach (Event @event in _eventList[eventIdentifier]) { if (@event.GetType() != typeof(Event <T>)) { throw new ForgeCritical(Language.ForgeCriticalInvalidEventTypeInList + eventIdentifier); } Event <T> iEvent = (Event <T>)@event; if (iEvent.EventType == args.ArgumentType) { yield return(iEvent.Execute(sender, args)); } else { throw new ForgeCritical(Language.ForgeCriticalArgumentTypeDoesNotEqualEventType); } } }
/// <summary> /// Fires all events on the eventIdentifier /// </summary> /// <typeparam name="T">The ForgeEventArgs type and eventType</typeparam> /// <param name="eventIdentifier">The eventIdentifier</param> /// <param name="sender">The sender object</param> /// <param name="args"> /// The ForgeEventArgs. /// These will be passed to the eventHandler and used during execution. /// </param> /// <returns> /// The event results. /// <example> /// For example if you register an event to calculate movement speed and fire all movement speed event those events can increase or decrease the final movement speed number. /// Below is a code example of creating and registering an event for movementSpeed /// <code> /// //We first create a property which uses the Hammer event System to calculate it's value. /// public float MoveSpeed /// { /// get /// { /// return Hammer.DispatchEvents<float>("MOVEMENTSPEED", object, new HammerEventArgs<float>(moveSpeed)); /// } /// } /// /// private moveSpeed = 5; /// /// //Now we register an event to add 5 movement speed for 5 seconds. /// Event<float> speedEvent = new Event<float>("EVENT_IDENTIFIER", object); //Identifier is used to remove the speed Event. The object should be the same as the object used in the DispactEvents function. /// speedEvent.ForgeEvent += (obj, args) => args.EventItem + 5; //We create the handler function which adds 5 to the ForgeEventArguments. /// /// AftershockState.Hammer.RegisterEventForSeconds("MOVEMENTSPEED", speedEvent, 5); //Registers the newly created speed event for 5 seconds /// </code> /// After using this code the event results will result in having +5 added to it for 5 seconds. /// </example> /// </returns> public T DispatchEvents <T>(string eventIdentifier, object sender, HammerEventArgs <T> args) { foreach (T result in DispatchEvent(eventIdentifier, sender, args)) { args.EventItem = result; } return(args.EventItem); }