Code/Nodes/Core/Source.cs
namespace Nodebox.Nodes {
[Description("Continuously writes to a property")]
[Tag("Core")]
[ExecutionContext.Reader]
[Hide]
public class Source : Node {
public Source() {
Reference = null;
}
public Source(Reference reference) {
Reference = reference;
}
public override (List<Pin>, List<Pin>) InitialPins => (
[],
[
Pin.New<object>("*"),
]
);
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 Source<T> : Source {
public Source() {
Reference = null;
}
public Source(Reference<T> reference) {
Reference = reference;
}
public override (List<Pin>, List<Pin>) InitialPins => (
[],
[
Pin.New<T>("*")
]
);
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 SourceImplementation : Implementation {
public override Type Target => typeof(Source);
public override void Evaluate(ExecutionContext context, Node node) {
context.Store[node].SetOutput(0, ((Source)node).Reference.Read());
}
}
public class SourceImplementation<T> : Implementation {
public override Type Target => typeof(Source<T>);
public override void Evaluate(ExecutionContext context, Node node) {
context.Store[node].SetOutput(0, ((Source<T>)node).Reference.Read());
}
}
}