示例#1
0
        public void AddInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv = c.Cell.ToMPos(map);
                if (!influence.Contains(uv))
                {
                    continue;
                }

                var layer = c.Cell.Layer == 0 ? influence : customInfluence[c.Cell.Layer];
                layer[uv] = new InfluenceNode {
                    Next = layer[uv], SubCell = c.SubCell, Actor = self
                };

                List <CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.Cell, out triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }

                if (CellUpdated != null)
                {
                    CellUpdated(c.Cell);
                }
            }
        }
示例#2
0
        public void AddInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv    = c.Cell.ToMPos(map);
                var layer = influence[c.Cell.Layer];
                if (!layer.Contains(uv))
                {
                    continue;
                }

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

                if (cellTriggerInfluence.TryGetValue(c.Cell, out var triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }

                CellUpdated?.Invoke(c.Cell);
            }
        }
示例#3
0
        public void RemoveInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv    = c.Cell.ToMPos(map);
                var layer = influence[c.Cell.Layer];
                if (!layer.Contains(uv))
                {
                    continue;
                }

                var temp = layer[uv];
                RemoveInfluenceInner(ref temp, self);
                layer[uv] = temp;

                if (cellTriggerInfluence.TryGetValue(c.Cell, out var triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }

                CellUpdated?.Invoke(c.Cell);
            }
        }
示例#4
0
 public void RemoveInfluence(Actor self, IOccupySpace ios)
 {
     foreach (var c in ios.OccupiedCells())
     {
         RemoveInfluenceInner(ref influence[c.First.X, c.First.Y], self);
     }
 }
示例#5
0
        public void RemoveInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv = c.Cell.ToMPos(map);
                if (!influence.Contains(uv))
                {
                    continue;
                }

                var layer = c.Cell.Layer == 0 ? influence : customInfluence[c.Cell.Layer];
                var temp  = layer[uv];
                RemoveInfluenceInner(ref temp, self);
                layer[uv] = temp;

                List <CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.Cell, out triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }

                if (CellUpdated != null)
                {
                    CellUpdated(c.Cell);
                }
            }
        }
示例#6
0
 public void AddToMaps(Actor self, IOccupySpace ios)
 {
     ActorMap.AddInfluence(self, ios);
     ActorMap.AddPosition(self, ios);
     ScreenMap.AddOrUpdate(self);
     //if(!self.Bounds.Size.IsEmpty)
     //ScreenMap.Add(self);
 }
示例#7
0
 public void Update(Actor self, IOccupySpace unit)
 {
     Remove(self, unit);
     if (!self.IsDead())
     {
         Add(self, unit);
     }
 }
示例#8
0
 public void RemoveFromMaps(Actor self, IOccupySpace ios)
 {
     ActorMap.RemoveInfluence(self, ios);
     ActorMap.RemovePosition(self, ios);
     ScreenMap.Remove(self);
     //if(!self.Bounds.Size.IsEmpty)
     //ScreenMap.Remove(self);
 }
示例#9
0
 public void RemoveInfluence(Actor self, IOccupySpace ios)
 {
     foreach (var c in ios.OccupiedCells())
     {
         var temp = influence[c.First];
         RemoveInfluenceInner(ref temp, self);
         influence[c.First] = temp;
     }
 }
示例#10
0
文件: World.cs 项目: gardolf/OpenRA
        public void UpdateMaps(Actor self, IOccupySpace ios)
        {
            if (!self.IsInWorld)
            {
                return;
            }

            ScreenMap.AddOrUpdate(self);
            ActorMap.UpdatePosition(self, ios);
        }
示例#11
0
 public void AddInfluence(Actor self, IOccupySpace ios)
 {
     foreach (var c in ios.OccupiedCells())
     {
         influence[c.First.X, c.First.Y] = new InfluenceNode {
             Next = influence[c.First.X, c.First.Y], SubCell = c.Second, Actor = self
         }
     }
     ;
 }
