Ejemplo n.º 1
0
        public GetGalaxyResponse GetGalaxyContainer(string galaxyName)
        {
            var result = new GetGalaxyResponse();

            result.GalaxyContainer = _wrapper.GalaxyContainerRepository.GetOne <GalaxyContainer>(o => o.Name == galaxyName);
            result.Success         = true;
            return(result);
        }
Ejemplo n.º 2
0
        public GetGalaxyResponse GetDefaultGalaxy()
        {
            var result = new GetGalaxyResponse();

            result.GalaxyContainer = _wrapper.GalaxyContainerRepository.GetOne <GalaxyContainer>(f => f.Name == "Default");
            if (result.GalaxyContainer != null)
            {
                result.Success = true;
            }
            else
            {
                result.Success = false;
            }
            return(result);
        }
Ejemplo n.º 3
0
        public GetGalaxyResponse GetFirstGalaxy()
        {
            var result = new GetGalaxyResponse();

            result.GalaxyContainer = _wrapper.GalaxyContainerRepository.GetAll <GalaxyContainer>(f => f.Id != null).OrderBy(o => o.AddedAtUtc).SingleOrDefault();
            if (result.GalaxyContainer != null)
            {
                result.Success = true;
            }
            else
            {
                result.Success = false;
            }
            return(result);
        }
Ejemplo n.º 4
0
        public void CreateDefaultSpaceObjectsForAllStarsInDefaultGalaxyIfNecessary()
        {
            long count = _wrapper.SpaceObjectRepository.Count <SpaceObject>(f => f.ObjectType == "Planet");

            if (count == 0)
            {
                var indexDefinition = Builders <SpaceObject> .IndexKeys.Combine(
                    Builders <SpaceObject> .IndexKeys.Ascending(f => f.X),
                    Builders <SpaceObject> .IndexKeys.Ascending(f => f.Y));

                var model = new CreateIndexModel <SpaceObject>(indexDefinition, null);
                _mongoClient.GetDatabase("SpacePlanets").GetCollection <SpaceObject>("spaceObjects", null).Indexes.CreateOne(model);

                GetGalaxyResponse galaxyResponse = this.GetDefaultGalaxy();
                if (galaxyResponse.Success)
                {
                    List <Star> stars = galaxyResponse.GalaxyContainer.Galaxy.Stars;

                    /// Create a variable to store how many warpgates
                    Guid firstGateId   = Guid.Empty;
                    Guid lastGateOutId = Guid.Empty;
                    Guid nextGateId    = Guid.NewGuid();
                    int  gateIteration = 0;

                    foreach (var star in stars)
                    {
                        SpaceObject warpGateIn = new SpaceObject("Warpgate");
                        warpGateIn.Id = nextGateId;
                        nextGateId    = Guid.NewGuid();
                        SpaceObject warpGateOut = new SpaceObject("Warpgate");
                        warpGateOut.DestinationSpaceObjectId = nextGateId;
                        if (gateIteration == 0)
                        {
                            firstGateId = warpGateIn.Id;
                        }
                        else
                        {
                            warpGateIn.DestinationSpaceObjectId = lastGateOutId;
                        }
                        warpGateIn.X  = star.X;
                        warpGateIn.Y  = star.Y + 1;
                        warpGateIn.Z  = star.Z;
                        warpGateOut.X = star.X;
                        warpGateOut.Y = star.Y - 1;
                        warpGateOut.Z = star.Z;
                        lastGateOutId = warpGateOut.Id;
                        gateIteration++;
                        if (gateIteration == stars.Count)
                        {
                            warpGateOut.DestinationSpaceObjectId = firstGateId;
                        }
                        _wrapper.SpaceObjectRepository.AddOne <SpaceObject>(warpGateIn);
                        _wrapper.SpaceObjectRepository.AddOne <SpaceObject>(warpGateOut);


                        var generationOptions = StarformCore.SystemGenerationOptions.DefaultOptions;
                        var accrete           = new StarformCore.Accrete(generationOptions.CloudEccentricity, generationOptions.GasDensityRatio);
                        StarformCore.Data.Star starformStar = new StarformCore.Data.Star(star.Name, star.AgeYears, star.Life, star.EcosphereRadiusAU, star.Luminosity, star.Mass, star.BinaryMass, star.SemiMajorAxisAU, star.Eccentricity);

                        double outer_planet_limit = StarformCore.Generator.GetOuterLimit(starformStar);
                        double outer_dust_limit   = StarformCore.Generator.GetStellarDustLimit(star.Mass);
                        var    seedSystem         = accrete.GetPlanetaryBodies(star.Mass, star.Luminosity, 0.0, outer_dust_limit, outer_planet_limit, generationOptions.DustDensityCoeff, null, true);

                        var planets       = StarformCore.Generator.GeneratePlanets(starformStar, seedSystem, false, StarformCore.SystemGenerationOptions.DefaultOptions);
                        var stellarSystem = new StarformCore.Data.StellarSystem()
                        {
                            Options = StarformCore.SystemGenerationOptions.DefaultOptions,
                            Planets = planets,
                            Name    = star.Name,
                            Star    = starformStar
                        };

                        // seed for generating planet locations
                        Random         random  = new Random(1);
                        List <Vector3> vectors = new List <Vector3>();
                        foreach (var planet in stellarSystem.Planets)
                        {
                            int minX    = star.X - 25;
                            int maxX    = star.X + 25;
                            int minY    = star.Y - 25;
                            int maxY    = star.Y + 25;
                            int minZ    = star.Z - 25;
                            int maxZ    = star.Z + 25;
                            int planetX = random.Next(minX, maxX);
                            int planetY = random.Next(minY, maxY);
                            int planetZ = random.Next(minZ, maxZ);

                            SpaceObject planetObject = new SpaceObject("Planet", Guid.NewGuid().ToString());
                            planetObject.X = planetX;
                            planetObject.Y = planetY;
                            planetObject.Z = (int)planetZ;
                            _wrapper.SpaceObjectRepository.AddOne <SpaceObject>(planetObject);
                            PlanetMetadata planetMetadata = new PlanetMetadata();
                            planetMetadata.SpaceObjectId = planetObject.Id;
                            planetMetadata.Metadata      = planet;
                            _wrapper.PlanetMetadataRepository.AddOne <PlanetMetadata>(planetMetadata);
                        }
                    }
                }
            }
        }