Example #1
0
 public RpcSystemProcessIncomingPackets(WorldCollection collection) : base(collection)
 {
     garbageNotificationSet = World.Mgr.GetEntities()
                              .With <RpcSystem.NotificationTag>()
                              .With <RpcSystem.DestroyOnProcessedTag>()
                              .AsSet();
 }
Example #2
0
 public SharpDxInputSystem(WorldCollection collection) : base(collection)
 {
     DependencyResolver.Add(() => ref backendSystem);
     DependencyResolver.Add(() => ref scheduler);
     DependencyResolver.Add(() => ref taskScheduler);
     DependencyResolver.Add(() => ref logger);
 }
Example #3
0
        public override void Parse(TextReader reader, WorldCollection worlds)
        {
            int    lineNumber = 0;
            string line;

            string[] header = null;
            while (true)
            {
                line = reader.ReadLine();
                if (line == null)
                {
                    return;
                }
                ++lineNumber;

                if (line.Length == 0)
                {
                    continue;
                }
                if (line.StartsWith("#"))
                {
                    continue;
                }

                if (header == null)
                {
                    header = line.Split(TAB_DELIMITER);
                    continue;
                }

                ParseLine(worlds, header, line, lineNumber);
            }
        }
Example #4
0
        public override void Parse(TextReader reader, WorldCollection worlds, ErrorLogger?errors)
        {
            int lineNumber = 0;

            for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                ++lineNumber;

                if (line.Length == 0)
                {
                    continue;
                }

                switch (line[0])
                {
                case '#': break;     // comment

                case '$': break;     // route

                case '@': break;     // subsector

                default:
                    ParseWorld(worlds, line, lineNumber, errors ?? worlds.ErrorList);
                    break;
                }
            }
        }
Example #5
0
        public TitleScene(GraphicsDevice graphicsDevice,
                          IContentProvider content,
                          IMouseEvents mouse,
                          IGameStateFactory gameStateFactory,
                          CImage img,
                          CSound snd,
                          WorldCollection worlds,
                          HighscoreCollection highscores,
                          BBXConfig config)
        {
            this.graphicsDevice   = graphicsDevice;
            this.content          = content;
            this.gameStateFactory = gameStateFactory;
            this.img         = img;
            this.snd         = snd;
            this.config      = config;
            this.spriteBatch = new SpriteBatch(graphicsDevice);

            this.random = new Random();

            this.worlds     = worlds;
            this.highscores = highscores;
            this.worlds.LoadWorlds(content);

            this.mouse = mouse;

            mouse.MouseMove += Mouse_MouseMove;
            mouse.MouseUp   += Mouse_MouseUp;

            keyboard          = new KeyboardEvents();
            keyboard.KeyDown += Keyboard_KeyDown;
            font              = new Font(img.Fonts.Default);
        }
Example #6
0
 public void Parse(Stream stream, WorldCollection worlds, ErrorLogger errors)
 {
     using (var reader = new StreamReader(stream, Encoding, detectEncodingFromByteOrderMarks: true, bufferSize: BUFFER_SIZE))
     {
         Parse(reader, worlds, errors ?? worlds.ErrorList);
     }
 }
