Пример #1
0
        /// <summary>
        /// Удалить активный объект с карты
        /// </summary>
        /// <param name="Id">Идентификатор объекта</param>
        public void RemoveActiveObject(Guid Id)
        {
            MapActiveObjectState ActiveObject = GetActiveObjectById(Id);

            DeAttachActiveObject(ActiveObject);
            ActiveObjects.Remove(Id);
        }
Пример #2
0
        /// <summary>
        /// Добавить новый объект на карту
        /// </summary>
        /// <param name="ActiveObject">Активный объект</param>
        /// <param name="Position">Координаты левой верхней точки</param>
        /// <param name="Id">Идентификатор (для десериализации)</param>
        /// <returns>Идентификатор</returns>
        public Guid AddActiveObject(MapActiveObject ActiveObject, MapPoint Position)
        {
            if (ActiveObject == null)
            {
                throw new ArgumentNullException("ActiveObject", "ActiveObject cannot be null");
            }

            if (Position.Level >= this.LevelsCount)
            {
                throw new ArgumentOutOfRangeException("Position.Level", "Level cannot be out of map");
            }

            if ((Position.X + ActiveObject.Tile.Size.Width > this.Size.Width) ||
                (Position.Y + ActiveObject.Tile.Size.Height > this.Size.Height))
            {
                throw new ArgumentOutOfRangeException("Position", "Position cannot be out of map");
            }

            if (!CheckPlaceForActiveObject(ActiveObject, Position))
            {
                throw new ArgumentException("ActiveObject", "ActiveObject cannot be located to this Position");
            }

            Guid Id = Guid.NewGuid();

            MapActiveObjectState state = new MapActiveObjectState(ActiveObject, Position);

            state.Destroying += (sender, args) => { OnActiveObjectDestroying(args.ActiveObject); };
            state.Destroyed  += (sender, args) => { OnActiveObjectDestroyed(args.ActiveObject); };
            this.ActiveObjects.Add(Id, state);

            AttachActiveObject(state, Position);

            return(Id);
        }
Пример #3
0
 /// <summary>
 /// Вызов события разрушения активного объекта
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 protected void OnActiveObjectDestroying(MapActiveObjectState ActiveObject)
 {
     DeAttachActiveObject(ActiveObject);
     if (ActiveObjectDestroying != null)
     {
         ActiveObjectDestroying(this, new MapActiveObjectEventArgs(ActiveObject));
     }
 }
Пример #4
0
 /// <summary>
 /// "Отклеить" объект от карты
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 private void DeAttachActiveObject(MapActiveObjectState ActiveObject)
 {
     for (UInt16 x = ActiveObject.Position.X; x < ActiveObject.Position.X + ActiveObject.Size.Width; x++)
     {
         for (UInt16 y = ActiveObject.Position.Y; y < ActiveObject.Position.Y + ActiveObject.Size.Height; y++)
         {
             Levels[ActiveObject.Position.Level].Cells[x, y].RemoveActiveObject(ActiveObject);
         }
     }
 }
Пример #5
0
 /// <summary>
 /// "Приклеить" объект к карте
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 /// <param name="Position">Координаты левой верхней точки</param>
 private void AttachActiveObject(MapActiveObjectState ActiveObject, MapPoint Position)
 {
     ActiveObject.Locate(Position);
     for (UInt16 x = ActiveObject.Position.X; x < ActiveObject.Position.X + ActiveObject.Size.Width; x++)
     {
         for (UInt16 y = ActiveObject.Position.Y; y < ActiveObject.Position.Y + ActiveObject.Size.Height; y++)
         {
             Levels[Position.Level].Cells[x, y].AddActiveObject(ActiveObject);
         }
     }
 }
Пример #6
0
        /// <summary>
        /// Идентификатор размещения активного объекта
        /// </summary>
        /// <param name="ActiveObject">Активный объект</param>
        /// <returns>Идентифкатор размещения</returns>
        public Guid GetIdOfActiveObject(MapActiveObjectState ActiveObject)
        {
            if (ActiveObject == null)
            {
                throw new ArgumentNullException("ActiveObject", "ActiveObject cannot be null");
            }
            if (!ActiveObjects.ContainsValue(ActiveObject))
            {
                throw new ArgumentException("ActiveObject", "This ActiveObject not found");
            }
            Guid id = ActiveObjects.Where(ao => ao.Value == ActiveObject).FirstOrDefault().Key;

            return(id);
        }
