public static void AddPlanetPrefab(string prefabName, string name)
        {
            DictionaryValuesReader <MyDefinitionId, MyPlanetPrefabDefinition> planetDefinitions = MyDefinitionManager.Static.GetPlanetsPrefabsDefinitions();

            foreach (var planetPrebabDefinition in planetDefinitions)
            {
                if (planetPrebabDefinition.Id.SubtypeName == prefabName)
                {
                    var voxelMap = new MyPlanet();
                    var ob       = planetPrebabDefinition.PlanetBuilder;

                    string storageName = MyFileSystem.ContentPath + "\\VoxelMaps\\" + ob.StorageName + MyVoxelConstants.FILE_EXTENSION;
                    voxelMap.EntityId = ob.EntityId;

                    MyPlanetInitArguments planetInitArguments;
                    planetInitArguments.StorageName           = ob.StorageName;
                    planetInitArguments.Storage               = MyStorageBase.LoadFromFile(storageName);
                    planetInitArguments.PositionMinCorner     = ob.PositionAndOrientation.Value.Position;
                    planetInitArguments.AveragePlanetRadius   = ob.Radius;
                    planetInitArguments.AtmosphereRadius      = ob.AtmosphereRadius;
                    planetInitArguments.MaximumHillRadius     = ob.MaximumHillRadius;
                    planetInitArguments.MinimumSurfaceRadius  = ob.MinimumSurfaceRadius;
                    planetInitArguments.HasAtmosphere         = ob.HasAtmosphere;
                    planetInitArguments.AtmosphereWavelengths = ob.AtmosphereWavelengths;
                    planetInitArguments.MaxOxygen             = ob.MaximumOxygen;
                    planetInitArguments.GravityFalloff        = ob.GravityFalloff;
                    planetInitArguments.MarkAreaEmpty         = true;

                    voxelMap.Init(planetInitArguments);
                    MyEntities.Add(voxelMap);
                }
            }
        }
Ejemplo n.º 2
0
        public static MyStorageBase LoadRandomizedVoxelMapPrefab(string prefabFilePath)
        {
            var storage = MyStorageBase.LoadFromFile(prefabFilePath);

            storage.DataProvider = MyCompositeShapeProvider.CreateAsteroidShape(
                MyUtils.GetRandomInt(int.MaxValue - 1) + 1,
                storage.Size.AbsMax() * MyVoxelConstants.VOXEL_SIZE_IN_METRES,
                MySession.Static.Settings.VoxelGeneratorVersion);
            storage.Reset(MyStorageDataTypeFlags.Material);
            return(storage);
        }
Ejemplo n.º 3
0
        private void AddVoxelMap(int item, string prefabName, MatrixD matrix, string name, long entityId, Dictionary <byte, byte> modifiers = null)
        {
            var fileName = MyWorldGenerator.GetVoxelPrefabPath(prefabName);
            var storage  = MyStorageBase.LoadFromFile(fileName, modifiers);

            if (storage == null)
            {
                return;
            }

            var voxelMap = MyWorldGenerator.AddVoxelMap(name, storage, matrix, entityId, true);

            RegisterVoxelMap(item, voxelMap);
        }
Ejemplo n.º 4
0
        IMyVoxelMap IMyVoxelMaps.CreateVoxelMapFromStorageName(string storageName, string prefabVoxelMapName, Vector3D position)
        {
            var filePath = MyWorldGenerator.GetVoxelPrefabPath(prefabVoxelMapName);
            var storage  = MyStorageBase.LoadFromFile(filePath);

            if (storage == null)
            {
                return(null);
            }
            storage.DataProvider = MyCompositeShapeProvider.CreateAsteroidShape(0,
                                                                                storage.Size.AbsMax() * MyVoxelConstants.VOXEL_SIZE_IN_METRES,
                                                                                MySession.Static.Settings.VoxelGeneratorVersion);
            return(MyWorldGenerator.AddVoxelMap(storageName, storage, position));
        }