Example #7
0
        protected static void ParseWorld(WorldCollection worlds, Dictionary <string, string> dict, string line, int lineNumber, ErrorLogger errors)
        {
            try
            {
                FieldChecker checker = new FieldChecker(dict, errors, lineNumber, line);
                World        world   = new World();
                world.Hex        = checker.Check("Hex", HEX_REGEX);
                world.Name       = checker.Check("Name");
                world.UWP        = checker.Check("UWP", UWP_REGEX);
                world.Remarks    = checker.Check(new string[] { "Remarks", "Trade Codes", "Comments" });
                world.Importance = checker.Check(new string[] { "{Ix}", "{ Ix }", "Ix" }, options: CheckOptions.Optional);
                world.Economic   = checker.Check(new string[] { "(Ex)", "( Ex )", "Ex" }, options: CheckOptions.Optional);
                world.Cultural   = checker.Check(new string[] { "[Cx]", "[ Cx ]", "Cx" }, options: CheckOptions.Optional);
                world.Nobility   = checker.Check(new string[] { "N", "Nobility" }, NOBILITY_REGEX, CheckOptions.EmptyIfDash | CheckOptions.Optional);
                world.Bases      = checker.Check(new string[] { "B", "Bases" }, BASES_REGEX, CheckOptions.EmptyIfDash);
                world.Zone       = checker.Check(new string[] { "Z", "Zone" }, ZONE_REGEX, CheckOptions.EmptyIfDash);
                world.PBG        = checker.Check("PBG", PBG_REGEX);
                world.Allegiance = checker.Check(new string[] { "A", "Al", "Allegiance" },
                                                 a => worlds.IsUserData || a.Length != 4 || SecondSurvey.IsKnownT5Allegiance(a));
                world.Stellar = checker.Check(new string[] { "Stellar", "Stars", "Stellar Data" }, STARS_REGEX, CheckOptions.Warning);

                byte w;
                if (byte.TryParse(checker.Check(new string[] { "W", "Worlds" }, options: CheckOptions.Optional), NumberStyles.Integer, CultureInfo.InvariantCulture, out w))
                {
                    world.Worlds = w;
                }

                int ru;
                if (int.TryParse(checker.Check("RU", options: CheckOptions.Optional), NumberStyles.Integer | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out ru))
                {
                    world.ResourceUnits = ru;
                }

                // Cleanup known placeholders
                if (world.Name == world.Name.ToUpperInvariant() && world.IsHi)
                {
                    world.Name = Util.FixCapitalization(world.Name);
                }

                if (worlds[world.X, world.Y] != null)
                {
                    errors?.Warning("Duplicate World", lineNumber, line);
                }

                if (!checker.HadError)
                {
                    worlds[world.X, world.Y] = world;
                }

                if (errors != null)
                {
                    world.Validate(errors, lineNumber, line);
                }
            }
            catch (Exception e) when(errors != null)
            {
                errors.Error("Parse Error: " + e.Message, lineNumber, line);
                //throw new Exception($"UWP Parse Error in line {lineNumber}:\n{e.Message}\n{line}");
            }
        }
Example #8
0
 public override void Parse(TextReader reader, WorldCollection worlds, ErrorLogger?errors)
 {
     foreach (var row in new ColumnParser(reader).Data)
     {
         ParseWorld(worlds, row.dict, row.line, row.lineNumber, errors);
     }
 }
Example #9
0
        private static void ParseWorld(WorldCollection worlds, string line, int lineNumber, ErrorLogger?errors)
        {
            if (!UWP_REGEX.IsMatch(line))
            {
                errors?.Warning("Ignoring non-UWP data", lineNumber, line);
                return;
            }
            Match match = WORLD_REGEX.Match(line);

            if (!match.Success)
            {
                errors?.Error("SEC Parse", lineNumber, line);
                return;
            }

            try
            {
                World world = new World()
                {
                    // Allegiance may affect interpretation of other values, e.g. bases, zones
                    Allegiance = match.Groups["allegiance"].Value.Trim(),

                    // Crack the RegExpr data
                    Name           = NAME_FIXUP_REGEX.Replace(match.Groups["name"].Value.Trim(), ""),
                    Hex            = match.Groups["hex"].Value.Trim(),
                    UWP            = match.Groups["uwp"].Value.Trim(),
                    LegacyBaseCode = EmptyIfDash(match.Groups["base"].Value.Trim()),
                    Remarks        = match.Groups["codes"].Value.Trim(),
                    Zone           = EmptyIfDash(match.Groups["zone"].Value),
                    PBG            = match.Groups["pbg"].Value.Trim()
                };

                // Cleanup known placeholders
                if (world.Name == match.Groups["hex"].Value || PLACEHOLDER_NAME_REGEX.IsMatch(world.Name))
                {
                    world.Name = "";
                }
                if (world.Name == world.Name.ToUpperInvariant() && world.IsHi)
                {
                    world.Name = world.Name.FixCapitalization();
                }

                worlds[world.X, world.Y] = world;
                string rest = match.Groups["rest"].Value;
                if (!string.IsNullOrEmpty(rest))
                {
                    ParseRest(rest, lineNumber, line, world, errors);
                }

                if (errors != null)
                {
                    world.Validate(errors, lineNumber, line);
                }
            }
            catch (Exception e) when(errors != null)
            {
                errors.Error("Parse error: " + e.Message, lineNumber, line);
                //throw new Exception($"UWP Parse Error in line {lineNumber}:\n{e.Message}\n{line}");
            }
        }
