/// <summary> /// Создаёт юнит по области его расположения и заданным особенностям /// </summary> /// <param name="polygon">Область расположения</param> /// <param name="features">Свойства юнита</param> public Unit(ConvexPolygon polygon, UnitFeatures features) { figures = new List <Figure> { polygon }; Polygon = polygon; props = features; unitCommander = new AutomaticCommander("", CommanderType.Common, this); }
/// <summary> /// создаёт юнит с заданными областью расположения, свойствами и указанным боевым командиром /// </summary> /// <param name="polygon">Область расположения</param> /// <param name="features">Свойства</param> /// <param name="commander">Боевой командир</param> public Unit(ConvexPolygon polygon, UnitFeatures features, AutomaticCommander commander) { figures = new List <Figure> { polygon }; Polygon = polygon; props = features; unitCommander = commander; }
/// <summary> /// Метод десерилизации для Местности /// Определяет местность по имени и считывает все фигуры этой местности. /// Если местность не может быть определена или не существует, то бросает исключительную ситуацию. /// </summary> /// <param name="xelement">Xml Element</param> /// <returns>Местность</returns> public static object Deserialize(this XElement xelement) { var name = xelement.Name.ToString(); switch (name) { case "City": return new City(xelement.Elements().Deserialize()); case "Sand": return new Sand(xelement.Elements().Deserialize()); case "Road": return new Road(xelement.Elements().Deserialize()); case "Mountains": return new Mountains(xelement.Elements().Deserialize()); case "Water": return new Water(xelement.Elements().Deserialize()); case "Lowland": return new Lowland(xelement.Elements().Deserialize()); case "Field": return new Field(xelement.Elements().Deserialize()); case "Forest": return new Forest(xelement.Elements().Deserialize()); case "Unit": var xpolygon = xelement.Element("ConvexPolygon"); var polygon = ((new List<XElement> { xpolygon }).Deserialize()[0]) as ConvexPolygon; var xgroups = xelement.Element("Groups"); var groups = new List<Group>(); if (xgroups != null) { foreach (var xgroup in xgroups.Elements()) { var rank = (Rank)((Enum.Parse(typeof(Rank), (string)xgroup.Attribute("Rank")))); var specialization = (Specialization)((Enum.Parse(typeof(Specialization), (string)xgroup.Attribute("Specialization")))); var qualification = (Qualification)((Enum.Parse(typeof(Qualification), (string)xgroup.Attribute("Qualification")))); var experience = (Qualification)((Enum.Parse(typeof(Qualification), (string)xgroup.Attribute("Experience")))); var vitality = (Vitality)((Enum.Parse(typeof(Vitality), (string)xgroup.Attribute("Vitality")))); groups.Add(new Group((int)xgroup.Attribute("Count"), rank, specialization, qualification, experience, vitality)); } } var xitems = xelement.Element("Items"); var items = new List<Item>(); if (xitems != null) { foreach (var xitem in xitems.Elements()) { switch (xitem.Name.ToString()) { case "Goods": var objecttype = (ObjectType)((Enum.Parse(typeof(ObjectType), (string)xitem.Attribute("ItemType")))); items.Add(new Goods(objecttype, (int)xitem.Attribute("Count"), new Circle(0, 0, 0))); break; case "EquipmentMark": var weapon = (Caliber)((Enum.Parse(typeof(Caliber), (string)xitem.Attribute("Weapon")))); var armor = (Caliber)((Enum.Parse(typeof(Caliber), (string)xitem.Attribute("Armor")))); items.Add(new EquipmentMark(weapon, armor, (double)(xitem.Attribute("MoveSpeed")), (double)(xitem.Attribute("FireRate")), (int)(xitem.Attribute("Crew")), (int)(xitem.Attribute("Count")))); break; } } } var unit = new Unit(polygon); var features = new UnitFeatures(groups, items); features.CurSpeed = (double)xelement.Attribute("CurSpeed"); features.Visible = (double)xelement.Attribute("Visible"); features.CurVisible = (double)xelement.Attribute("CurVisible"); features.Speed = (double)xelement.Attribute("Speed"); unit.Properties = features; unit.SetSide((int)xelement.Attribute("Side"), Countries.USSR, null); // todo do this better var unittype = xelement.Attribute("UnitType"); unit.UnitType = (UnitType)((Enum.Parse(typeof(UnitType), (string)unittype))); // unit. return unit; default: throw new Exception("Not existing Landscape used as parameter in deserializing function. Exception name: " + name); } }
/// <summary> /// Создание юнита с указанными областью расположения, свойствами и типом /// </summary> /// <param name="polygon"></param> /// <param name="features"></param> /// <param name="type"></param> public Unit(ConvexPolygon polygon, UnitFeatures features, UnitType type) { figures = new List<Figure> { polygon }; Polygon = polygon; props = features; UnitType = type; unitCommander = new AutomaticCommander("", CommanderType.Common, this); }
/// <summary> /// создаёт юнит с заданными областью расположения, свойствами и указанным боевым командиром /// </summary> /// <param name="polygon">Область расположения</param> /// <param name="features">Свойства</param> /// <param name="commander">Боевой командир</param> public Unit(ConvexPolygon polygon, UnitFeatures features, AutomaticCommander commander) { figures = new List<Figure> { polygon }; Polygon = polygon; props = features; unitCommander = commander; }