public Type GetActionType(ActionIdentifier actionId) { if (!TryGetActionType(actionId, out var type)) { throw new Exception("Unknown action"); } return(type); }
public virtual void AddHandler(ActionIdentifier actionId, ActionEventHandler handler) { if (!Handlers.TryGetValue(actionId, out var handlersList)) { handlersList = new List <ActionEventHandler>(); Handlers.Add(actionId, handlersList); } handlersList.Add(handler); }
public void Register(Type type, ActionIdentifier actionId) { if (!IAction.IsAction(type)) { return; } IAction.ActionRegistry = this; _actions[actionId] = type; }
public void HandleAction(Session session, ActionIdentifier actionId, IAction action) { if (Handlers.TryGetValue(actionId, out var handlersList)) { var eventArgs = new ActionEventArgs(actionId, action); foreach (var handler in handlersList) { handler?.Invoke(this, eventArgs); } } }
public bool TryGetAction(ActionIdentifier actionId, out IAction action) { if (TryGetActionType(actionId, out var type)) { action = type.GetConstructor(_emptyTypes).Invoke(_emptyObjects) as IAction; return(true); } action = null; return(false); }
public static ActionIdentifier[] GetActionIdentifiers(Type type) { ValidateGameAction(type); var attributes = type.GetCustomAttributes(typeof(ActionIdentifier), false); if (ActionRegistry != null) { ActionIdentifier[] result = new ActionIdentifier[1]; foreach (var att in (ActionIdentifier[])attributes) { if (ActionRegistry.Contains(att)) { result[0] = att; return(result); } } } return(attributes as ActionIdentifier[]); }
public virtual bool ContainsHandler(ActionIdentifier actionId) { return(Handlers.ContainsKey(actionId)); }
public void Remove(ActionIdentifier actionId) { _actions.Remove(actionId); }
public bool Contains(ActionIdentifier actionId) { return(_actions.ContainsKey(actionId)); }
public bool TryGetActionType(ActionIdentifier actionId, out Type type) { return(_actions.TryGetValue(actionId, out type)); }
public IAction GetAction(ActionIdentifier actionId) { return(GetActionType(actionId).GetConstructor(_emptyTypes).Invoke(_emptyObjects) as IAction); }
public ActionEventArgs(ActionIdentifier actionId, IAction action) { ActionId = actionId; Action = action; }