Example #10
0
        protected override void Process(System.Web.HttpContext context, ResourceManager resourceManager)
        {
            context.Response.ContentType = ContentTypes.Text.Plain;
            context.Response.StatusCode  = 200;

            string sectorName = GetStringOption(context, "sector");
            string type       = GetStringOption(context, "type");
            string regex      = GetStringOption(context, "regex");
            string milieu     = GetStringOption(context, "milieu");

            // NOTE: This (re)initializes a static data structure used for
            // resolving names into sector locations, so needs to be run
            // before any other objects (e.g. Worlds) are loaded.
            SectorMap.Flush();
            SectorMap map = SectorMap.GetInstance(resourceManager);

            var sectorQuery = from sector in map.Sectors
                              where (sectorName == null || sector.Names[0].Text.StartsWith(sectorName, ignoreCase: true, culture: CultureInfo.InvariantCulture)) &&
                              (sector.DataFile != null) &&
                              (type == null || sector.DataFile.Type == type) &&
                              (!sector.Tags.Contains("ZCR")) &&
                              (!sector.Tags.Contains("meta")) &&
                              (milieu == null || sector.CanonicalMilieu == milieu)
                              orderby sector.Names[0].Text
                              select sector;

            Dictionary <string, HashSet <string> > codes = new Dictionary <string, HashSet <string> >();

            Regex filter = new Regex(regex ?? ".*");

            foreach (var sector in sectorQuery)
            {
                WorldCollection worlds = sector.GetWorlds(resourceManager, cacheResults: false);
                if (worlds == null)
                {
                    continue;
                }

                foreach (var code in worlds
                         .SelectMany(world => world.Codes)
                         .Where(code => filter.IsMatch(code) && !s_knownCodes.IsMatch(code)))
                {
                    if (!codes.ContainsKey(code))
                    {
                        codes.Add(code, new HashSet <string>());
                    }
                    codes[code].Add($"{sector.Names[0].Text} [{sector.CanonicalMilieu}]");
                }
            }

            foreach (var code in codes.Keys.OrderBy(s => s))
            {
                context.Response.Output.Write(code + " - ");
                foreach (var sector in codes[code].OrderBy(s => s))
                {
                    context.Response.Output.Write(sector + " ");
                }
                context.Response.Output.WriteLine("");
            }
        }
 public override void Parse(TextReader reader, WorldCollection worlds)
 {
     ColumnParser parser = new ColumnParser(reader);
     foreach (var row in parser.Data) {
         ParseWorld(worlds, row.dict, row.line, row.lineNumber);
     }
 }
 public ClientReceiveAudioResourceDataSystem(WorldCollection collection) : base(collection)
 {
     resourceSet = collection.Mgr.GetEntities()
                   .With <AudioResource>()
                   .With <IsResourceLoaded <AudioResource> >()
                   .AsSet();
 }
Example #13
0
 public System(WorldCollection collection) : base(collection)
 {
     connectionSet = World.Mgr.GetEntities()
                     .With <DisplayedConnection>()
                     .With <TransportAddress>()
                     .AsSet();
 }
Example #14
0
 public WorldSyncData GetWorldSyncData(string worldId)
 {
     return(new WorldSyncData()
     {
         World = WorldCollection.FindById(worldId),
         Areas = AreaCollection.GetAllAreasFromWorld(worldId)
     });
 }
Example #15
0
        public GlobalWorld(Context context = null, World world = null)
        {
            Collection = new WorldCollection(context ?? new Context(null), world ?? new World());
            Scheduler  = new Scheduler();

            Context.BindExisting(Scheduler);
            Context.BindExisting(this);
        }
Example #16
0
        // we require an absolute type
        public StartGameHostListener(WorldCollection collection) : base(f => f.GetType() == typeof(ReceiveGameHostClientFeature), collection)
        {
            Server = new();

            DependencyResolver.Add(() => ref logger);
            DependencyResolver.Add(() => ref lowLevel);
            DependencyResolver.Add(() => ref rpcSystem);
        }
Example #17
0
 public UniverseSyncData GetUniverseSyncData()
 {
     return(new UniverseSyncData()
     {
         Universe = UniverseCollection.GetDefaultUniverse(),
         Worlds = WorldCollection.GetAll().ToList()
     });
 }
Example #18
0
        public override void Parse(TextReader reader, WorldCollection worlds, ErrorLogger?errors)
        {
            TSVParser parser = new TSVParser(reader);

            foreach (var row in parser.Data)
            {
                ParseWorld(worlds, row.dict, row.line, row.lineNumber, errors);
            }
        }
Example #19
0
        public override void Parse(TextReader reader, WorldCollection worlds)
        {
            ColumnParser parser = new ColumnParser(reader);

            foreach (var row in parser.Data)
            {
                ParseWorld(worlds, row.dict, row.line, row.lineNumber);
            }
        }