示例#12
0
 public void Remove(Actor self, IOccupySpace unit)
 {
     if (unit != null)
     {
         foreach (var c in unit.OccupiedCells())
         {
             RemoveInner(ref influence[c.First.X, c.First.Y], self);
         }
     }
 }
示例#13
0
        public void UpdateOccupiedCells(IOccupySpace ios)
        {
            if (CellUpdated == null)
            {
                return;
            }

            foreach (var c in ios.OccupiedCells())
            {
                CellUpdated(c.Cell);
            }
        }
示例#14
0
        /// <summary>
        /// 更新地图
        /// </summary>
        /// <param name="self"></param>
        /// <param name="ios"></param>
        public void UpdateMaps(Actor self, IOccupySpace ios)
        {
            if (!self.IsInWorld)
            {
                return;
            }
            //if (!self.Bounds.Size.IsEmpty)
            //ScreenMap.Update(self);

            ScreenMap.AddOrUpdate(self);
            ActorMap.UpdatePosition(self, ios);
        }
示例#15
0
 public void Add(Actor self, IOccupySpace unit)
 {
     if (unit != null)
     {
         foreach (var c in unit.OccupiedCells())
         {
             influence[c.First.X, c.First.Y] = new InfluenceNode {
                 next = influence[c.First.X, c.First.Y], subCell = c.Second, actor = self
             }
         }
     }
     ;
 }
示例#16
0
        public static int2 NearestCellTo(this IOccupySpace ios, int2 other)
        {
            var nearest         = ios.TopLeft;
            var nearestDistance = int.MaxValue;

            foreach (var cell in ios.OccupiedCells())
            {
                var dist = (other - cell.First).LengthSquared;
                if (dist < nearestDistance)
                {
                    nearest         = cell.First;
                    nearestDistance = dist;
                }
            }
            return(nearest);
        }
示例#17
0
        public void AddInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                if (!map.Contains(c.First))
                {
                    continue;
                }

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

                List <CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.First, out triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }
            }
        }
示例#18
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="self"></param>
        /// <param name="ios"></param>
        public void RemoveInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                var uv = c.First.ToMPos(map);
                if (!influence.Contains(uv))
                {
                    continue;
                }

                var temp = influence[uv];
                RemoveInfluenceInner(ref temp, self);
                influence[uv] = temp;
                List <CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.First, out triggers))
                {
                    foreach (var t in triggers)
                    {
                        t.Dirty = true;
                    }
                }
            }
        }
示例#19
0
 public void Add( Actor self, IOccupySpace unit )
 {
     foreach( var c in unit.OccupiedCells() )
         influence[ c.X, c.Y ] = new InfluenceNode { next = influence[ c.X, c.Y ], actor = self };
 }
示例#20
0
文件: World.cs 项目: gardolf/OpenRA
 public void AddToMaps(Actor self, IOccupySpace ios)
 {
     ActorMap.AddInfluence(self, ios);
     ActorMap.AddPosition(self, ios);
     ScreenMap.AddOrUpdate(self);
 }
示例#21
0
 public void UpdatePosition(Actor a, IOccupySpace ios)
 {
     RemovePosition(a, ios);
     addActorPosition.Add(a);
 }
示例#22
0
 public void RemovePosition(Actor a, IOccupySpace ios)
 {
     removeActorPosition.Add(a);
 }
示例#23
0
        public void RemoveInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                if (!map.Contains(c.First))
                    continue;

                var temp = influence[c.First];
                RemoveInfluenceInner(ref temp, self);
                influence[c.First] = temp;

                List<CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.First, out triggers))
                    foreach (var t in triggers)
                        t.Dirty = true;
            }
        }
示例#24
0
 public void AddPosition(Actor a, IOccupySpace ios)
 {
     UpdatePosition(a, ios);
 }
