Example #1
0
        public override void Select(MainForm frm)
        {
            if (frm.grpUnit.Text == ToString() && frm.MainTab.SelectedTab == frm.tabUnit)
            {
                return;
            }
            Program.MakeSelected(frm.tabUnit, frm.lstUnit, this);

            try
            {
                frm.grpUnit.Text = ToString();
                frm.grpUnit.Show();
#if DEBUG
                frm.grpUnit.Text += $" - ID: {Id}";
#endif

                frm.lblUnitName.Text    = Name;
                frm.lblUnitAltName.Text = AltName;
                frm.lblUnitCoords.Text  = $"({Coords.X}, {Coords.Y}, {Coords.Z})";
                frm.lblUnitSex.Text     = Sex.ToString();
                frm.lblUnitCiv.Data     = Civ;
                frm.lblUnitPop.Data     = Population;
                frm.lblUnitMood.Text    = Mood.ToString();
                frm.lblUnitHF.Data      = HistFigure;
                frm.lblUnitRace.Data    = Race;
                frm.lblUnitCaste.Text   = CasteID.HasValue ? HistoricalFigure.Castes[CasteID.Value] : "";
                if (ProfessionId.HasValue)
                {
                    frm.lblUnitProfession.Text    = JobTypes[ProfessionId.Value];
                    frm.lblUnitProfession.Visible = true;
                }
                else
                {
                    frm.lblUnitProfession.Visible = false;
                }
                frm.lblUnitSquad.Data    = Squad;
                frm.lblUnitOpponent.Data = Opponent;

                frm.grpUnitFlags.Visible = Flag != null;
                frm.lstUnitFlags.Items.Clear();
                if (frm.grpUnitFlags.Visible)
                {
                    frm.lstUnitFlags.Items.AddRange(Flag.Distinct().Select(x => Flags[x].ToLower().Replace("_", " ").ToTitleCase()).ToArray());
                }

                frm.grpUnitLabors.Visible = Labor != null;
                frm.lstUnitLabors.Items.Clear();
                if (frm.grpUnitLabors.Visible && Labor.Any())
                {
                    frm.lstUnitLabors.Items.AddRange(Labor.Distinct().Select(x => Labors[x].ToLower().Replace("_", " ").ToTitleCase()).ToArray());
                }

                frm.grpUnitRelations.Visible = Relations != null;
                frm.lstUnitRelations.Items.Clear();
                if (Relations != null && Relations.Any())
                {
                    frm.lstUnitRelations.Items.AddRange(Relations.Select(x => x.Value).ToArray());
                }

                frm.grpUnitHealth.Visible = HealthFlag != null;
                frm.lstUnitHealth.Items.Clear();
                if (HealthFlag != null && HealthFlag.Any())
                {
                    frm.lstUnitHealth.Items.AddRange(HealthFlag.Distinct().Select(x => HealthFlags[x].ToLower().Replace("_", " ").ToTitleCase()).ToArray());
                }

                frm.grpUnitItems.Visible = OwnedItemIds != null || TradedItemIds != null || UsedItemIds != null;
                frm.trvUnitItems.Nodes.Clear();
                if (frm.grpUnitItems.Visible)
                {
                    if (OwnedItemIds != null)
                    {
                        var node = new TreeNode("Owned Items");
                        foreach (var itemId in OwnedItemIds.Where(i => World.Items.ContainsKey(i)))
                        {
                            node.Nodes.Add(new TreeNode(World.Items[itemId].ToString())
                            {
                                Tag = World.Items[itemId]
                            });
                        }
                        frm.trvUnitItems.Nodes.Add(node);
                    }
                    if (TradedItemIds != null)
                    {
                        var node = new TreeNode("Traded Items");
                        foreach (var itemId in TradedItemIds.Where(i => World.Items.ContainsKey(i)))
                        {
                            node.Nodes.Add(new TreeNode(World.Items[itemId].ToString())
                            {
                                Tag = World.Items[itemId]
                            });
                        }
                        frm.trvUnitItems.Nodes.Add(node);
                    }
                    if (UsedItemIds != null)
                    {
                        var node = new TreeNode("Used Items");
                        foreach (var itemId in UsedItemIds.Where(i => World.Items.ContainsKey(i)))
                        {
                            node.Nodes.Add(new TreeNode(World.Items[itemId].ToString())
                            {
                                Tag = World.Items[itemId]
                            });
                        }
                        frm.trvUnitItems.Nodes.Add(node);
                    }
                }

                frm.grpUnitInventory.FillListboxWith(frm.lstUnitInventory, InventoryItems);
                frm.grpUnitReferences.FillListboxWith(frm.lstUnitReferences, References);

                frm.grpUnitOwnedBuildings.Visible = OwnedBuildingIds != null;
                frm.lstUnitOwnedBuildings.Items.Clear();
                if (OwnedBuildingIds != null)
                {
                    frm.lstUnitOwnedBuildings.Items.AddRange(
                        OwnedBuildingIds.Where(x => World.Buildings.ContainsKey(x))
                        .Select(x => World.Buildings[x]).ToArray());
                }
            }
            finally
            {
                Program.MakeSelected(frm.tabUnit, frm.lstUnit, this);
            }
        }
