A game about forced loneliness, made by TACStudios
1namespace Unity.VisualScripting
2{
3 [UnitOrder(105)]
4 public abstract class Modulo<T> : Unit
5 {
6 /// <summary>
7 /// The dividend (or numerator).
8 /// </summary>
9 [DoNotSerialize]
10 [PortLabel("A")]
11 public ValueInput dividend { get; private set; }
12
13 /// <summary>
14 /// The divisor (or denominator).
15 /// </summary>
16 [DoNotSerialize]
17 [PortLabel("B")]
18 public ValueInput divisor { get; private set; }
19
20 /// <summary>
21 /// The remainder of the division of dividend and divison (numerator / denominator).
22 /// </summary>
23 [DoNotSerialize]
24 [PortLabel("A % B")]
25 public ValueOutput remainder { get; private set; }
26
27 [DoNotSerialize]
28 protected virtual T defaultDivisor => default(T);
29
30 [DoNotSerialize]
31 protected virtual T defaultDividend => default(T);
32
33 protected override void Definition()
34 {
35 dividend = ValueInput(nameof(dividend), defaultDividend);
36 divisor = ValueInput(nameof(divisor), defaultDivisor);
37 remainder = ValueOutput(nameof(remainder), Operation).Predictable();
38
39 Requirement(dividend, remainder);
40 Requirement(divisor, remainder);
41 }
42
43 public abstract T Operation(T divident, T divisor);
44
45 public T Operation(Flow flow)
46 {
47 return Operation(flow.GetValue<T>(dividend), flow.GetValue<T>(divisor));
48 }
49 }
50}