bool HandleEntry(Entry e)
        {
            if (e.Name.Equals("goto", StringComparison.OrdinalIgnoreCase))
            {
                Goto = new JumpReference(e[0].ToString(), e[1].ToString(), e[2].ToString());
                return(true);
            }

            if (e.Name.Equals("ring", StringComparison.OrdinalIgnoreCase))
            {
                return(true); //TODO
            }
            return(false);
        }
예제 #2
0
 void HandleGoto(Entry e) => Goto = new JumpReference(e[0].ToString(), e[1].ToString(), e[2].ToString());
예제 #3
0
        public SystemObject(UniverseIni universe, StarSystem system, Section section, FreelancerData freelancerIni)
            : base(section, freelancerIni)
        {
            if (universe == null)
            {
                throw new ArgumentNullException("universe");
            }
            if (system == null)
            {
                throw new ArgumentNullException("system");
            }
            if (section == null)
            {
                throw new ArgumentNullException("section");
            }

            this.universe      = universe;
            this.system        = system;
            TradelaneSpaceName = new List <int>();

            foreach (Entry e in section)
            {
                if (!parentEntry(e))
                {
                    switch (e.Name.ToLowerInvariant())
                    {
                    case "ambient_color":
                    case "ambient":
                        if (e.Count != 3)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (AmbientColor != null)
                        {
                            FLLog.Warning("Ini", "Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        AmbientColor = new Color4(e[0].ToInt32() / 255f, e[1].ToInt32() / 255f, e[2].ToInt32() / 255f, 1f);
                        break;

                    case "archetype":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (archetypeName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        archetypeName = e[0].ToString();
                        break;

                    case "star":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Star != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Star = e[0].ToString();
                        break;

                    case "atmosphere_range":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (AtmosphereRange != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        AtmosphereRange = e[0].ToInt32();
                        break;

                    case "burn_color":
                        if (e.Count != 3)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (BurnColor != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        BurnColor = new Color4(e[0].ToInt32() / 255f, e[1].ToInt32() / 255f, e[2].ToInt32() / 255f, 1f);
                        break;

                    case "base":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (baseName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        baseName = e[0].ToString();
                        break;

                    case "msg_id_prefix":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (MsgIdPrefix != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        MsgIdPrefix = e[0].ToString();
                        break;

                    case "jump_effect":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (JumpEffect != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        JumpEffect = e[0].ToString();
                        break;

                    case "behavior":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Behavior != null && Behavior != e[0].ToString())
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Behavior = e[0].ToString();
                        break;

                    case "difficulty_level":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (DifficultyLevel != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        DifficultyLevel = e[0].ToInt32();
                        break;

                    case "goto":
                        if (e.Count != 3)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Goto != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Goto = new JumpReference(e[0].ToString(), e[1].ToString(), e[2].ToString());
                        break;

                    case "loadout":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (LoadoutName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        LoadoutName = e[0].ToString();
                        break;

                    case "pilot":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Pilot != null && Pilot != e[0].ToString())
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Pilot = e[0].ToString();
                        break;

                    case "dock_with":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (dockWithName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        dockWithName = e[0].ToString();
                        break;

                    case "voice":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Voice != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Voice = e[0].ToString();
                        break;

                    case "space_costume":
                        if (e.Count < 1 /*|| e.Count > 3*/)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (SpaceCostume != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        SpaceCostume = new Costume(e[0].ToString(), e[1].ToString(), e.Count >= 3 ? e[2].ToString() : string.Empty, freelancerIni);
                        break;

                    case "faction":
                        if (e.Count != 1)
                        {
                            FLLog.Warning("Ini", "Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (Faction != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        Faction = e[0].ToString();
                        break;

                    case "prev_ring":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (PrevRing != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        PrevRing = e[0].ToString();
                        break;

                    case "next_ring":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (nextRingName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        nextRingName = e[0].ToString();
                        break;

                    case "tradelane_space_name":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        TradelaneSpaceName.Add(e[0].ToInt32());
                        break;

                    case "parent":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (parentName != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        parentName = e[0].ToString();
                        break;

                    case "info_card_ids":
                    case "info_card":
                    case "info_ids":
                        if (e.Count != 1)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        if (InfoCardIds != null)
                        {
                            throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        }
                        InfoCardIds = e[0].ToInt32();
                        break;

                    case "ring":
                        if (e.Count != 2)
                        {
                            throw new Exception("Invalid number of values in " + section.Name + " Entry " + e.Name + ": " + e.Count);
                        }
                        //if ( != null) throw new Exception("Duplicate " + e.Name + " Entry in " + section.Name);
                        //TODO
                        break;

                    case "260800":                     // Strange error
                        break;

                    case "rot":
                        FLLog.Warning("SystemObject", "unimplemented: rot");
                        break;

                    default:
                        throw new Exception("Invalid Entry in " + section.Name + ": " + e.Name);
                    }
                }
            }
        }