Ejemplo n.º 5
0
        //[TestMethod]
        public void LoadOthe3r()
        {
            var filename = @"D:\Program Files (x86)\Steam\SteamApps\common\SpaceEngineers\Content\VoxelMaps\Arabian_Border_7.vx2";

            var storage = MyStorageBase.LoadFromFile(filename);

            //byte[] buffer;

            //using (var ms = new FileStream(filename, FileMode.Open))
            //{
            //    using (var reader = new BinaryReader(ms))
            //    {
            //        buffer = reader.ReadBytes((int)reader.BaseStream.Length);
            //    }
            //}

            //var storage = MyStorageBase.Load(buffer);
        }
        public static MyStorageBase CreateAsteroidStorage(string asteroid, int randomSeed)
        {
            MyVoxelMapStorageDefinition definition;

            if (MyDefinitionManager.Static.TryGetVoxelMapStorageDefinition(asteroid, out definition))
            {
                if (definition.Context.IsBaseGame)
                {
                    return(MyStorageBase.LoadFromFile(Path.Combine(MyFileSystem.ContentPath, definition.StorageFile)));
                }
                else
                {
                    return(MyStorageBase.LoadFromFile(definition.StorageFile));
                }
            }

            return(null);
        }
        public static void AddPlanetPrefab(string planetName, string definitionName, Vector3D position, bool addGPS)
        {
            DictionaryValuesReader <MyDefinitionId, MyPlanetPrefabDefinition> planetPrefabDefinitions = MyDefinitionManager.Static.GetPlanetsPrefabsDefinitions();

            foreach (var planetPrefabDefinition in planetPrefabDefinitions)
            {
                if (planetPrefabDefinition.Id.SubtypeName == planetName)
                {
                    MyPlanetGeneratorDefinition planetDefinition = MyDefinitionManager.Static.GetDefinition <MyPlanetGeneratorDefinition>(MyStringHash.GetOrCompute(definitionName));

                    var planet = new MyPlanet();
                    var ob     = planetPrefabDefinition.PlanetBuilder;

                    string storageName = MyFileSystem.ContentPath + "\\VoxelMaps\\" + ob.StorageName + MyVoxelConstants.FILE_EXTENSION;
                    planet.EntityId = ob.EntityId;

                    MyPlanetInitArguments planetInitArguments;
                    planetInitArguments.StorageName           = ob.StorageName;
                    planetInitArguments.Storage               = MyStorageBase.LoadFromFile(storageName);
                    planetInitArguments.PositionMinCorner     = position;
                    planetInitArguments.Radius                = ob.Radius;
                    planetInitArguments.AtmosphereRadius      = ob.AtmosphereRadius;
                    planetInitArguments.MaxRadius             = ob.MaximumHillRadius;
                    planetInitArguments.MinRadius             = ob.MinimumSurfaceRadius;
                    planetInitArguments.HasAtmosphere         = planetDefinition.HasAtmosphere;
                    planetInitArguments.AtmosphereWavelengths = ob.AtmosphereWavelengths;
                    planetInitArguments.GravityFalloff        = planetDefinition.GravityFalloffPower;
                    planetInitArguments.MarkAreaEmpty         = true;
                    planetInitArguments.AtmosphereSettings    = ob.AtmosphereSettings.HasValue ? ob.AtmosphereSettings.Value : MyAtmosphereSettings.Defaults();
                    planetInitArguments.SurfaceGravity        = planetDefinition.SurfaceGravity;
                    planetInitArguments.AddGps                = addGPS;
                    planetInitArguments.SpherizeWithDistance  = true;
                    planetInitArguments.Generator             = planetDefinition;
                    planetInitArguments.UserCreated           = false;
                    planetInitArguments.InitializeComponents  = true;

                    planet.Init(planetInitArguments);
                    MyEntities.Add(planet);
                    MyEntities.RaiseEntityCreated(planet);
                }
            }
        }
