using ProjectFighterJet.Drawnings; namespace ProjectFighterJet.CollectionGenericObjects; public abstract class AbstractCompany { /// <summary> /// Размер места (ширина) /// </summary> protected readonly int _placeSizeWidth = 220; /// <summary> /// Размер места (высота) /// </summary> protected readonly int _placeSizeHeight = 155; /// <summary> /// Ширина окна /// </summary> protected readonly int _pictureWidth; /// <summary> /// Высота окна /// </summary> protected readonly int _pictureHeight; protected static int amountOfObjects = 0; /// <summary> /// Коллекция бомбардировщиков /// </summary> protected ICollectionGenericObjects<DrawningJet>? _collection = null; public static int getAmountOfObjects() { return amountOfObjects; } /// <summary> /// Вычисление максимального количества элементов, который можно разместить в окне /// </summary> private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); /// <summary> /// Конструктор /// </summary> /// <param name="picWidth">Ширина окна</param> /// <param name="picHeight">Высота окна</param> /// <param name="collection">Коллекция бомбардировщиков</param> public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects<DrawningJet> collection) { _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; _collection.SetMaxCount = GetMaxCount; } /// <summary> /// Перегрузка оператора сложения для класса /// </summary> /// <param name="company">Компания</param> /// <param name="stormtrooper">Добавляемый объект</param> /// <returns></returns> public static int operator +(AbstractCompany company, DrawningJet stormtrooper) { return company._collection.Insert(stormtrooper); } /// <summary> /// Перегрузка оператора удаления для класса /// </summary> /// <param name="company">Компания</param> /// <param name="position">Номер удаляемого объекта</param> /// <returns></returns> public static DrawningJet operator -(AbstractCompany company, int position) { return company._collection.Remove(position); } /// <summary> /// Получение случайного объекта из коллекции /// </summary> /// <returns></returns> public DrawningJet? GetRandomObject() { Random rnd = new(); return _collection?.Get(rnd.Next(GetMaxCount)); } /// <summary> /// Вывод всей коллекции /// </summary> /// <returns></returns> public Bitmap? Show() { Bitmap bitmap = new(_pictureWidth, _pictureHeight); Graphics graphics = Graphics.FromImage(bitmap); DrawBackgound(graphics); SetObjectsPosition(); for (int i = 0; i < (_collection?.Count ?? 0); ++i) { DrawningJet? obj = _collection?.Get(i); obj?.DrawTransport(graphics); } return bitmap; } /// <summary> /// Вывод заднего фона /// </summary> /// <param name="g"></param> protected abstract void DrawBackgound(Graphics g); /// <summary> /// Расстановка объектов /// </summary> protected abstract void SetObjectsPosition(); }