예제 #1
0
 /// <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);
 }
예제 #2
0
 /// <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;
 }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
 /// <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);
 }
예제 #5
0
 /// <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;
 }