예제 #1
0
 void RemoveInner( ref InfluenceNode influenceNode, Actor toRemove )
 {
     if( influenceNode == null )
         return;
     else if( influenceNode.actor == toRemove )
         influenceNode = influenceNode.next;
     else
         RemoveInner( ref influenceNode.next, toRemove );
 }
예제 #2
0
        static void RemoveInfluenceInner(ref InfluenceNode influenceNode, Actor toRemove)
        {
            if (influenceNode == null)
            {
                return;
            }

            RemoveInfluenceInner(ref influenceNode.Next, toRemove);

            if (influenceNode.Actor == toRemove)
            {
                influenceNode = influenceNode.Next;
            }
        }
예제 #3
0
            public bool MoveNext()
            {
                while (node != null)
                {
                    Current = node.Actor;
                    node    = node.Next;
                    if (!Current.Disposed)
                    {
                        return(true);
                    }
                }

                return(false);
            }
예제 #4
0
 internal void AddInfluence(Actor a, IEnumerable <CPos> cells)
 {
     foreach (var c in cells)
     {
         var uv = c.ToMPos(map);
         if (influence.Contains(uv))
         {
             influence[uv] = new InfluenceNode {
                 Next = influence[uv], Actor = a
             }
         }
         ;
     }
 }
예제 #5
0
        void RemoveInner(ref InfluenceNode influenceNode, Actor toRemove)
        {
            if (influenceNode == null)
            {
                return;
            }
            else if (influenceNode.actor == toRemove)
            {
                influenceNode = influenceNode.next;
            }

            if (influenceNode != null)
            {
                RemoveInner(ref influenceNode.next, toRemove);
            }
        }
예제 #6
0
        public void AddInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv = c.First.ToMPos(map);
                if (!influence.Contains(uv))
                {
                    continue;
                }

                influence[uv] = new InfluenceNode {
                    Next = influence[uv], SubCell = c.Second, Actor = self
                };

                List <CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.First, out triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }
            }
        }
예제 #7
0
 public ActorsAtEnumerable(InfluenceNode node)
 {
     this.node = node;
 }
예제 #8
0
 public ActorsAtEnumerator(InfluenceNode node)
 {
     this.node = node;
     current   = null;
 }
예제 #9
0
        void RemoveInfluenceInner(ref InfluenceNode influenceNode, Actor toRemove)
        {
            if (influenceNode == null)
                return;

            if (influenceNode.Actor == toRemove)
                influenceNode = influenceNode.Next;

            if (influenceNode != null)
                RemoveInfluenceInner(ref influenceNode.Next, toRemove);
        }