コード例 #1
0
ファイル: ActorMap.cs プロジェクト: waiyiptam/OpenRA
        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
ファイル: ActorMap.cs プロジェクト: waiyiptam/OpenRA
        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
ファイル: ActorMap.cs プロジェクト: voidAsterisk/OpenRA
 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
ファイル: TraitsInterfaces.cs プロジェクト: test71/OpenRA
        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
ファイル: UnitInfluence.cs プロジェクト: pdovy/OpenRA
 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
ファイル: ActorMap.cs プロジェクト: RobotCaleb/OpenRA
 public void UpdatePosition(Actor a, IOccupySpace ios)
 {
     RemovePosition(a, ios);
     addActorPosition.Add(a);
 }
コード例 #22
0
ファイル: ActorMap.cs プロジェクト: RobotCaleb/OpenRA
 public void RemovePosition(Actor a, IOccupySpace ios)
 {
     removeActorPosition.Add(a);
 }
コード例 #23
0
ファイル: ActorMap.cs プロジェクト: RobotCaleb/OpenRA
        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
ファイル: ActorMap.cs プロジェクト: RobotCaleb/OpenRA
 public void AddPosition(Actor a, IOccupySpace ios)
 {
     UpdatePosition(a, ios);
 }
コード例 #25
0
ファイル: ActorMap.cs プロジェクト: Berzeger/OpenRA
		public void AddPosition(Actor a, IOccupySpace ios)
		{
			addActorPosition.Add(a);
		}
コード例 #26
0
 public void RemovePosition(Actor a, IOccupySpace ios)
 {
     removeActorPosition.Add(a);
 }
コード例 #27
0
ファイル: ActorMap.cs プロジェクト: Berzeger/OpenRA
		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
ファイル: UnitInfluence.cs プロジェクト: comradpara/OpenRA
 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
ファイル: Tractable.cs プロジェクト: yaaaaa/Reloaded-Origins
 void INotifyCreated.Created(Actor self)
 {
     conditionManager = self.TraitOrDefault <ConditionManager>();
     positionable     = self.TraitOrDefault <IPositionable>();
     ios = self.TraitOrDefault <IOccupySpace>();
 }
コード例 #31
0
ファイル: ActorMap.cs プロジェクト: RunCraze/OpenRA
 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
ファイル: ActorMap.cs プロジェクト: Berzeger/OpenRA
		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
ファイル: UnitInfluence.cs プロジェクト: comradpara/OpenRA
 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
ファイル: ActorMap.cs プロジェクト: TiriliPiitPiit/OpenRA
 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
ファイル: ActorMap.cs プロジェクト: TiriliPiitPiit/OpenRA
 public void Update(Actor self, IOccupySpace unit)
 {
     Remove(self, unit);
     if (!self.IsDead()) Add(self, unit);
 }
コード例 #38
0
ファイル: ActorMap.cs プロジェクト: TiriliPiitPiit/OpenRA
 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
ファイル: ActorMap.cs プロジェクト: RobotCaleb/OpenRA
        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
ファイル: ActorMap.cs プロジェクト: Berzeger/OpenRA
		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 };
		}