110 lines
3.5 KiB
C#
110 lines
3.5 KiB
C#
using ProjectTrolleybus.Drawnings;
|
|
|
|
|
|
namespace ProjectTrolleybus.CollectionGenericObjects;
|
|
|
|
public abstract class AbstractCompany
|
|
{
|
|
/// <summary>
|
|
/// Размер места (Ширина)
|
|
/// </summary>
|
|
protected readonly int _placeSizeWidth = 250;
|
|
|
|
/// <summary>
|
|
/// Размер места (Высота)
|
|
/// </summary>
|
|
protected readonly int _placeSizeHeight = 55;
|
|
|
|
/// <summary>
|
|
/// Ширина окна
|
|
/// </summary>
|
|
protected readonly int _pictureWidth;
|
|
|
|
/// <summary>
|
|
/// Высота окна
|
|
/// </summary>
|
|
protected readonly int _pictureHeight;
|
|
|
|
/// <summary>
|
|
/// Коллекция автобусов
|
|
/// </summary>
|
|
protected ICollectionGenericObjects<DrawningTrolleyB>? _collection = null;
|
|
|
|
/// <summary>
|
|
/// Вычисление максимального кол-ва объектов которое можно разместить в окне
|
|
/// </summary>
|
|
private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight) + 4;
|
|
|
|
/// <summary>
|
|
/// Конструктор
|
|
/// </summary>
|
|
/// <param name="picWidth">Ширина окна</param>
|
|
/// <param name="picHeight">Высота окна</param>
|
|
/// <param name="collection">Коллекция автобусов</param>
|
|
public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects<DrawningTrolleyB> collection)
|
|
{
|
|
_pictureWidth = picWidth;
|
|
_pictureHeight = picHeight;
|
|
_collection = collection;
|
|
_collection.MaxCount = GetMaxCount;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Перегрузка оператора сложения для класса
|
|
/// </summary>
|
|
/// <param name="company">Компания</param>
|
|
/// <param name="position">Номер добавляемого объекта</param>
|
|
/// <returns></returns>
|
|
public static int operator +(AbstractCompany company, DrawningTrolleyB trolleyB)
|
|
{
|
|
return company._collection.Insert(trolleyB, new DrawningTrolleyBEqutables());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Перегрузка оператора удаления для класса
|
|
/// </summary>
|
|
/// <param name="company">Компания</param>
|
|
/// <param name="position">Номер удаляемого объекта</param>
|
|
/// <returns></returns>
|
|
public static DrawningTrolleyB operator -(AbstractCompany company, int position)
|
|
{
|
|
return company._collection.Remove(position);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Получение случайного объекта из коллекции
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public DrawningTrolleyB? GetRandomObject()
|
|
{
|
|
Random rnd = new();
|
|
return _collection?.Get(rnd.Next(GetMaxCount));
|
|
}
|
|
|
|
public Bitmap? Show()
|
|
{
|
|
Bitmap bitmap = new(_pictureWidth, _pictureHeight);
|
|
Graphics graphics = Graphics.FromImage(bitmap);
|
|
DrawBackground(graphics);
|
|
|
|
SetObjectPosition();
|
|
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
|
|
{
|
|
DrawningTrolleyB? obj = _collection?.Get(i);
|
|
obj?.DrawTransport(graphics);
|
|
}
|
|
|
|
return bitmap;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Сортировка
|
|
/// </summary>
|
|
/// <param name="comparer">Сравниватель объектов</param>
|
|
public void Sort(IComparer<DrawningTrolleyB?> comparer) => _collection?.CollectionSort(comparer);
|
|
|
|
protected abstract void DrawBackground(Graphics g);
|
|
|
|
protected abstract void SetObjectPosition();
|
|
}
|