Example #1
0
 internal void ReleaseCache()
 {
     while (_cacheTail != null)
     {
         var node  = _cacheTail;
         _cacheTail = node.Previous;
         node.Next = null;
         node.Previous = _tail;
         _tail = node;
     }
 }
Example #2
0
 internal Node Get()
 {
     if (_tail != null)
     {
         var node = _tail;
         _tail = _tail.Previous;
         node.Previous = null;
         return node;
     }
     else
     {
         return (Node)Activator.CreateInstance(_nodeType);
     }
 }
Example #3
0
        public void Add(Node node)
        {
            if (Head == null)
            {
                Head = Tail = node;
                node.Next = node.Previous = null;
            }
            else
            {
                Tail.Next = node;
                node.Previous = Tail;
                node.Next = null;
                Tail = node;
            }

            if (NodeAdded != null)
            {
                NodeAdded(node);
            }
        }
Example #4
0
        /**
         * Swaps the positions of two nodes in the list. Useful when sorting a list.
         */
        public void Swap(Node node1, Node node2)
        {
            if (node1.Previous == node2)
            {
                node1.Previous = node2.Previous;
                node2.Previous = node1;
                node2.Next = node1.Next;
                node1.Next  = node2;
            }
            else if (node2.Previous == node1)
            {
                node2.Previous = node1.Previous;
                node1.Previous = node2;
                node1.Next = node2.Next;
                node2.Next  = node1;
            }
            else
            {
                var temp = node1.Previous;
                node1.Previous = node2.Previous;
                node2.Previous = temp;
                temp = node1.Next;
                node1.Next = node2.Next;
                node2.Next = temp;
            }

            if(Head == node1)
            {
                Head = node2;
            }
            else if(Head == node2)
            {
                Head = node1;
            }

            if (Tail == node1)
            {
                Tail = node2;
            }
            else if (Tail == node2)
            {
                Tail = node1;
            }

            if (node1.Previous != null)
            {
                node1.Previous.Next = node1;
            }

            if(node2.Previous != null)
            {
                node2.Previous.Next = node2;
            }

            if (node1.Next != null)
            {
                node1.Next.Previous = node1;
            }

            if (node2.Next != null)
            {
                node2.Next.Previous = node2;
            }
        }
Example #5
0
        internal void RemoveAll()
        {
            while(Head != null)
            {
                var node = Head;
                Head = node.Next;
                node.Previous = null;
                node.Next = null;

                if (NodeRemoved != null)
                {
                    NodeRemoved(node);
                }
            }
            Tail = null;
        }
Example #6
0
        internal void Remove(Node node)
        {
            if (Head == node)
            {
                Head = Head.Next;
            }
            if (Tail == node)
            {
                Tail = Tail.Previous;
            }

            if (node.Previous != null)
            {
                node.Previous.Next = node.Next;
            }

            if (node.Next != null)
            {
                node.Next.Previous = node.Previous;
            }

            if (NodeRemoved != null)
            {
                NodeRemoved(node);
            }
            // N.B. Don't set node.next and node.previous to null because that will break the list iteration if node is the current node in the iteration.
        }
Example #7
0
 internal void Dispose(Node node)
 {
     node.Next = null;
     node.Previous = _tail;
     _tail = node;
 }
Example #8
0
 internal void Cache(Node node)
 {
     node.Previous = _cacheTail;
     _cacheTail = node;
 }
Example #9
0
 void OnNodeAdded(Node node)
 {
     var deathroesNode = (DeathThroesNode)node;
     if (deathroesNode.Death.deathSound != null)
         deathroesNode.Audio.Play(deathroesNode.Death.deathSound);
 }
Example #10
0
 public void CreateEntity()
 {
     _nodes = new NodeList();
     _tempNode = new Node();
 }
Example #11
0
 public void ClearEntity()
 {
     _nodes = null;
     _tempNode = null;
 }