diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/ExtentionDrawningWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/ExtentionDrawningWarship.cs new file mode 100644 index 0000000..8f58c7b --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/ExtentionDrawningWarship.cs @@ -0,0 +1,58 @@ +using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.Entities; + +namespace ProjectAircraftwarshiprier_.Drawnings; + +/// +/// Расширение для класса EntityWarship +/// +public static class ExtentionDrawningWarship +{ + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly string _separatorForObject = ":"; + + /// + /// Создание объекта из строки + /// + /// Строка с данными для создания объекта + /// Объект + public static DrawningWarship? CreateDrawningWarship(this string info) + { + string[] strs = info.Split(_separatorForObject); + EntityWarship? warship = EntityAircraftCarrier.CreateEntityAircraftCarrier(strs); + if (warship != null) + { + return new DrawningAircraftCarrier(warship.Speed, warship.Weight, warship.BodyColor, + (warship as EntityAircraftCarrier).AdditionalColor, (warship as EntityAircraftCarrier).DeckForAircraftTakeOff, + (warship as EntityAircraftCarrier).ControlCabin, (warship as EntityAircraftCarrier).FighterJet); + } + + warship = EntityWarship.CreateEntityWarship(strs); + if (warship != null) + { + return new DrawningWarship(warship.Speed, warship.Weight, warship.BodyColor); + } + + return null; + } + + /// + /// Получение данных для сохранения в файл + /// + /// Сохраняемый объект + /// Строка с данными по объекту + public static string GetDataForSave(this DrawningWarship drawningWarship) + { + string[]? array = drawningWarship?.EntityWarship?.GetStringRepresentation(); + + if (array == null) + { + return string.Empty; + } + + return string.Join(_separatorForObject, array); + } + +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs index 3e87b05..5c36aaf 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs @@ -51,4 +51,35 @@ public class EntityAircraftCarrier : EntityWarship { AdditionalColor = newColor; } + + public override string[] GetStringRepresentation() + { + return new[] + { + nameof(EntityAircraftCarrier), + Speed.ToString(), + Weight.ToString(), + BodyColor.Name, + AdditionalColor.Name, + DeckForAircraftTakeOff.ToString(), + ControlCabin.ToString(), + FighterJet.ToString() + }; + } + + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntityAircraftCarrier? CreateEntityAircraftCarrier(string[] strs) + { + if (strs.Length != 8 || strs[0] != nameof(EntityAircraftCarrier)) + { + return null; + } + + return new EntityAircraftCarrier(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]), + Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[6]), Convert.ToBoolean(strs[7])); + } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs index 23ab4d3..2d323b3 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs @@ -46,4 +46,28 @@ public class EntityWarship { BodyColor = newColor; } + + /// + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public virtual string[] GetStringRepresentation() + { + return new[] { nameof(EntityWarship), Speed.ToString(), Weight.ToString(), BodyColor.Name }; + } + + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntityWarship? CreateEntityWarship(string[] strs) + { + if (strs.Length != 4 || strs[0] != nameof(EntityWarship)) + { + return null; + } + + return new EntityWarship(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3])); + } }