Пример #7
0
 /// <summary>
 /// Вызов события разрушения активного объекта
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 protected void OnActiveObjectDestroyed(MapActiveObjectState ActiveObject)
 {
     if (ActiveObject.ActiveObject == null)
     {
         RemoveActiveObject(GetIdOfActiveObject(ActiveObject));
     }
     else
     {
         if (!CheckPlaceForActiveObject(ActiveObject.ActiveObject, ActiveObject.Position))
         {
             throw new OverflowException("New ActiveObject cannot be located to place of destroyed old ActiveObject");
         }
         AttachActiveObject(ActiveObject, ActiveObject.Position);
     }
     if (ActiveObjectDestroyed != null)
     {
         ActiveObjectDestroyed(this, new MapActiveObjectEventArgs(ActiveObject));
     }
 }
        /// <summary>
        /// Удалить активный объект
        /// </summary>
        /// <param name="ActiveObject">Активный объект</param>
        public void RemoveActiveObject(MapActiveObjectState ActiveObject)
        {
            if (ActiveObject == null)
            {
                return;
            }
            if (ActiveObjects == null)
            {
                return;
            }
            if (!ActiveObjects.Contains(ActiveObject))
            {
                return;
            }
            List <MapActiveObjectState> objects = new List <MapActiveObjectState>(ActiveObjects);

            objects.Remove(ActiveObject);
            ActiveObjects = objects.ToArray();
        }
Пример #9
0
        /// <summary>
        /// Переместить объект в другое место карты
        /// </summary>
        /// <param name="Id">Идентификатор объекта</param>
        /// <param name="Position">Координаты левой верхней точки</param>
        public void RelocateActiveObject(Guid Id, MapPoint Position)
        {
            MapActiveObjectState ActiveObject = GetActiveObjectById(Id);

            if (Position.Level >= this.LevelsCount)
            {
                throw new ArgumentOutOfRangeException("Position.Level", "Position.Level cannot be out of map");
            }

            if ((Position.X + ActiveObject.Size.Width >= this.Size.Width) ||
                (Position.Y + ActiveObject.Size.Height >= this.Size.Height))
            {
                throw new ArgumentOutOfRangeException("Position", "Position cannot be out of map");
            }

            if (!CheckPlaceForActiveObject(ActiveObject.ActiveObject, Position))
            {
                throw new ArgumentException("ActiveObject", "ActiveObject cannot be located to this Position");
            }

            DeAttachActiveObject(ActiveObject);
            AttachActiveObject(ActiveObject, Position);
        }
Пример #10
0
        /// <summary>
        /// Добавить новый объект на карту
        /// </summary>
        /// <param name="ActiveObjectState">Активный объект</param>
        /// <param name="Position">Координаты левой верхней точки</param>
        /// <param name="Id">Идентификатор (для десериализации)</param>
        /// <returns>Получилось ли добавить</returns>
        public bool AddActiveObject(MapActiveObjectState ActiveObjectState, Guid Id)
        {
            if (ActiveObjectState == null)
            {
                throw new ArgumentNullException("ActiveObjectState", "ActiveObjectState cannot be null");
            }

            if (ActiveObjects.ContainsKey(Id))
            {
                return(false);
            }

            if (ActiveObjectState.Position.Level >= this.LevelsCount)
            {
                throw new ArgumentOutOfRangeException("Position.Level", "Level cannot be out of map");
            }

            if ((ActiveObjectState.Position.X + ActiveObjectState.Tile.Size.Width >= this.Size.Width) ||
                (ActiveObjectState.Position.Y + ActiveObjectState.Tile.Size.Height >= this.Size.Height))
            {
                throw new ArgumentOutOfRangeException("Position", "Position cannot be out of map");
            }

            if (!CheckPlaceForActiveObject(ActiveObjectState.ActiveObject, ActiveObjectState.Position))
            {
                throw new ArgumentException("ActiveObject", "ActiveObject cannot be located to this Position");
            }

            ActiveObjectState.Destroying += (sender, args) => { OnActiveObjectDestroying(args.ActiveObject); };
            ActiveObjectState.Destroyed  += (sender, args) => { OnActiveObjectDestroyed(args.ActiveObject); };
            this.ActiveObjects.Add(Id, ActiveObjectState);

            AttachActiveObject(ActiveObjectState, ActiveObjectState.Position);

            return(true);
        }
Пример #11
0
        /// <summary>
        /// Добавить активный объект
        /// </summary>
        /// <param name="ActiveObject">Активный объект</param>
        public void AddActiveObject(MapActiveObjectState ActiveObject)
        {
            if (ActiveObject == null)
            {
                return;
            }
            List <MapActiveObjectState> objects;

            if (ActiveObjects == null)
            {
                objects = new List <MapActiveObjectState>();
                objects.Add(ActiveObject);
            }
            else
            {
                if (ActiveObjects.Contains(ActiveObject))
                {
                    return;
                }
                objects = new List <MapActiveObjectState>(ActiveObjects);
                objects.Add(ActiveObject);
            }
            ActiveObjects = objects.ToArray();
        }
