PIbd-14_Pruidze_I.K_Simple_.../ProjectCruiser/CollectionGenericObj/AbstractCompany.cs
2024-06-16 23:08:52 +04:00

77 lines
2.6 KiB
C#

using ProjectCruiser.DrawningSamples;
namespace ProjectCruiser.CollectionGenericObj;
/// Абстракция компании, хранящий коллекцию автомобилей
/// </summary>
public abstract class AbstractCompany
{
// Размеры места
protected readonly int _placeSizeWidth = 312; // ширина
protected readonly int _placeSizeHeight = 56; // высота
// Ширина окна
protected readonly int _pictureWidth;
// Высота окна
protected readonly int _pictureHeight;
// Коллекция автомобилей
protected ICollectionGenObj<DrawningBase>? _collection = null;
private int GetMaxCount => (_pictureWidth / (_placeSizeWidth + 20))
* ( _pictureHeight / (_placeSizeHeight + 4));
public AbstractCompany(int picWidth, int picHeight,
ICollectionGenObj<DrawningBase>? collection)
{
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_collection = collection;
_collection.MaxCount = GetMaxCount;
}
// Перегрузка оператора сложения для класса
public static int operator +(AbstractCompany company,
DrawningBase transport) => company._collection.Insert(transport, new DrawiningShipEqutables());
// Перегрузка оператора удаления для класса
public static DrawningBase operator -(AbstractCompany company,
int pos) => company._collection?.Remove(pos);
// Сортировка ----------------------------------------------------------- [!]
public void Sort(IComparer<DrawningBase?> comparer) =>
_collection?.CollectionSort(comparer);
// Получение случайного объекта из коллекции
public DrawningBase? GetRandomObject()
{
Random rnd = new();
return _collection?.GetItem(rnd.Next(GetMaxCount));
}
// Вывод всей коллекции
public Bitmap? Show()
{
Bitmap bitmap = new(_pictureWidth, _pictureHeight);
Graphics graphics = Graphics.FromImage(bitmap);
DrawBackground(graphics);
SetObjectsPosition(_collection.Count - 1);
for (int i = 0; i < (_collection?.Count ?? 0); i++)
{
DrawningBase? obj = _collection?.GetItem(i);
obj?.DrawTransport(graphics);
}
return bitmap;
}
// Вывод заднего фона
protected abstract void DrawBackground(Graphics g);
// Расстановка объектов
protected abstract void SetObjectsPosition(int border);
}