示例#1
0
 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;
        }
示例#3
0
 public abstract ThreadSafeQueue<RenderLine> Generate(Node workNode);
示例#4
0
 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)
 {
 }