/// <summary> /// Gibt den Planeten mit der angegebenen ID zurück /// </summary> /// <param name="id">Die Planteten-ID des gewünschten Planeten</param> /// <returns>Der gewünschte Planet, falls er existiert</returns> public IPlanet GetPlanet(int id) { if (universe == null) { throw new Exception("No Universe loaded"); } IPlanet planet; if (!planets.TryGetValue(id, out planet)) { // Versuch vorhandenen Planeten zu laden planet = persistenceManager.LoadPlanet(universe.Id, id); if (planet == null) { // Keiner da -> neu erzeugen Random rand = new Random(universe.Seed + id); var generators = MapGeneratorManager.GetMapGenerators().ToArray(); int index = rand.Next(generators.Length - 1); IMapGenerator generator = generators[index]; planet = generator.GeneratePlanet(universe.Id, id, universe.Seed + id); // persistenceManager.SavePlanet(universe.Id, planet); } planets.Add(id, planet); } return(planet); }
/// <summary> /// Lädt einen Planeten. /// </summary> /// <param name="universeGuid">Guid des Universums</param> /// <param name="planetId">Index des Planeten</param> /// <returns></returns> public IPlanet LoadPlanet(Guid universeGuid, int planetId) { string file = Path.Combine(GetRoot(), universeGuid.ToString(), planetId.ToString(), PlanetFilename); string generatorInfo = Path.Combine(GetRoot(), universeGuid.ToString(), planetId.ToString(), PlanetGeneratorInfo); if (!File.Exists(generatorInfo) || !File.Exists(file)) { return(null); } IMapGenerator generator = null; using (Stream stream = File.Open(generatorInfo, FileMode.Create, FileAccess.Read)) { using (BinaryReader bw = new BinaryReader(stream)) { string generatorName = bw.ReadString(); generator = MapGeneratorManager.GetMapGenerators().FirstOrDefault(g => g.GetType().FullName.Equals(generatorName)); } } if (generator == null) { throw new Exception("Unknown Generator"); } using (Stream stream = File.Open(file, FileMode.Open, FileAccess.Read)) { using (GZipStream zip = new GZipStream(stream, CompressionMode.Decompress)) { return(generator.GeneratePlanet(zip)); } } }
private IPlanet loadPlanet(int index) { IUniverse universe = GetUniverse(0); var cache = new ChunkCache(idx => loadChunk(index, idx), (_, chunk) => saveChunk(index, chunk)); _managers[index] = new PlanetResourceManager(cache); return(mapGenerator.GeneratePlanet(universe.Id, 4567)); }
/// <summary> /// Lädt einen Planeten. /// </summary> /// <param name="universeGuid">Guid des Universums</param> /// <param name="planetId">Index des Planeten</param> /// <returns></returns> public Awaiter Load(out IPlanet planet, Guid universeGuid, int planetId) { string file = Path.Combine(GetRoot(), universeGuid.ToString(), planetId.ToString(), PlanetFilename); string generatorInfo = Path.Combine(GetRoot(), universeGuid.ToString(), planetId.ToString(), PlanetGeneratorInfo); planet = new Planet(); if (!File.Exists(generatorInfo) || !File.Exists(file)) { return(null); } IMapGenerator generator = null; using (Stream stream = File.Open(generatorInfo, FileMode.Open, FileAccess.Read)) { using (BinaryReader bw = new BinaryReader(stream)) { string generatorName = bw.ReadString(); generator = extensionResolver.GetMapGenerator().FirstOrDefault(g => g.GetType().FullName.Equals(generatorName)); } } if (generator == null) { throw new Exception("Unknown Generator"); } using (Stream stream = File.Open(file, FileMode.Open, FileAccess.Read)) { using (GZipStream zip = new GZipStream(stream, CompressionMode.Decompress)) { var awaiter = new Awaiter(); awaiter.Serializable = planet; awaiter.SetResult(generator.GeneratePlanet(zip)); return(awaiter); } } }
private IPlanet loadPlanet(int index) { IUniverse universe = GetUniverse(0); return(mapGenerator.GeneratePlanet(universe.Id, 4567)); }
private void LoadGenerator(IMapGenerator generator) { Generator = generator; generatorName = generator.GetType().Name; Universe = generator.GenerateUniverse(0); Planet = generator.GeneratePlanet(0, seed); }