Example #2
0
        public Unit(XDocument xdoc, World world)
            : base(xdoc, world)
        {
            foreach (var element in xdoc.Root.Elements())
            {
                var val = element.Value.Trim();
                int valI;
                int.TryParse(val, out valI);
                switch (element.Name.LocalName)
                {
                case "id":
                    break;

                case "name":
                    Name = val;
                    break;

                case "name2":
                    AltName = val;
                    break;

                case "profession":
                    if (!JobTypes.Contains(val))
                    {
                        JobTypes.Add(val);
                    }
                    ProfessionId = JobTypes.IndexOf(val);
                    break;

                case "profession2":
                    if (!JobTypes.Contains(val))
                    {
                        JobTypes.Add(val);
                    }
                    Profession2Id = JobTypes.IndexOf(val);
                    break;

                case "race":
                    if (valI != -1)
                    {
                        Race = World.GetAddRace(val);
                    }
                    break;

                case "caste":
                    if (valI != -1)
                    {
                        if (!HistoricalFigure.Castes.Contains(val))
                        {
                            HistoricalFigure.Castes.Add(val);
                        }
                        CasteID = HistoricalFigure.Castes.IndexOf(val);
                    }
                    break;

                case "coords":
                    Coords = new Point3(
                        Convert.ToInt32(val.Split(',')[0]),
                        Convert.ToInt32(val.Split(',')[1]),
                        Convert.ToInt32(val.Split(',')[2]));
                    break;

                case "sex":
                    Sex = valI;
                    break;

                case "civ_id":
                    if (valI != -1)
                    {
                        CivID = valI;
                    }
                    break;

                case "population_id":
                    if (valI != -1)
                    {
                        PopID = valI;
                    }
                    break;

                case "squad_id":
                    if (valI != -1)
                    {
                        SquadID = valI;
                    }
                    break;

                case "opponent_id":
                    if (valI != -1)
                    {
                        OpponentID = valI;
                    }
                    break;

                case "mood":
                    Mood = valI;
                    break;

                case "hist_figure_id":
                    if (valI != -1)
                    {
                        HistFigureID = valI;
                    }
                    break;

                case "hist_figure_id2":
                    if (valI != -1)
                    {
                        HistFigureID2 = valI;
                    }
                    break;

                case "labors":
                    var labors = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var labor in labors)
                    {
                        if (!Labors.Contains(labor))
                        {
                            Labors.Add(labor);
                        }
                        if (Labor == null)
                        {
                            Labor = new List <short>();
                        }
                        Labor.Add((short)Labors.IndexOf(labor));
                    }
                    break;

                case "flags":
                    var flags = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var flag in flags)
                    {
                        if (!Flags.Contains(flag))
                        {
                            Flags.Add(flag);
                        }
                        if (Flag == null)
                        {
                            Flag = new List <short>();
                        }
                        Flag.Add((short)Flags.IndexOf(flag));
                    }
                    break;

                case "health":
                    var healthflags = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var healthflag in healthflags)
                    {
                        if (!HealthFlags.Contains(healthflag))
                        {
                            HealthFlags.Add(healthflag);
                        }
                        if (HealthFlag == null)
                        {
                            HealthFlag = new List <short>();
                        }
                        HealthFlag.Add((short)HealthFlags.IndexOf(healthflag));
                    }
                    break;

                case "used_items":
                    UsedItemIds = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
                    break;

                case "owned_items":
                    OwnedItemIds = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
                    break;

                case "owned_buildings":
                    OwnedBuildingIds = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
                    break;

                case "traded_items":
                    TradedItemIds = val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
                    break;

                case "inventory":
                    foreach (var inv in element.Elements())
                    {
                        if (InventoryItems == null)
                        {
                            InventoryItems = new List <UnitInventoryItem>();
                        }
                        InventoryItems.Add(new UnitInventoryItem(new XDocument(inv), world));
                    }
                    break;

                case "reference":
                    if (References == null)
                    {
                        References = new List <Reference>();
                    }
                    References.Add(new Reference(element, this));
                    break;

                case "in_item_id":
                case "nestbox_id":
                case "civzone_id":
                    break;

                case "nemesis_id":     // Relations with HFs
                case "pregnancy_spouse":
                case "following_unit":
                case "pet_owner_id":
                case "spouse_id":
                case "mother_id":
                case "father_id":
                case "last_attacker_id":
                case "group_leader_id":
                case "draggee_id":
                case "dragger_id":
                case "rider_mount_id":
                case "lover_id":
                    if (valI != -1)
                    {
                        if (RelationIDs == null)
                        {
                            RelationIDs = new Dictionary <string, int>();
                        }
                        RelationIDs.Add(string.Join(" ", element.Name.LocalName.Split('_').Reverse().Skip(1).Reverse().ToArray()), valI);
                    }
                    break;

                case "pregnancy_timer":
                case "pregnancy_caste":
                case "mood_copy":
                case "anon_1":
                case "birth_year":
                case "birth_time":
                case "curse_year":
                case "curse_time":
                case "birth_year_bias":
                case "birth_time_bias":
                case "old_year":
                case "old_time":
                case "unk_238":
                case "mount_type":
                    break;

                default:
                    DFXMLParser.UnexpectedXmlElement(xdoc.Root.Name.LocalName, element, xdoc.Root.ToString());
                    break;
                }
            }
        }