Example #20
0
        protected RpcPacketSystem(WorldCollection collection) : base(collection)
        {
            notificationSet = World.Mgr.GetEntities()
                              .With <T>()
                              .With <RpcSystem.NotificationTag>()
                              .AsSet();

            DependencyResolver.Add(() => ref RpcSystem);
        }
Example #21
0
        public ClientSendAudioResourceSystem(WorldCollection collection) : base(collection)
        {
            resourceSet = collection.Mgr.GetEntities()
                          .With <AudioResource>()
                          .With <IsResourceLoaded <AudioResource> >()
                          .AsSet();

            clientLastMaxId = new Dictionary <AudioClientFeature, int>();
        }
Example #22
0
        protected RpcPacketWithResponseSystem(WorldCollection collection) : base(collection)
        {
            awaitingResponseSet = collection.Mgr.GetEntities()
                                  .With <T>()
                                  .With <RpcSystem.ClientRequestTag>()
                                  .Without <Task>()
                                  .AsSet();

            DependencyResolver.Add(() => ref RpcSystem);
        }
Example #23
0
        public PrintSystem(WorldCollection collection) : base(collection)
        {
            // Get the logger, for logging to the console (we don't use Console.WriteLine)
            DependencyResolver.Add(() => ref logger);

            // Get a set that will return entities with PrintTextComponent
            entitySet = World.Mgr.GetEntities()
                        .With <PrintTextComponent>()
                        .AsSet();
        }
Example #24
0
        public MasterDataModel GetMasterData()
        {
            MasterDataModel model = new MasterDataModel();

            model.Universes = UniverseCollection.GetAll();
            model.Worlds    = WorldCollection.GetAll();
            model.Areas     = AreaCollection.GetAll();
            model.Sections  = SectionCollection.Bundle;
            return(model);
        }
Example #25
0
        private static void ParseUWP(WorldCollection worlds, string line, int lineNumber)
        {
            Match match = worldRegex.Match(line);

            if (!match.Success)
            {
#if DEBUG
                worlds.ErrorList.Add("ERROR (SEC Parse): " + line);
#endif
                return;
            }

            try
            {
                World world = new World();

                // Allegiance may affect interpretation of other values, e.g. bases, zones
                world.Allegiance = match.Groups["allegiance"].Value.Trim();

                // Crack the RegExpr data
                world.Name = nameFixupRegex.Replace(match.Groups["name"].Value.Trim(), "");
                world.Hex  = Int32.Parse(match.Groups["hex"].Value, CultureInfo.InvariantCulture);
                world.UWP  = match.Groups["uwp"].Value.Trim();
                world.CompactLegacyBases = EmptyIfDash(match.Groups["base"].Value.Trim());
                world.Remarks            = match.Groups["codes"].Value.Trim();
                world.Zone = EmptyIfDash(match.Groups["zone"].Value);
                world.PBG  = match.Groups["pbg"].Value.Trim();


                // Cleanup known placeholders
                if (world.Name == match.Groups["hex"].Value || placeholderNameRegex.IsMatch(world.Name))
                {
                    world.Name = "";
                }
                if (world.Name == world.Name.ToUpperInvariant())
                {
                    world.Name = Util.FixCapitalization(world.Name);
                }

                //world.Name = world.Name.Replace('~', '\u00e9'); // Used for Ferré (Cadion/Core 0704)
                //world.Pbg = world.Pbg.Replace( ' ', '0' ); // Shouldn't be necessary

                worlds[world.X, world.Y] = world;

                string rest = match.Groups["rest"].Value;
                if (!String.IsNullOrEmpty(rest))
                {
                    ParseRest(rest, worlds, line, world);
                }
            }
            catch (Exception e)
            {
                throw new Exception(String.Format("UWP Parse Error in line {0}:\n{1}\n{2}", lineNumber, e.Message, line));
            }
        }
Example #26
0
        public SoLoudStandardPlayerSystem(WorldCollection collection) : base(collection)
        {
            DependencyResolver.Add(() => ref playerManager);
            DependencyResolver.Add(() => ref resourceManager);
            DependencyResolver.Add(() => ref worldTime);

            AddDisposable(recorder      = new EntityCommandRecorder());
            AddDisposable(controllerSet = collection.Mgr.GetEntities()
                                          .With <StandardAudioPlayerComponent>()
                                          .AsSet());
        }
