public static ConditionSpec.Builder AddSkillLevelHandler <T, U>(this ConditionSpec.Builder builder,
                                                                    SkillId skill, SubDispatcherCallback <T, U> handler, T data1, U data2)
    {
        void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2);

        return(AddSkillLevelHandler(builder, skill, HandlerWithArgs));
    }
    public static ConditionSpec.Builder AddQueryHandler <T>(this ConditionSpec.Builder builder,
                                                            D20DispatcherKey query, SubDispatcherCallback <T> handler, T data)
    {
        void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data);

        return(AddQueryHandler(builder, query, HandlerWithArgs));
    }
    public static ConditionSpec.Builder AddHandler <T, U>(this ConditionSpec.Builder builder, DispatcherType type,
                                                          D20DispatcherKey key, SubDispatcherCallback <T, U> handler, T data1, U data2)
    {
        void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2);

        return(builder.AddHandler(type, key, HandlerWithArgs));
    }
    public static ConditionSpec.Builder AddHandler <T>(this ConditionSpec.Builder builder, DispatcherType type,
                                                       SubDispatcherCallback <T> handler, T data)
    {
        void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data);

        return(builder.AddHandler(type, HandlerWithArgs));
    }
    public static ConditionSpec.Builder AddSignalHandler <T, U>(this ConditionSpec.Builder builder,
                                                                D20DispatcherKey signal, SubDispatcherCallback <T, U> handler, T data1, U data2)
    {
        void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2);

        return(AddSignalHandler(builder, signal, HandlerWithArgs));
    }
 public static ConditionSpec.Builder AddSignalHandler(this ConditionSpec.Builder builder,
                                                      string signal, SubDispatcherCallback callback)
 {
     builder.AddHandler(DispatcherType.PythonSignal, (D20DispatcherKey)ElfHash.Hash(signal), callback);
     return(builder);
 }
 public static ConditionSpec.Builder AddSignalHandler(this ConditionSpec.Builder builder,
                                                      D20DispatcherKey signal, SubDispatcherCallback callback)
 {
     builder.AddHandler(DispatcherType.D20Signal, signal, callback);
     return(builder);
 }
 public static ConditionSpec.Builder AddQueryHandler(this ConditionSpec.Builder builder, string query,
                                                     SubDispatcherCallback callback)
 {
     builder.AddHandler(DispatcherType.PythonQuery, (D20DispatcherKey)ElfHash.Hash(query), callback);
     return(builder);
 }
 public static ConditionSpec.Builder AddQueryHandler(this ConditionSpec.Builder builder, D20DispatcherKey query,
                                                     SubDispatcherCallback callback)
 {
     builder.AddHandler(DispatcherType.D20Query, query, callback);
     return(builder);
 }
 public static ConditionSpec.Builder AddSkillLevelHandler(this ConditionSpec.Builder builder, SkillId skill,
                                                          SubDispatcherCallback callback)
 {
     builder.AddHandler(DispatcherType.SkillLevel, D20DispatcherKey.SKILL_APPRAISE + (int)skill, callback);
     return(builder);
 }