Пример #12
0
 /// <summary>
 /// Вызов события разрушения активного объекта
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 protected void OnActiveObjectDestroying(MapActiveObjectState ActiveObject)
 {
     DeAttachActiveObject(ActiveObject);
     if (ActiveObjectDestroying != null)
         ActiveObjectDestroying(this, new MapActiveObjectEventArgs(ActiveObject));
 }
Пример #13
0
 /// <summary>
 /// Вызов события разрушения активного объекта
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 protected void OnActiveObjectDestroyed(MapActiveObjectState ActiveObject)
 {
     if (ActiveObject.ActiveObject == null)
     {
         RemoveActiveObject(GetIdOfActiveObject(ActiveObject));
     }
     else
     {
         if (!CheckPlaceForActiveObject(ActiveObject.ActiveObject, ActiveObject.Position))
         {
             throw new OverflowException("New ActiveObject cannot be located to place of destroyed old ActiveObject");
         }
         AttachActiveObject(ActiveObject, ActiveObject.Position);
     }
     if (ActiveObjectDestroyed != null)
         ActiveObjectDestroyed(this, new MapActiveObjectEventArgs(ActiveObject));
 }
Пример #14
0
 /// <summary>
 /// Идентификатор размещения активного объекта
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 /// <returns>Идентифкатор размещения</returns>
 public Guid GetIdOfActiveObject(MapActiveObjectState ActiveObject)
 {
     if (ActiveObject == null) throw new ArgumentNullException("ActiveObject", "ActiveObject cannot be null");
     if (!ActiveObjects.ContainsValue(ActiveObject)) throw new ArgumentException("ActiveObject", "This ActiveObject not found");
     Guid id = ActiveObjects.Where(ao => ao.Value == ActiveObject).FirstOrDefault().Key;
     return id;
 }
Пример #15
0
        /// <summary>
        /// Добавить новый объект на карту
        /// </summary>
        /// <param name="ActiveObjectState">Активный объект</param>
        /// <param name="Position">Координаты левой верхней точки</param>
        /// <param name="Id">Идентификатор (для десериализации)</param>		
        /// <returns>Получилось ли добавить</returns>
        public bool AddActiveObject(MapActiveObjectState ActiveObjectState, Guid Id)
        {
            if (ActiveObjectState == null) throw new ArgumentNullException("ActiveObjectState", "ActiveObjectState cannot be null");

            if (ActiveObjects.ContainsKey(Id)) return false;

            if (ActiveObjectState.Position.Level >= this.LevelsCount)
                throw new ArgumentOutOfRangeException("Position.Level", "Level cannot be out of map");

            if ((ActiveObjectState.Position.X + ActiveObjectState.Tile.Size.Width >= this.Size.Width)
                || (ActiveObjectState.Position.Y + ActiveObjectState.Tile.Size.Height >= this.Size.Height))
                throw new ArgumentOutOfRangeException("Position", "Position cannot be out of map");

            if (!CheckPlaceForActiveObject(ActiveObjectState.ActiveObject, ActiveObjectState.Position))
                throw new ArgumentException("ActiveObject", "ActiveObject cannot be located to this Position");

            ActiveObjectState.Destroying += (sender, args) => { OnActiveObjectDestroying(args.ActiveObject); };
            ActiveObjectState.Destroyed += (sender, args) => { OnActiveObjectDestroyed(args.ActiveObject); };
            this.ActiveObjects.Add(Id, ActiveObjectState);

            AttachActiveObject(ActiveObjectState, ActiveObjectState.Position);

            return true;
        }