Example #27
0
        private void Page_Load(object sender, System.EventArgs e)
        {
            if (!AdminAuthorized())
            {
                return;
            }

            Response.ContentType = MediaTypeNames.Text.Plain;

            ResourceManager resourceManager = new ResourceManager(Server, Cache);

            string sectorName = GetStringOption("sector");
            string type       = GetStringOption("type");

            // NOTE: This (re)initializes a static data structure used for
            // resolving names into sector locations, so needs to be run
            // before any other objects (e.g. Worlds) are loaded.
            SectorMap.Flush();
            SectorMap map = SectorMap.FromName(SectorMap.DefaultSetting, resourceManager);

            var sectorQuery = from sector in map.Sectors
                              where (sectorName == null || sector.Names[0].Text.StartsWith(sectorName, ignoreCase: true, culture: CultureInfo.InvariantCulture)) &&
                              (sector.DataFile != null) &&
                              (type == null || sector.DataFile.Type == type) &&
                              (sector.Tags.Contains("OTU"))
                              orderby sector.Names[0].Text
                              select sector;

            foreach (var sector in sectorQuery)
            {
                Response.Output.WriteLine(sector.Names[0].Text);
#if DEBUG
                WorldCollection worlds = sector.GetWorlds(resourceManager, cacheResults: false);

                if (worlds != null)
                {
                    Response.Output.WriteLine("{0} world(s)", worlds.Count());
                    foreach (string s in worlds.ErrorList.Where(s => candidate.IsMatch(s)))
                    {
                        Response.Output.WriteLine(s);
                    }
                }
                else
                {
                    Response.Output.WriteLine("{0} world(s)", 0);
                }
#endif
                Response.Output.WriteLine();
            }
            return;
        }
Example #28
0
        private static void ParseRest(string rest, WorldCollection worlds, string line, World world)
        {
            // Assume stellar data, try to parse it
            try
            {
                world.Stellar = StellarDataParser.Parse(rest, StellarDataParser.OutputFormat.Compact);
            }
            catch (StellarDataParser.InvalidSystemException)
            {
#if DEBUG
                worlds.ErrorList.Add("WARNING (Stellar Data): " + line);
#endif
            }
        }
Example #29
0
    public WorldCollection ToWorldCollection()
    {
        var collection = new WorldCollection();

        collection.Layers           = this.Layers;
        collection.GroundTiles      = this.GroundTiles;
        collection.Outline          = this.Outline;
        collection.TrapMagic        = this.TrapMagic;
        collection.EntitiesParent   = this.EntitiesParent;
        collection.GeneralPrefabs   = this.GeneralPrefabs;
        collection.NavigatorPrefabs = this.NavigatorPrefabs;
        collection.BasePrefabs      = this.BasePrefabs;
        return(collection);
    }
Example #30
0
        public ClientSendAudioPlayerSystem(WorldCollection collection) : base(collection)
        {
            withoutIdSet = collection.Mgr.GetEntities()
                           .With <AudioPlayerType>()
                           .Without <AudioPlayerId>()
                           .AsSet();

            playerSet = collection.Mgr.GetEntities()
                        .With <AudioPlayerType>()
                        .With <AudioPlayerId>()
                        .AsSet();

            selfLastMaxId   = 1;
            clientLastMaxId = new Dictionary <AudioClientFeature, int>();
        }
Example #31
0
        public static async Task <World> LoadWorld(string worldName)
        {
            var worldColl = await WorldCollection.FindAsync(x => x.Name == worldName);

            var world = await worldColl.FirstOrDefaultAsync();

            if (world != null)
            {
                world.Players = new List <Player>();
                return(world);
            }
            else
            {
                return(new World(worldName, 100, 60));
            }
        }
