public override object GetValue(NodePort port) { if (port.fieldName == "ValueOut") { int value = 0; NodePort valuesPort = GetInputPort("ValuesIn"); if (valuesPort.IsConnected) { int[] floats = valuesPort.GetInputValues <int>(); switch (Filter) { case FilterType.Sum: value = floats.Sum(); break; case FilterType.Max: value = Mathf.Max(floats); break; case FilterType.Min: value = Mathf.Min(floats); break; default: throw new ArgumentOutOfRangeException(); } } if (Negate) { value = -value; } return(value); } return(null); }
public int GetWeight() { NodePort bonusPort = GetInputPort(nameof(Bonus)); int bonus = bonusPort.IsConnected ? bonusPort.GetInputValues <int>().Sum() + 1 : Bonus; NodePort multiplierPort = GetInputPort(nameof(Multiplier)); int multiplier = multiplierPort.IsConnected ? multiplierPort.GetInputValues <int>().Aggregate((total, next) => total * next) : Multiplier; return(bonus * multiplier); }
public override object GetValue(NodePort port) { if (port.fieldName == "ValueOut") { NodePort valuePort = GetInputPort("ValueIn"); if (valuePort.IsConnected) { int[] value = valuePort.GetInputValues <int>(); return(value.Sum() > 0 ? FlattenValue : 0); } } return(null); }
private Tuple <float, int> GetUtility() { NodePort utilityPort = GetInputPort("Utilities"); float utility; if (utilityPort.IsConnected) { float[] floats = utilityPort.GetInputValues <float>(); switch (UtilityMerge) { case MergeType.Average: utility = floats.Average(); break; case MergeType.Max: utility = Mathf.Max(floats); break; case MergeType.Min: utility = Mathf.Min(floats); break; default: throw new ArgumentOutOfRangeException(); } } else { utility = Utilities; } NodePort bonusPort = GetInputPort("Bonus"); int bonus = bonusPort.IsConnected ? bonusPort.GetInputValues <int>().Sum() : Bonus; NodePort multiplierPort = GetInputPort("Multiplier"); int multiplier = multiplierPort.IsConnected ? multiplierPort.GetInputValues <int>() .Aggregate((total, next) => total * next) : Multiplier; return(new Tuple <float, int>(utility, (bonus + 1) * multiplier)); }
public int GetRank() { NodePort utilityPort = GetInputPort(nameof(Ranks)); if (utilityPort.IsConnected) { int[] ints = utilityPort.GetInputValues <int>(); switch (Select) { case MergeType.Average: return((int)ints.Average()); case MergeType.Max: return(Mathf.Max(ints)); case MergeType.Min: return(Mathf.Min(ints)); default: throw new ArgumentOutOfRangeException(); } } return(Ranks); }