示例#25
0
		public void AddPosition(Actor a, IOccupySpace ios)
		{
			addActorPosition.Add(a);
		}
示例#26
0
 public void RemovePosition(Actor a, IOccupySpace ios)
 {
     removeActorPosition.Add(a);
 }
示例#27
0
		public void UpdatePosition(Actor a, IOccupySpace ios)
		{
			RemovePosition(a, ios);
			AddPosition(a, ios);
		}
示例#28
0
 public void AddPosition(Actor a, IOccupySpace ios)
 {
     addActorPosition.Add(a);
 }
示例#29
0
 public void Remove( Actor self, IOccupySpace unit )
 {
     if (unit != null)
         foreach (var c in unit.OccupiedCells())
             influence[c.X, c.Y].Remove(self);
 }
示例#30
0
 void INotifyCreated.Created(Actor self)
 {
     conditionManager = self.TraitOrDefault <ConditionManager>();
     positionable     = self.TraitOrDefault <IPositionable>();
     ios = self.TraitOrDefault <IOccupySpace>();
 }
示例#31
0
 public void RemoveInfluence(Actor self, IOccupySpace ios)
 {
     foreach (var c in ios.OccupiedCells())
         RemoveInfluenceInner(ref influence[c.First.X, c.First.Y], self);
 }
示例#32
0
		public void RemoveInfluence(Actor self, IOccupySpace ios)
		{
			foreach (var c in ios.OccupiedCells())
			{
				var temp = influence[c.First];
				RemoveInfluenceInner(ref temp, self);
				influence[c.First] = temp;
			}
		}
示例#33
0
 public void Add( Actor self, IOccupySpace unit )
 {
     foreach( var c in unit.OccupiedCells() )
         influence[c.X, c.Y].Add(self);
 }
示例#34
0
文件: World.cs 项目: gardolf/OpenRA
 public void RemoveFromMaps(Actor self, IOccupySpace ios)
 {
     ActorMap.RemoveInfluence(self, ios);
     ActorMap.RemovePosition(self, ios);
     ScreenMap.Remove(self);
 }
示例#35
0
 public void UpdatePosition(Actor a, IOccupySpace ios)
 {
     RemovePosition(a, ios);
     AddPosition(a, ios);
 }
示例#36
0
 public void Remove( Actor self, IOccupySpace unit )
 {
     if (unit != null)
         foreach (var c in unit.OccupiedCells())
             RemoveInner( ref influence[ c.First.X, c.First.Y ], self );
 }
示例#37
0
 public void Update(Actor self, IOccupySpace unit)
 {
     Remove(self, unit);
     if (!self.IsDead()) Add(self, unit);
 }
示例#38
0
 public void Add( Actor self, IOccupySpace unit )
 {
     if (unit != null)
         foreach( var c in unit.OccupiedCells() )
             influence[ c.First.X, c.First.Y ] = new InfluenceNode { next = influence[ c.First.X, c.First.Y ], subCell = c.Second, actor = self };
 }
示例#39
0
 public void AddPosition(Actor a, IOccupySpace ios)
 {
     UpdatePosition(a, ios);
 }
示例#40
0
        public void AddInfluence(Actor self, IOccupySpace ios)
        {
            foreach (var c in ios.OccupiedCells())
            {
                if (!map.Contains(c.First))
                    continue;

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

                List<CellTrigger> triggers;
                if (cellTriggerInfluence.TryGetValue(c.First, out triggers))
                    foreach (var t in triggers)
                        t.Dirty = true;
            }
        }
示例#41
0
 public void UpdatePosition(Actor a, IOccupySpace ios)
 {
     RemovePosition(a, ios);
     addActorPosition.Add(a);
 }
示例#42
0
		public void AddInfluence(Actor self, IOccupySpace ios)
		{
			foreach (var c in ios.OccupiedCells())
				influence[c.First] = new InfluenceNode { Next = influence[c.First], SubCell = c.Second, Actor = self };
		}