/// <summary> /// Defines a game object event. /// </summary> /// <typeparam name="T">The type of the event arguments.</typeparam> /// <param name="name">The name.</param> /// <param name="category">The category.</param> /// <param name="description">The description.</param> /// <param name="defaultEventArgs"> /// The default event arguments that are used when the event is raised without custom event /// arguments. /// </param> /// <returns>The event metadata.</returns> /// <remarks> /// Game object events must be defined using this method before they can be used. Events are /// identified by name and type. If an event with the given <paramref name="name"/> and type /// <typeparamref name="T"/> has already been defined, the metadata of the existing event is /// returned and the other parameters (<paramref name="category"/>, /// <paramref name="description"/> and <paramref name="defaultEventArgs"/>) are ignored! /// </remarks> /// <exception cref="ArgumentNullException"> /// <paramref name="name"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="name"/> must not be an empty string. /// </exception> public static GameEventMetadata <T> CreateEvent <T>(string name, string category, string description, T defaultEventArgs) where T : EventArgs { if (name == null) { throw new ArgumentNullException("name"); } if (name.Length == 0) { throw new ArgumentException("Name must not be an empty string.", "name"); } GameEventMetadata <T> metadata; if (GameEventMetadata <T> .Events.TryGet(name, out metadata)) { // Nothing to do - event was already defined. return(metadata); } Debug.Assert(NextEventId == EventMetadata.Count); // Create and add new metadata. metadata = new GameEventMetadata <T>(name, NextEventId) { Category = category, Description = description, DefaultEventArgs = defaultEventArgs, }; EventMetadata.Add(metadata); NextEventId++; return(metadata); }
//-------------------------------------------------------------- #region Creation and Cleanup //-------------------------------------------------------------- /// <summary> /// Initializes a new instance of the <see cref="GameEvent{T}"/> struct. /// </summary> /// <param name="owner">The game object that owns this event.</param> /// <param name="metadata">The metadata.</param> internal GameEvent(GameObject owner, GameEventMetadata <T> metadata) { Debug.Assert(owner != null, "Owner must not be null."); Debug.Assert(metadata != null, "Metadata must not be null."); _owner = owner; _metadata = metadata; }
/// <summary> /// Gets the event for the given metadata. /// </summary> /// <typeparam name="T">The type of the property value.</typeparam> /// <param name="metadata">The metadata of the property.</param> /// <returns>The property</returns> /// <exception cref="ArgumentNullException"> /// <paramref name="metadata"/> is <see langword="null"/>. /// </exception> public GameEvent <T> Get <T>(GameEventMetadata <T> metadata) where T : EventArgs { if (metadata == null) { throw new ArgumentNullException("metadata"); } return(new GameEvent <T>(Owner, metadata)); }
/// <summary> /// Adds an event for the given metadata. /// </summary> /// <typeparam name="T">The type of the event arguments.</typeparam> /// <param name="metadata">The metadata of the event.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="metadata"/> is <see langword="null"/>. /// </exception> public void Add <T>(GameEventMetadata <T> metadata) where T : EventArgs { if (metadata == null) { throw new ArgumentNullException("metadata"); } Add <T>(metadata.Id); }
public bool Remove <T>(string name) where T : EventArgs { GameEventMetadata <T> metadata = GetMetadataChecked <T>(name); return(Remove(metadata.Id)); }
public void Add <T>(string name) where T : EventArgs { GameEventMetadata <T> metadata = GetMetadataChecked <T>(name); Add <T>(metadata.Id); }