< Dice
Difference between revisions of "Dice/DiceFunctionAttribute"
From DiceRoller Documentation
(Created page with "{{APIdoc|DiceFunctionAttribute Class}} An attribute that can be applied to methods which denotes the method is a valid FunctionCallback. The Dice/F...") |
|||
Line 37: | Line 37: | ||
== Remarks == | == Remarks == | ||
This attribute can be applied to a callback to mark it as a dice function. In addition to using the attribute, the type containing the decorated methods must be registered via [[Dice/FunctionRegistry/RegisterType|FunctionRegistry.RegisterType]]. This attribute should only ever be applied to public methods whose signature matches [[Dice/FunctionCallback|FunctionCallback]]. | This attribute can be applied to a callback to mark it as a dice function. In addition to using the attribute, the type containing the decorated methods must be registered via [[Dice/FunctionRegistry/RegisterType|FunctionRegistry.RegisterType]]. This attribute should only ever be applied to public methods whose signature matches [[Dice/FunctionCallback|FunctionCallback]]. | ||
+ | |||
+ | == Examples == | ||
+ | The following example demonstrates using DiceFunctionAttribute to register two dice functions, and then registering the type containing those functions. | ||
+ | <syntaxhighlight lang="C#"> | ||
+ | using System; | ||
+ | using System.Collections.Generic; | ||
+ | using Dice; | ||
+ | |||
+ | class Sample | ||
+ | { | ||
+ | public static void Main() | ||
+ | { | ||
+ | FunctionRegistry.RegisterType(typeof(Sample)); | ||
+ | var result = Roller.Roll("b(1d6.a())"); | ||
+ | Console.WriteLine(result.Value); // prints 2, regardless of what the 1d6 rolled | ||
+ | } | ||
+ | |||
+ | [DiceFunction("a", Scope = FunctionScope.Roll)] | ||
+ | public static void A(FunctionContext context) | ||
+ | { | ||
+ | context.Value = 1; | ||
+ | context.Values = new List<DieResult>() | ||
+ | { | ||
+ | new DieResult() { DieType = DieType.Literal, NumSides = 0, Value = 1, Flags = 0 } | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | [DiceFunction("b")] | ||
+ | public static void B(FunctionContext context) | ||
+ | { | ||
+ | context.Value = context.Arguments[0].Value + 1; | ||
+ | context.Values = context.Arguments[0].Values; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> |
Latest revision as of 19:21, 12 April 2017
An attribute that can be applied to methods which denotes the method is a valid FunctionCallback. The FunctionRegistry.RegisterType function can be used to register types which contain methods marked with this attribute.
- Namespace: Dice
- Assembly: DiceRoller (in DiceRoller.dll)
Inheritance Hierarchy
System.Object
- System.Attribute
- Dice.DiceFunctionAttribute
Syntax
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class DiceFunctionAttribute : Attribute
Constructors
Name | Description | |
---|---|---|
DiceFunctionAttribute(String) | Constructs a new instance of DiceFunctionAttribute |
Properties
Name | Description | |
---|---|---|
Name | Gets the name of the dice function, which is not necessarily the same as the name of the method the attribute is attached to. | |
Scope | Gets or sets the scope of the dice function. | |
Timing | Gets or sets the timing of the dice function. |
Remarks
This attribute can be applied to a callback to mark it as a dice function. In addition to using the attribute, the type containing the decorated methods must be registered via FunctionRegistry.RegisterType. This attribute should only ever be applied to public methods whose signature matches FunctionCallback.
Examples
The following example demonstrates using DiceFunctionAttribute to register two dice functions, and then registering the type containing those functions.
using System;
using System.Collections.Generic;
using Dice;
class Sample
{
public static void Main()
{
FunctionRegistry.RegisterType(typeof(Sample));
var result = Roller.Roll("b(1d6.a())");
Console.WriteLine(result.Value); // prints 2, regardless of what the 1d6 rolled
}
[DiceFunction("a", Scope = FunctionScope.Roll)]
public static void A(FunctionContext context)
{
context.Value = 1;
context.Values = new List<DieResult>()
{
new DieResult() { DieType = DieType.Literal, NumSides = 0, Value = 1, Flags = 0 }
};
}
[DiceFunction("b")]
public static void B(FunctionContext context)
{
context.Value = context.Arguments[0].Value + 1;
context.Values = context.Arguments[0].Values;
}
}