示例#1
0
 internal void RemoveAll()
 {
     while (Head != null)
     {
         var system = Head;
         Head            = Head.Next;
         system.Previous = null;
         system.Next     = null;
     }
     Tail = null;
 }
示例#2
0
        internal void Add(SystemBase system)
        {
            if (Head == null)
            {
                Head = Tail = system;
                system.Next = system.Previous = null;
            }
            else
            {
                var node = Tail;
                for (; node != null; node = node.Previous)
                {
                    if (node.Priority <= system.Priority)
                    {
                        break;
                    }
                }

                if (node == Tail)
                {
                    Tail.Next = system;
                    system.Previous = Tail;
                    system.Next = null;
                    Tail = system;
                }
                else if (node == null)
                {
                    system.Next = Head;
                    system.Previous = null;
                    Head.Previous = system;
                    Head = system;
                }
                else
                {
                    system.Next = node.Next;
                    system.Previous = node;
                    node.Next.Previous = system;
                }
            }
        }
示例#3
0
        internal void Add(T system)
        {
            if (this.Head == null)
            {
                this.Tail = system;
                this.Head = system;
                SystemBase <T> arg_38_0 = system;
                SystemBase <T> arg_32_0 = system;
                T t = default(T);
                arg_32_0.Previous = t;
                arg_38_0.Next     = t;
                return;
            }
            T t2 = this.Tail;

            while (t2 != null && t2.Priority > system.Priority)
            {
                t2 = t2.Previous;
            }
            if (t2 == this.Tail)
            {
                this.Tail.Next  = system;
                system.Previous = this.Tail;
                system.Next     = default(T);
                this.Tail       = system;
                return;
            }
            if (t2 == null)
            {
                system.Next        = this.Head;
                system.Previous    = default(T);
                this.Head.Previous = system;
                this.Head          = system;
                return;
            }
            system.Next      = t2.Next;
            system.Previous  = t2;
            t2.Next.Previous = system;
            t2.Next          = system;
        }
示例#4
0
        internal void Add(SystemBase system)
        {
            if (Head == null)
            {
                Head        = Tail = system;
                system.Next = system.Previous = null;
            }
            else
            {
                var node = Tail;
                for (; node != null; node = node.Previous)
                {
                    if (node.Priority <= system.Priority)
                    {
                        break;
                    }
                }

                if (node == Tail)
                {
                    Tail.Next       = system;
                    system.Previous = Tail;
                    system.Next     = null;
                    Tail            = system;
                }
                else if (node == null)
                {
                    system.Next     = Head;
                    system.Previous = null;
                    Head.Previous   = system;
                    Head            = system;
                }
                else
                {
                    system.Next        = node.Next;
                    system.Previous    = node;
                    node.Next.Previous = system;
                }
            }
        }
示例#5
0
        internal void Remove(SystemBase system)
        {
            if (Head == system)
            {
                Head = Head.Next;
            }
            if (Tail == system)
            {
                Tail = Tail.Previous;
            }

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

            if (system.Next != null)
            {
                system.Next.Previous = system.Previous;
            }
            // N.B. Don't set system.next and system.previous to null because that will break the list iteration if node is the current node in the iteration.
        }
示例#6
0
        internal void Remove(SystemBase system)
        {
            if (Head == system)
            {
                Head = Head.Next;
            }
            if (Tail == system)
            {
                Tail = Tail.Previous;
            }

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

            if (system.Next != null)
            {
                system.Next.Previous = system.Previous;
            }
            // N.B. Don't set system.next and system.previous to null because that will break the list iteration if node is the current node in the iteration.
        }
示例#7
0
 public void SystemsUpdatedInPriorityOrderIfSameAsAddOrder()
 {
     var result = new List<SystemBase>();
     _system1 = new MockSystem((sys, action, time) => result.Add(sys));
     _system2 = new MockSystem((sys, action, time) => result.Add(sys));
     _game.AddSystem(_system1, 10);
     _game.AddSystem(_system2, 20);
     result = new List<SystemBase>();
     _game.Update(0.1);
     var expected = new List<SystemBase> {_system1, _system2};
     Assert.AreEqual(expected, result);
 }
示例#8
0
 public void RemoveSystemAndAddItAgainDontCauseInvalidLinkedList()
 {
     _system1 = new DummySystem();
     _system2 = new DummySystem();
     _game.AddSystem(_system1, 0);
     _game.AddSystem(_system2, 0);
     _game.RemoveSystem(_system1);
     _game.AddSystem(_system1, 0);
     _game.Update(0.1);
     var expected = new Tuple<SystemBase, SystemBase>(null, null);
     var results = new Tuple<SystemBase, SystemBase>(_system2.Previous, _system1.Next);
     Assert.AreEqual(expected, results);
 }
示例#9
0
文件: Game.cs 项目: tlwalker/Ash.NET
 /**
  * Remove a system from the game.
  *
  * @param system The system to remove from the game.
  */
 public void RemoveSystem(SystemBase system)
 {
     _systems.Remove(system);
     system.RemoveFromGame(this);
 }
示例#10
0
文件: Game.cs 项目: tlwalker/Ash.NET
 /**
  * Add a system to the game, and set its priority for the order in which the
  * systems are updated by the game loop.
  *
  * <p>The priority dictates the order in which the systems are updated by the game
  * loop. Lower numbers for priority are updated first. i.e. a priority of 1 is
  * updated before a priority of 2.</p>
  *
  * @param system The system to add to the game.
  * @param priority The priority for updating the systems during the game loop. A
  * lower number means the system is updated sooner.
  */
 public void AddSystem(SystemBase system, int priority)
 {
     system.Priority = priority;
     system.AddToGame(this);
     _systems.Add(system);
 }
示例#11
0
 private void AddSystemToGame <T>(SystemBase <T> system, int priority, ushort schedulingPattern)
 {
     system.Priority          = priority;
     system.SchedulingPattern = schedulingPattern;
     system.AddToGame(this);
 }
示例#12
0
 internal void RemoveAll()
 {
     while (Head != null)
     {
         var system = Head;
         Head = Head.Next;
         system.Previous = null;
         system.Next = null;
     }
     Tail = null;
 }