Example #32
0
        public override void Parse(TextReader reader, WorldCollection worlds, ErrorLogger errors)
        {
            int lineNumber = 0;
            for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                ++lineNumber;

                if (line.Length == 0)
                    continue;

                switch (line[0])
                {
                    case '#': break; // comment
                    case '$': break; // route
                    case '@': break; // subsector
                    default:
                        ParseWorld(worlds, line, lineNumber, errors ?? worlds.ErrorList);
                        break;
                }
            }
        }
 public abstract void Parse(TextReader reader, WorldCollection worlds);
        protected static void ParseWorld(WorldCollection worlds, StringDictionary dict, string line, int lineNumber)
        {
            try
            {
                World world = new World();
                world.Hex = Int32.Parse(dict["Hex"], CultureInfo.InvariantCulture);
                world.Name = dict["Name"];

                world.UWP = Check(dict, "UWP", UWP_REGEX);
                world.PBG = Check(dict, "PBG", PBG_REGEX);
                world.Stellar = Check(dict, new string[] { "Stellar", "Stars", "Stellar Data" }, STARS_REGEX);

                // Allegiance may affect interpretation of other values, e.g. bases, zones
                world.Allegiance = Check(dict, new string[] { "A", "Allegiance" });

                world.CompactLegacyBases = EmptyIfDash(Check(dict, new string[] { "B", "Bases" })); // TODO: World.T5Bases ?
                world.Zone = EmptyIfDash(Check(dict, new string[] { "Z", "Zone" }));
                world.Remarks = Check(dict, new string[] { "Remarks", "Trade Codes", "Comments" } );

                // T5
                world.Importance = Check(dict, new string[] { "{Ix}", "{ Ix }", "Ix" });
                world.Economic = Check(dict, new string[] { "(Ex)", "( Ex )", "Ex" });
                world.Cultural = Check(dict, new string[] { "[Cx]", "[ Cx ]", "Cx" });
                world.Nobility = EmptyIfDash(Check(dict, new string[] { "N", "Nobility" }));

                string w = Check(dict, new string[] { "W", "Worlds" });
                if (!String.IsNullOrEmpty(w))
                    world.Worlds = Int32.Parse(w, NumberStyles.Integer, CultureInfo.InvariantCulture);
                string ru = dict["RU"];
                if (!String.IsNullOrEmpty(ru))
                    world.ResourceUnits = Int32.Parse(w, NumberStyles.Integer, CultureInfo.InvariantCulture);

                // Cleanup known placeholders
                if (world.Name == world.Name.ToUpperInvariant())
                {
                    world.Name = Util.FixCapitalization(world.Name);
                }
                // Fix "smart" apostrophe
                world.Name = world.Name.Replace('\x92', '\'');

            #if DEBUG
                if (worlds[world.X, world.Y] != null)
                {
                    worlds.ErrorList.Add("ERROR (Duplicate): " + line);
                }
            #endif
                worlds[world.X, world.Y] = world;
            }
            #if DEBUG
            catch (Exception e)
            {
                worlds.ErrorList.Add(String.Format("ERROR (TAB Parse - {0}): ", e.Message) + line);
            }
            #else
            catch (Exception)
            {
            }
            #endif
        }
        public override void Parse(TextReader reader, WorldCollection worlds)
        {
            int lineNumber = 0;
            string line;
            string[] header = null;
            while (true) {
                line = reader.ReadLine();
                if (line == null)
                    return;
                ++lineNumber;

                if (line.Length == 0)
                    continue;
                if (line.StartsWith("#"))
                    continue;

                if (header == null) {
                    header = line.Split(TAB_DELIMITER);
                    continue;
                }

                ParseLine(worlds, header, line, lineNumber);
            }
        }
        private static void ParseLine(WorldCollection worlds, string[] header, string line, int lineNumber)
        {
            string[] cols = line.Split(TAB_DELIMITER);
            if (cols.Length != header.Length) {
            #if DEBUG
                worlds.ErrorList.Add("ERROR (TAB Parse): " + line);
            #endif
                return;
            }
            StringDictionary dict = new StringDictionary();
            for (var i = 0; i < cols.Length; ++i ) {
                dict[header[i]] = cols[i].Trim();
            }

            ParseWorld(worlds, dict, line, lineNumber);
        }
 private static void ParseRest(string rest, WorldCollection worlds, string line, World world)
 {
     // Assume stellar data, try to parse it
     try
     {
         world.Stellar = StellarDataParser.Parse(rest, StellarDataParser.OutputFormat.Compact);
     }
     catch (StellarDataParser.InvalidSystemException)
     {
     #if DEBUG
         worlds.ErrorList.Add("WARNING (Stellar Data): " + line);
     #endif
     }
 }
Example #38
0
        internal WorldCollection GetWorlds(ResourceManager resourceManager, bool cacheResults = true)
        {
            lock (this)
            {
                // Have it cached - just return it
                if (worlds != null)
                    return worlds;

                // Can't look it up; failure case
                if (DataFile == null)
                    return null;

                // Otherwise, look it up
                WorldCollection data = resourceManager.GetDeserializableFileObject(@"~/res/Sectors/" + DataFile, typeof(WorldCollection), cacheResults: false, mediaType: DataFile.Type) as WorldCollection;
                foreach (World world in data)
                    world.Sector = this;

                if (cacheResults)
                    worlds = data;

                return data;
            }
        }