Пример #16
0
        /// <summary>
        /// Добавить новый объект на карту
        /// </summary>
        /// <param name="ActiveObject">Активный объект</param>
        /// <param name="Position">Координаты левой верхней точки</param>
        /// <param name="Id">Идентификатор (для десериализации)</param>
        /// <returns>Идентификатор</returns>
        public Guid AddActiveObject(MapActiveObject ActiveObject, MapPoint Position)
        {
            if (ActiveObject == null) throw new ArgumentNullException("ActiveObject", "ActiveObject cannot be null");

            if (Position.Level >= this.LevelsCount)
                throw new ArgumentOutOfRangeException("Position.Level", "Level cannot be out of map");

            if ((Position.X + ActiveObject.Tile.Size.Width > this.Size.Width)
                || (Position.Y + ActiveObject.Tile.Size.Height > this.Size.Height))
                throw new ArgumentOutOfRangeException("Position", "Position cannot be out of map");

            if (!CheckPlaceForActiveObject(ActiveObject, Position))
                throw new ArgumentException("ActiveObject", "ActiveObject cannot be located to this Position");

            Guid Id = Guid.NewGuid();

            MapActiveObjectState state = new MapActiveObjectState(ActiveObject, Position);
            state.Destroying += (sender, args) => { OnActiveObjectDestroying(args.ActiveObject); };
            state.Destroyed += (sender, args) => { OnActiveObjectDestroyed(args.ActiveObject); };
            this.ActiveObjects.Add(Id, state);

            AttachActiveObject(state, Position);

            return Id;
        }
Пример #17
0
 /// <summary>
 /// Аргумент - активный объект
 /// </summary>
 /// <param name="Wall">Активный объект</param>
 public MapActiveObjectEventArgs(MapActiveObjectState ActiveObject)
 {
     this.ActiveObject = ActiveObject;
 }
 /// <summary>
 /// Аргумент - активный объект
 /// </summary>
 /// <param name="Wall">Активный объект</param>
 public MapActiveObjectEventArgs(MapActiveObjectState ActiveObject)
 {
     this.ActiveObject = ActiveObject;
 }
Пример #19
0
 /// <summary>
 /// "Приклеить" объект к карте
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>        
 /// <param name="Position">Координаты левой верхней точки</param>
 private void AttachActiveObject(MapActiveObjectState ActiveObject, MapPoint Position)
 {
     ActiveObject.Locate(Position);
     for (UInt16 x = ActiveObject.Position.X; x < ActiveObject.Position.X + ActiveObject.Size.Width; x++)
         for (UInt16 y = ActiveObject.Position.Y; y < ActiveObject.Position.Y + ActiveObject.Size.Height; y++)
             Levels[Position.Level].Cells[x, y].AddActiveObject(ActiveObject);
 }
Пример #20
0
 /// <summary>
 /// "Отклеить" объект от карты
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 private void DeAttachActiveObject(MapActiveObjectState ActiveObject)
 {
     for (UInt16 x = ActiveObject.Position.X; x < ActiveObject.Position.X + ActiveObject.Size.Width; x++)
         for (UInt16 y = ActiveObject.Position.Y; y < ActiveObject.Position.Y + ActiveObject.Size.Height; y++)
             Levels[ActiveObject.Position.Level].Cells[x, y].RemoveActiveObject(ActiveObject);
 }
Пример #21
0
 /// <summary>
 /// Добавить активный объект
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 public void AddActiveObject(MapActiveObjectState ActiveObject)
 {
     if (ActiveObject == null) return;
     List<MapActiveObjectState> objects;
     if (ActiveObjects == null)
     {
         objects = new List<MapActiveObjectState>();
         objects.Add(ActiveObject);
     }
     else
     {
         if (ActiveObjects.Contains(ActiveObject)) return;
         objects = new List<MapActiveObjectState>(ActiveObjects);
         objects.Add(ActiveObject);
     }
     ActiveObjects = objects.ToArray();
 }
Пример #22
0
 /// <summary>
 /// Удалить активный объект
 /// </summary>
 /// <param name="ActiveObject">Активный объект</param>
 public void RemoveActiveObject(MapActiveObjectState ActiveObject)
 {
     if (ActiveObject == null) return;
     if (ActiveObjects == null) return;
     if (!ActiveObjects.Contains(ActiveObject)) return;
     List<MapActiveObjectState> objects = new List<MapActiveObjectState>(ActiveObjects);
     objects.Remove(ActiveObject);
     ActiveObjects = objects.ToArray();
 }
        private FrameworkElement RenderActiveObject(MapActiveObjectState activeObject, Rect area)
        {
            if (activeObject == null) return null;
            if (activeObject.ActiveObject == null) return null;

            MapImageWPF imageSource = new MapImageWPF(activeObject.Image);
            Image image = new Image { Source = imageSource.Image, Stretch = Stretch.Fill };

            double wallWidth = area.Width * WallPadding;
            double wallHeight = area.Height * WallPadding;

            double imageWidth = area.Width - wallWidth * 2;
            double imageHeight = area.Height - wallHeight * 2;

            Canvas.SetLeft(image, area.Left + wallWidth); Canvas.SetTop(image, area.Top + wallHeight); image.Width = imageWidth; image.Height = imageHeight;
            return image;
        }