Code/Nodes/Core/Drive.cs
namespace Nodebox.Nodes {
[Description("Continuously writes to a property")]
[Tag("Core")]
[ExecutionContext.Writer]
[Hide]
public class Drive : Node {
public Drive() : base() {
Reference = null;
}
public Drive(Reference reference) : base() {
Reference = reference;
}
public override (List<Pin>, List<Pin>) InitialPins => (
[
Pin.New<object>("*").WithHideInput(true)
],
[]
);
public Reference Reference { get; set; }
public override void SetProperty(string name, object obj) {
if (name == nameof(Reference)) {
Reference = (Reference)obj;
}
}
}
[Hide]
// [Collection.IsPolymorphOf(typeof(Source))]
public class Drive<T> : Drive {
public Drive() : base() {
Reference = null;
}
public Drive(Reference<T> reference) : base() {
Reference = reference;
}
public override (List<Pin>, List<Pin>) InitialPins => (
[
Pin.New<T>("*").WithHideInput(true)
],
[]
);
public new Reference<T> Reference {
get => (Reference<T>)base.Reference;
set => base.Reference = value;
}
public override void SetProperty(string name, object obj) {
if (name == nameof(Reference)) {
Reference = (Reference<T>)obj;
}
}
}
}
namespace Nodebox.Execution {
using Nodebox.Nodes;
using static ExecutionContext;
public class DriveImplementation : Implementation {
public override Type Target => typeof(Drive);
public override void Evaluate(ExecutionContext context, Node node) {
if (!node.InputWires[0].Any()) { return; }
((Drive)node).Reference.Write(context.Store[node].GetInput<object>(0));
}
}
public class DriveImplementation<T> : Implementation {
public override Type Target => typeof(Drive<T>);
public override void Evaluate(ExecutionContext context, Node node) {
if (!node.InputWires[0].Any()) { return; }
((Drive<T>)node).Reference.Write(context.Store[node].GetInput<T>(0));
}
}
}