private void CreatePlanet(int seed, float size) { Vector3D pos = MySector.MainCamera.Position + MySector.MainCamera.ForwardVector * size * 3 - new Vector3D(size); MyPlanetGeneratorDefinition planetDefinition = MyDefinitionManager.Static.GetDefinition <MyPlanetGeneratorDefinition>(MyStringHash.GetOrCompute(m_selectedPlanetName)); MyPlanetStorageProvider provider = new MyPlanetStorageProvider(); provider.Init(seed, planetDefinition, size / 2f); IMyStorage storage = new MyOctreeStorage(provider, provider.StorageSize); float minHillSize = provider.Radius * planetDefinition.HillParams.Min; float maxHillSize = provider.Radius * planetDefinition.HillParams.Max; float averagePlanetRadius = provider.Radius; float outerRadius = averagePlanetRadius + maxHillSize; float innerRadius = averagePlanetRadius + minHillSize; float atmosphereRadius = planetDefinition.AtmosphereSettings.HasValue && planetDefinition.AtmosphereSettings.Value.Scale > 1f ? 1 + planetDefinition.AtmosphereSettings.Value.Scale : 1.75f; atmosphereRadius *= provider.Radius; var planet = new MyPlanet(); planet.EntityId = MyRandom.Instance.NextLong(); MyPlanetInitArguments planetInitArguments; planetInitArguments.StorageName = "test"; planetInitArguments.Storage = storage; planetInitArguments.PositionMinCorner = pos; planetInitArguments.Radius = provider.Radius; planetInitArguments.AtmosphereRadius = atmosphereRadius; planetInitArguments.MaxRadius = outerRadius; planetInitArguments.MinRadius = innerRadius; planetInitArguments.HasAtmosphere = planetDefinition.HasAtmosphere; planetInitArguments.AtmosphereWavelengths = Vector3.Zero; planetInitArguments.GravityFalloff = planetDefinition.GravityFalloffPower; planetInitArguments.MarkAreaEmpty = true; planetInitArguments.AtmosphereSettings = planetDefinition.AtmosphereSettings.HasValue ? planetDefinition.AtmosphereSettings.Value : MyAtmosphereSettings.Defaults(); planetInitArguments.SurfaceGravity = planetDefinition.SurfaceGravity; planetInitArguments.AddGps = false; planetInitArguments.SpherizeWithDistance = true; planetInitArguments.Generator = planetDefinition; planetInitArguments.UserCreated = true; planet.Init(planetInitArguments); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = null, RandomSeed = seed, Position = Vector3D.Zero, IsProcedural = true, ProceduralRadius = size, }; MyCubeBuilder.Static.ActivateVoxelClipboard(planet.GetObjectBuilder(), storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); }
static void SpawnAsteroid(SpawnAsteroidInfo asteroidInfo) { if (MySession.Static.CreativeMode || MyEventContext.Current.IsLocallyInvoked || MySession.Static.HasPlayerAdminRights(MyEventContext.Current.Sender.Value)) { MyStorageBase storage; string storageName; using (MyRandom.Instance.PushSeed(asteroidInfo.RandomSeed)) { if (!asteroidInfo.IsProcedural) { var storageNameBase = asteroidInfo.Asteroid + "-" + asteroidInfo.RandomSeed; storageName = MakeStorageName(storageNameBase); storage = CreateAsteroidStorage(asteroidInfo.Asteroid, asteroidInfo.RandomSeed); } else { var storageNameBase = "ProcAsteroid" + "-" + asteroidInfo.RandomSeed + "r" + asteroidInfo.ProceduralRadius; storageName = MakeStorageName(storageNameBase); storage = CreateProceduralAsteroidStorage(asteroidInfo.RandomSeed, asteroidInfo.ProceduralRadius, 0.03f); } } var pastedVoxelMap = new MyVoxelMap(); pastedVoxelMap.CreatedByUser = true; pastedVoxelMap.Save = true; pastedVoxelMap.AsteroidName = asteroidInfo.Asteroid; pastedVoxelMap.Init(storageName, storage, asteroidInfo.Position - storage.Size * 0.5f); MyEntities.Add(pastedVoxelMap); MyEntities.RaiseEntityCreated(pastedVoxelMap); } }
private void SpawnProceduralAsteroid(int seed, float radius) { var storageNameBase = "ProcAsteroid" + "-" + seed + "r" + radius; var storageName = MakeStorageName(storageNameBase); var storage = CreateProceduralAsteroidStorage(seed, radius); var builder = CreateAsteroidObjectBuilder(storageName); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = null, RandomSeed = seed, Position = Vector3D.Zero, IsProcedural = true, ProceduralRadius = radius, }; MyCubeBuilder.Static.ActivateVoxelClipboard(builder, storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); }
private void SpawnVoxelPreview() { var randomSeed = MyRandom.Instance.CreateRandomSeed(); using (MyRandom.Instance.PushSeed(randomSeed)) { var storageNameBase = m_selectedCoreVoxelFile + "-" + randomSeed; String storageName = MakeStorageName(storageNameBase); var storage = CreateAsteroidStorage(m_selectedCoreVoxelFile, randomSeed); var builder = CreateAsteroidObjectBuilder(storageName); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = m_selectedCoreVoxelFile.ToString(), RandomSeed = randomSeed, Position = Vector3D.Zero, IsProcedural = false }; MyCubeBuilder.Static.ActivateVoxelClipboard(builder, storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); } }
private void CreatePlanet(int seed, float size) { Vector3D pos = MySector.MainCamera.Position + MySector.MainCamera.ForwardVector * size * 3 - new Vector3D(size); MyPlanetGeneratorDefinition planetDefinition = MyDefinitionManager.Static.GetDefinition<MyPlanetGeneratorDefinition>(MyStringHash.GetOrCompute(m_selectedPlanetName)); MyPlanetStorageProvider provider = new MyPlanetStorageProvider(); provider.Init(seed, planetDefinition, size / 2f); IMyStorage storage = new MyOctreeStorage(provider, provider.StorageSize); float minHillSize = provider.Radius * planetDefinition.HillParams.Min; float maxHillSize = provider.Radius * planetDefinition.HillParams.Max; float averagePlanetRadius = provider.Radius; float outerRadius = averagePlanetRadius + maxHillSize; float innerRadius = averagePlanetRadius + minHillSize; float atmosphereRadius = planetDefinition.AtmosphereSettings.HasValue && planetDefinition.AtmosphereSettings.Value.Scale > 1f ? 1 + planetDefinition.AtmosphereSettings.Value.Scale : 1.75f; atmosphereRadius *= provider.Radius; var planet = new MyPlanet(); planet.EntityId = MyRandom.Instance.NextLong(); MyPlanetInitArguments planetInitArguments; planetInitArguments.StorageName = "test"; planetInitArguments.Storage = storage; planetInitArguments.PositionMinCorner = pos; planetInitArguments.Radius = provider.Radius; planetInitArguments.AtmosphereRadius = atmosphereRadius; planetInitArguments.MaxRadius = outerRadius; planetInitArguments.MinRadius = innerRadius; planetInitArguments.HasAtmosphere = planetDefinition.HasAtmosphere; planetInitArguments.AtmosphereWavelengths = Vector3.Zero; planetInitArguments.GravityFalloff = planetDefinition.GravityFalloffPower; planetInitArguments.MarkAreaEmpty = true; planetInitArguments.AtmosphereSettings = planetDefinition.AtmosphereSettings.HasValue ? planetDefinition.AtmosphereSettings.Value : MyAtmosphereSettings.Defaults(); planetInitArguments.SurfaceGravity = planetDefinition.SurfaceGravity; planetInitArguments.AddGps = false; planetInitArguments.SpherizeWithDistance = true; planetInitArguments.Generator = planetDefinition; planetInitArguments.UserCreated = true; planet.Init(planetInitArguments); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = null, RandomSeed = seed, Position = Vector3D.Zero, IsProcedural = true, ProceduralRadius = size, }; MyClipboardComponent.Static.ActivateVoxelClipboard(planet.GetObjectBuilder(), storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); }
private void SpawnProceduralAsteroid(int seed, float radius) { var storageNameBase = "ProcAsteroid" + "-" + seed + "r" + radius; var storageName = MakeStorageName(storageNameBase); var storage = CreateProceduralAsteroidStorage(seed, radius); var builder = CreateAsteroidObjectBuilder(storageName); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = null, RandomSeed = seed, Position = Vector3D.Zero, IsProcedural = true, ProceduralRadius = radius, }; MyClipboardComponent.Static.ActivateVoxelClipboard(builder, storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); }
private void SpawnVoxelPreview() { var randomSeed = MyRandom.Instance.CreateRandomSeed(); using (MyRandom.Instance.PushSeed(randomSeed)) { var storageNameBase = m_selectedCoreVoxelFile + "-" + randomSeed; String storageName = MakeStorageName(storageNameBase); var storage = CreateAsteroidStorage(m_selectedCoreVoxelFile, randomSeed); var builder = CreateAsteroidObjectBuilder(storageName); m_lastAsteroidInfo = new SpawnAsteroidInfo() { Asteroid = m_selectedCoreVoxelFile.ToString(), RandomSeed = randomSeed, Position = Vector3D.Zero, IsProcedural = false }; MyClipboardComponent.Static.ActivateVoxelClipboard(builder, storage, MySector.MainCamera.ForwardVector, (storage.Size * 0.5f).Length()); } }