Example #39
0
 private static void ParseRest(string rest, WorldCollection worlds, int lineNumber, string line, World world, ErrorLogger errors)
 {
     // Assume stellar data, try to parse it
     try
     {
         world.Stellar = StellarDataParser.Parse(rest, StellarDataParser.OutputFormat.Compact);
     }
     catch (StellarDataParser.InvalidSystemException)
     {
         if (errors != null)
             errors.Warning(String.Format("Invalid stellar data: '{0}'", rest), lineNumber, line);
     }
 }
Example #40
0
 public void Parse(Stream stream, WorldCollection worlds, ErrorLogger errors)
 {
     using (var reader = new StreamReader(stream, Encoding, detectEncodingFromByteOrderMarks: true, bufferSize: BUFFER_SIZE))
     {
         Parse(reader, worlds, errors ?? worlds.ErrorList);
     }
 }
 public SectorMetadata(Sector sector, WorldCollection worlds)
 {
     this.m_sector = sector;
     this.m_worlds = worlds;
     this.m_dataFile = new DataFileMetadata(sector);
 }
Example #42
0
 public abstract void Parse(TextReader reader, WorldCollection worlds, ErrorLogger errors);
Example #43
0
        protected static void ParseWorld(WorldCollection worlds, StringDictionary dict, string line, int lineNumber, ErrorLogger errors)
        {
            try
            {
                FieldChecker checker = new FieldChecker(dict, errors, lineNumber, line);
                World world = new World();
                world.Hex = checker.Check("Hex", HEX_REGEX);
                world.Name = dict["Name"];
                world.UWP = checker.Check("UWP", UWP_REGEX);
                world.Remarks = checker.Check(new string[] { "Remarks", "Trade Codes", "Comments" });
                world.Importance = checker.Check(new string[] { "{Ix}", "{ Ix }", "Ix" });
                world.Economic = checker.Check(new string[] { "(Ex)", "( Ex )", "Ex" });
                world.Cultural = checker.Check(new string[] { "[Cx]", "[ Cx ]", "Cx" });
                world.Nobility = checker.Check(new string[] { "N", "Nobility" }, NOBILITY_REGEX, CheckOptions.EmptyIfDash);
                world.Bases = checker.Check(new string[] { "B", "Bases" }, BASES_REGEX, CheckOptions.EmptyIfDash);
                world.Zone = checker.Check(new string[] { "Z", "Zone" }, ZONE_REGEX, CheckOptions.EmptyIfDash);
                world.PBG = checker.Check("PBG", PBG_REGEX);
                world.Allegiance = checker.Check(new string[] { "A", "Al", "Allegiance" },
                    // TODO: Allow unofficial sectors to have locally declared allegiances.
                    a => a.Length != 4 || SecondSurvey.IsKnownT5Allegiance(a));
                world.Stellar = checker.Check(new string[] { "Stellar", "Stars", "Stellar Data" }, STARS_REGEX, CheckOptions.Warning);

                int w;
                if (Int32.TryParse(checker.Check(new string[] { "W", "Worlds" }), NumberStyles.Integer, CultureInfo.InvariantCulture, out w))
                    world.Worlds = w;

                int ru;
                if (Int32.TryParse(dict["RU"], NumberStyles.Integer | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out ru))
                    world.ResourceUnits = ru;

                // Cleanup known placeholders
                if (world.Name == world.Name.ToUpperInvariant() && world.IsHi)
                    world.Name = Util.FixCapitalization(world.Name);

                if (worlds[world.X, world.Y] != null && errors != null)
                    errors.Warning("Duplicate World", lineNumber, line);

                if (!checker.HadError)
                {
                    worlds[world.X, world.Y] = world;
                }
            }
            catch (Exception e)
            {
                errors.Error("Parse Error: " + e.Message, lineNumber, line);
                //throw new Exception(String.Format("UWP Parse Error in line {0}:\n{1}\n{2}", lineNumber, e.Message, line));
            }
        }
Example #44
0
 public override void Parse(TextReader reader, WorldCollection worlds, ErrorLogger errors)
 {
     TSVParser parser = new TSVParser(reader);
     foreach (var row in parser.Data)
         ParseWorld(worlds, row.dict, row.line, row.lineNumber, errors);
 }
