123 lines
5.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace WarmlyLocomotove
{
public partial class FormLocomotive : Form
{
/// <summary>
/// Объект от класса отрисовки локомотива
/// </summary>
private DrawningLocomotive _locomotive;
public FormLocomotive()
{
InitializeComponent();
}
/// <summary>
/// Метод отрисовки локомотива
/// </summary>
private void Draw()
{
Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
Graphics gr = Graphics.FromImage(bmp);
_locomotive?.DrawTransport(gr);
pictureBoxLocomotive.Image = bmp;
}
/// <summary>
/// Заполнение информации по объекту
/// </summary>
/// <param name="locomotive">Объект от класса отрисовки или его наследника</param>
private void SetData(DrawningLocomotive locomotive)
{
Random rnd = new();
toolStripStatusLabelSpeed.Text = $"Скорость: {locomotive.Locomotive.Speed}";
toolStripStatusLabelWeight.Text = $"Вес: {locomotive.Locomotive.Weight}";
toolStripStatusLabelBodyColor.Text = $"Цвет: {locomotive.Locomotive.BodyColor.Name}";
toolStripStatusLabelAdditionalColor.Text = $"Дополнительный цвет: н/д";
toolStripStatusLabelHasPipe.Text = $"Наличие трубы: н/д";
toolStripStatusLabelHasFuelTank.Text = $"Наличие топливного бака: н/д";
_locomotive.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
}
/// <summary>
/// Заполнение дополнительной информации по объекту (только для усложнённого объекта)
/// </summary>
/// <param name="warmlylocomotive">Объект от наследника класса отрисовки</param>
private void SetAdditionalData(DrawningWarmlyLocomotive warmlylocomotive)
{
if (warmlylocomotive.Locomotive is EntityWarmlyLocomotive entityWarmlyLocomotive)
{
toolStripStatusLabelAdditionalColor.Text = $"Дополнительный цвет: {entityWarmlyLocomotive.AdditionalColor.Name}";
toolStripStatusLabelHasPipe.Text = $"Наличие трубы: {entityWarmlyLocomotive.HasPipe}";
toolStripStatusLabelHasFuelTank.Text = $"Наличие топливного бака: {entityWarmlyLocomotive.HasFuelTank}";
}
}
/// <summary>
/// Метод обработки нажатия на кнопку "Создать"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreate_Click(object sender, EventArgs e)
{
Random rnd = new();
_locomotive = new DrawningLocomotive(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)));
_locomotive.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
SetData(_locomotive);
_locomotive.AdditionalElements.WheelsNum = (int)numericUpDownWheelsNumber.Value;
Draw();
}
/// <summary>
/// Метод обработки нажатия на кнопки перемещения
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonMove_Click(object sender, EventArgs e)
{
//получаем имя кнопки
string name = ((Button)sender)?.Name ?? string.Empty;
switch (name)
{
case "buttonUp":
_locomotive?.MoveLocomotive(Direction.Up);
break;
case "buttonDown":
_locomotive?.MoveLocomotive(Direction.Down);
break;
case "buttonLeft":
_locomotive?.MoveLocomotive(Direction.Left);
break;
case "buttonRight":
_locomotive?.MoveLocomotive(Direction.Right);
break;
}
Draw();
}
/// <summary>
/// Изменение размеров формы
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PictureBoxLocomotive_Resize(object sender, EventArgs e)
{
_locomotive?.ChangeBorders(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
Draw();
}
/// <summary>
/// Метод обработки нажатия на кнопку "Модификация"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreateModif_Click(object sender, EventArgs e)
{
Random rnd = new();
_locomotive = new DrawningWarmlyLocomotive(rnd.Next(100, 300), rnd.Next(1000, 2000),
Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)),
160, 115,
Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)),
Convert.ToBoolean(rnd.Next(0, 2)),
Convert.ToBoolean(rnd.Next(0, 2)));
SetData(_locomotive);
SetAdditionalData((DrawningWarmlyLocomotive)_locomotive);
_locomotive.AdditionalElements.WheelsNum = (int)numericUpDownWheelsNumber.Value;
Draw();
}
}
}