Ejemplo n.º 8
0
        private void ResavePrefabs(MyGuiControlButton sender)
        {
            var fileList = MyFileSystem.GetFiles(
                MyFileSystem.ContentPath,
                //Path.Combine(MyFileSystem.ContentPath, "VoxelMaps"),
                "*" + MyVoxelConstants.FILE_EXTENSION,
                SearchOption.AllDirectories).ToArray();

            for (int i = 0; i < fileList.Length; ++i)
            {
                var file = fileList[i];
                Debug.WriteLine(string.Format("Resaving [{0}/{1}] '{2}'", i + 1, fileList.Length, file));
                var    storage = MyStorageBase.LoadFromFile(file);
                byte[] savedData;
                storage.Save(out savedData);
                using (var stream = MyFileSystem.OpenWrite(file, System.IO.FileMode.Open))
                {
                    stream.Write(savedData, 0, savedData.Length);
                }
            }
            Debug.WriteLine("Saving prefabs finished.");
        }
        public static bool PlaceEncounterToWorld(BoundingBoxD boundingVolume, int seed, MyObjectSeedType seedType)
        {
            if (MySession.Static.Settings.EnableEncounters == false)
            {
                return(false);
            }

            boundingVolume.Max.X = Math.Round(boundingVolume.Max.X, 2);
            boundingVolume.Max.Y = Math.Round(boundingVolume.Max.Y, 2);
            boundingVolume.Max.Z = Math.Round(boundingVolume.Max.Z, 2);

            boundingVolume.Min.X = Math.Round(boundingVolume.Min.X, 2);
            boundingVolume.Min.Y = Math.Round(boundingVolume.Min.Y, 2);
            boundingVolume.Min.Z = Math.Round(boundingVolume.Min.Z, 2);

            Vector3D placePosition = boundingVolume.Center;

            m_random.SetSeed(seed);

            if (m_spawnGroups.Count == 0)
            {
                m_spawnGroupsNoVoxels.Clear();
                var allSpawnGroups = MyDefinitionManager.Static.GetSpawnGroupDefinitions();
                foreach (var spawnGroup in allSpawnGroups)
                {
                    if (spawnGroup.IsEncounter)
                    {
                        m_spawnGroups.Add(spawnGroup);
                        if (spawnGroup.Voxels.Count == 0)
                        {
                            m_spawnGroupsNoVoxels.Add(spawnGroup);
                        }
                    }
                }
            }

            if (m_spawnGroups.Count > 0)
            {
                m_randomEncounters.Clear();
                m_placePositions.Clear();
                m_encountersId.Clear();
                int numEncoutersToPlace = seedType == MyObjectSeedType.EncounterMulti ? 2 : 1;
                List <MySpawnGroupDefinition> currentSpawnGroup = seedType == MyObjectSeedType.EncounterMulti ? m_spawnGroupsNoVoxels : m_spawnGroups;

                for (int i = 0; i < numEncoutersToPlace; ++i)
                {
                    MyEncounterId encounterPosition = new MyEncounterId(boundingVolume, seed, i);
                    if (true == m_savedEncounters.Contains(encounterPosition))
                    {
                        continue;
                    }
                    m_randomEncounters.Add(PickRandomEncounter(currentSpawnGroup));
                    Vector3D newPosition   = placePosition + (i == 0 ? -1 : 1) * GetEncounterBoundingBox(currentSpawnGroup[m_randomEncounters[m_randomEncounters.Count - 1]]).HalfExtents;
                    Vector3D savedPosition = Vector3D.Zero;
                    if (true == m_movedOnlyEncounters.Dictionary.TryGetValue(encounterPosition, out savedPosition))
                    {
                        newPosition = savedPosition;
                    }
                    encounterPosition.PlacePosition = newPosition;

                    m_encountersId.Add(encounterPosition);

                    m_placePositions.Add(newPosition);
                }

                //first place voxels becaose voxel needs to be created even on client and if grids were created first
                //entity ids woudn't match
                for (int i = 0; i < m_randomEncounters.Count; ++i)
                {
                    foreach (var selectedVoxel in currentSpawnGroup[m_randomEncounters[i]].Voxels)
                    {
                        var filePath = MyWorldGenerator.GetVoxelPrefabPath(selectedVoxel.StorageName);

                        var storage = MyStorageBase.LoadFromFile(filePath);
                        storage.DataProvider = MyCompositeShapeProvider.CreateAsteroidShape(0, 1.0f, MySession.Static.Settings.VoxelGeneratorVersion);
                        IMyEntity voxel = MyWorldGenerator.AddVoxelMap(String.Format("Asteroid_{0}_{1}_{2}", m_entityToEncounterConversion.Count, seed, m_random.Next()), storage, m_placePositions[i] + selectedVoxel.Offset);
                        voxel.Save              = false;
                        voxel.OnPhysicsChanged += OnCreatedEntityChanged;
                        m_entityToEncounterConversion[voxel] = m_encountersId[i];
                    }
                }

                if (Sync.IsServer == true)
                {
                    for (int i = 0; i < m_randomEncounters.Count; ++i)
                    {
                        SpawnEncouter(m_encountersId[i], m_placePositions[i], currentSpawnGroup, m_randomEncounters[i]);
                    }
                }
            }

            return(true);
        }