Example #45
0
 internal Sector(Stream stream, string mediaType, ErrorLogger errors)
     : this()
 {
     WorldCollection wc = new WorldCollection();
     wc.Deserialize(stream, mediaType, errors);
     foreach (World world in wc)
         world.Sector = this;
     worlds = wc;
 }
        private static void ParseUWP(WorldCollection worlds, string line, int lineNumber)
        {
            Match match = worldRegex.Match(line);
            if (!match.Success)
            {
            #if DEBUG
                worlds.ErrorList.Add("ERROR (SEC Parse): " + line);
            #endif
                return;
            }

            try
            {
                World world = new World();

                // Allegiance may affect interpretation of other values, e.g. bases, zones
                world.Allegiance = match.Groups["allegiance"].Value.Trim();

                // Crack the RegExpr data
                world.Name = nameFixupRegex.Replace(match.Groups["name"].Value.Trim(), "");
                world.Hex = Int32.Parse(match.Groups["hex"].Value, CultureInfo.InvariantCulture);
                world.UWP = match.Groups["uwp"].Value.Trim();
                world.CompactLegacyBases = EmptyIfDash(match.Groups["base"].Value.Trim());
                world.Remarks = match.Groups["codes"].Value.Trim();
                world.Zone = EmptyIfDash(match.Groups["zone"].Value);
                world.PBG = match.Groups["pbg"].Value.Trim();

                // Cleanup known placeholders
                if (world.Name == match.Groups["hex"].Value || placeholderNameRegex.IsMatch(world.Name))
                    world.Name = "";
                if (world.Name == world.Name.ToUpperInvariant())
                    world.Name = Util.FixCapitalization(world.Name);

                //world.Name = world.Name.Replace('~', '\u00e9'); // Used for Ferré (Cadion/Core 0704)
                //world.Pbg = world.Pbg.Replace( ' ', '0' ); // Shouldn't be necessary

                worlds[world.X, world.Y] = world;

                string rest = match.Groups["rest"].Value;
                if (!String.IsNullOrEmpty(rest))
                {
                    ParseRest(rest, worlds, line, world);
                }
            }
            catch (Exception e)
            {
                throw new Exception(String.Format("UWP Parse Error in line {0}:\n{1}\n{2}", lineNumber, e.Message, line));
            }
        }
Example #47
0
        private static void ParseWorld(WorldCollection worlds, string line, int lineNumber, ErrorLogger errors)
        {
            if (!uwpRegex.IsMatch(line))
            {
                if (errors != null)
                    errors.Warning("Ignoring non-UWP data", lineNumber, line);
                return;
            }
            Match match = worldRegex.Match(line);

            if (!match.Success)
            {
                if (errors != null)
                    errors.Error("SEC Parse", lineNumber, line);
                return;
            }

            try
            {
                World world = new World();
                // Allegiance may affect interpretation of other values, e.g. bases, zones
                world.Allegiance = match.Groups["allegiance"].Value.Trim();

                // Crack the RegExpr data
                world.Name = nameFixupRegex.Replace(match.Groups["name"].Value.Trim(), "");
                world.Hex = match.Groups["hex"].Value.Trim();
                world.UWP = match.Groups["uwp"].Value.Trim();
                world.LegacyBaseCode = EmptyIfDash(match.Groups["base"].Value.Trim());
                world.Remarks = match.Groups["codes"].Value.Trim();
                world.Zone = EmptyIfDash(match.Groups["zone"].Value);
                world.PBG = match.Groups["pbg"].Value.Trim();

                // Cleanup known placeholders
                if (world.Name == match.Groups["hex"].Value || placeholderNameRegex.IsMatch(world.Name))
                    world.Name = "";
                if (world.Name == world.Name.ToUpperInvariant() && world.IsHi)
                    world.Name = Util.FixCapitalization(world.Name);

                worlds[world.X, world.Y] = world;
                string rest = match.Groups["rest"].Value;
                if (!String.IsNullOrEmpty(rest))
                    ParseRest(rest, worlds, lineNumber, line, world, errors);
            }
            catch (Exception e)
            {
                errors.Error("Parse error: " + e.Message, lineNumber, line);
                //throw new Exception(String.Format("UWP Parse Error in line {0}:\n{1}\n{2}", lineNumber, e.Message, line));
            }
        }
 internal SectorMetadata(Sector sector, WorldCollection worlds)
 {
     this.sector = sector;
     this.worlds = worlds;
     dataFile = new DataFileMetadata(sector);
 }