public WorkGenerator(ref ThreadSafeQueue<Node> queueToAddWorkTo, ref ThreadSafeQueue<RenderLine> renderLines, ref Tuple<int, int, int> blockOffset, Node[] block) { _block = block; _blockOffset = blockOffset; _clientWorkQueue = queueToAddWorkTo; _clientRenderQueue = renderLines; }
public override ThreadSafeQueue<RenderLine> Generate(Node workNode) { Node child; int index = 0; foreach (int tt in workNode.Children) { child = _block[tt]; child.Activation += workNode.ChildrenLines[index].strength; //don't need to reload nodes that are already in queue if (!child.IsLoaded) { //experimental learning with child weights, doesn't work //workNode.ChildrenLines[count].strength = Math.Min(1, (float)Math.Tan(workNode.ChildrenLines[count].strength)); if (child.Activation >= 1) { child.IsLoaded = true; //add activated children to work queue _clientWorkQueue.Enqueue(child); //add lines to be rendered _clientRenderQueue.Enqueue(workNode.ChildrenLines[index]); } } index++; } workNode.Activation = 0; workNode.IsLoaded = false; return _clientRenderQueue; }
public abstract ThreadSafeQueue<RenderLine> Generate(Node workNode);
public void Connect(Node n, Node p, float weight) { n.Children.Add(p.Offset); n.ChildrenLines.Add( new RenderLine( (n.X * blockw) + (blockOffset.Item1), (n.Y * blockh) + (blockOffset.Item2), (n.Z * blockd) + (blockOffset.Item3), (p.X * blockw) + (blockOffset.Item1), (p.Y * blockh) + (blockOffset.Item2), (p.Z * blockd) + (blockOffset.Item3), 1 / (blockOffset.Item1 + 1), 1 / (blockOffset.Item2 + 1), 1 / (blockOffset.Item3 + 1), weight ) ); }
public FiringWorkGenerator(ref ThreadSafeQueue<Node> workQueue, ref ThreadSafeQueue<RenderLine> renderQueue, Tuple<int, int, int> blockOffset, Node[] block) : base(ref workQueue, ref renderQueue, ref blockOffset, block) { }