public static MyMwcObjectBuilder_StaticAsteroid GenerateStaticAsteroid(float sizeInMeters, MyStaticAsteroidTypeSetEnum typeSet, MyMwcVoxelMaterialsEnum material, Vector3 position, Random rnd, List<MyMwcObjectBuilder_StaticAsteroid_TypesEnum> asteroids) { int size = FindAsteroidSize(sizeInMeters, MyMwcObjectBuilder_StaticAsteroid.AsteroidSizes); asteroids.Clear(); MyMwcObjectBuilder_StaticAsteroid.GetAsteroids(size, typeSet, asteroids); int rndIndex = rnd.Next(0, asteroids.Count); var builder = new MyMwcObjectBuilder_StaticAsteroid(asteroids[rndIndex], material); builder.PositionAndOrientation.Position = position; builder.PositionAndOrientation.Forward = rnd.Vector(1); builder.PositionAndOrientation.Up = rnd.Vector(1); builder.IsDestructible = false; return builder; }
/// <param name="interpolator">1 means use other object</param> public MySectorObjectCounts InterpolateWith(MySectorObjectCounts otherObject, float interpolator) { var result = new MySectorObjectCounts(); // This function assumes that both collection contains all types of objects foreach (var kv in Values) { float currentValue = kv.Value; float otherValue = otherObject.Values[kv.Key]; result.Values[kv.Key] = MathHelper.Lerp(currentValue, otherValue, interpolator); } StaticAsteroidTypeset = interpolator > 0.5f ? StaticAsteroidTypeset : otherObject.StaticAsteroidTypeset; return result; }
public void GenerateSectorObjectBuildersFromSolarEntities(List<MySolarSystemMapEntity> entities, List<MyMwcObjectBuilder_Base> addToList, Random rnd, MyWeightDictionary<MyMwcVoxelMaterialsEnum> primaryMaterials, MyWeightDictionary<MyMwcVoxelMaterialsEnum> secondaryMaterials, MyStaticAsteroidTypeSetEnum staticAsteroidTypesets, MyMwcVoxelMaterialsEnum? fieldMaterial = null, MySolarSystemArea.AreaEnum? areaType = null) { List<MyMwcObjectBuilder_StaticAsteroid_TypesEnum> asteroids = new List<MyMwcObjectBuilder_StaticAsteroid_TypesEnum>(5); List<MyMwcVoxelFilesEnum> voxelAsteroids = new List<MyMwcVoxelFilesEnum>(10); int count = addToList.Count; foreach (var e in entities) { if (e.EntityType == MySolarSystemEntityEnum.VoxelAsteroid) { int voxelAsteroidSize = FindAsteroidSize(e.Radius, MyVoxelMap.AsteroidSizes); int rndIndex = rnd.Next(0, voxelAsteroids.Count); MyVoxelMap.GetAsteroidsBySizeInMeters(voxelAsteroidSize, voxelAsteroids, false); MyMwcObjectBuilder_VoxelMap builder = GenerateVoxelMap(voxelAsteroidSize, e.PositionInSector, rnd, voxelAsteroids, primaryMaterials, secondaryMaterials); addToList.Add(builder); } else if (e.EntityType == MySolarSystemEntityEnum.StaticAsteroid) { float radius = 100; if (e.Radius == 10000) radius = rnd.Next(2000, 11000); if (e.Radius == 1000) radius = rnd.Next(100, 1100); if (e.Radius == 100) radius = rnd.Next(10, 100); MyMwcVoxelMaterialsEnum asteroidMaterial = MyMwcVoxelMaterialsEnum.Stone_01; if (primaryMaterials.Count > 0) primaryMaterials.GetRandomItem(rnd); MyStaticAsteroidTypeSetEnum asteroidType = MyStaticAsteroidTypeSetEnum.A; //for (int i = 0; i < 40000000; i++) { asteroidType = (MyStaticAsteroidTypeSetEnum)rnd.Item(Enum.GetValues(typeof(MyStaticAsteroidTypeSetEnum))); } if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.A) == MyStaticAsteroidTypeSetEnum.A) asteroidType = MyStaticAsteroidTypeSetEnum.A; if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.B) == MyStaticAsteroidTypeSetEnum.B) asteroidType = MyStaticAsteroidTypeSetEnum.B; if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.All) == MyStaticAsteroidTypeSetEnum.All) asteroidType = rnd.Float(0, 1) > 0.5f ? MyStaticAsteroidTypeSetEnum.A : MyStaticAsteroidTypeSetEnum.B; var builder = GenerateStaticAsteroid(radius, asteroidType, asteroidMaterial, e.PositionInSector, rnd, asteroids); builder.AsteroidMaterial1 = fieldMaterial; if (areaType == MySolarSystemArea.AreaEnum.Sun) { builder.FieldDir = MinerWars.AppCode.Game.GUI.MyGuiScreenGamePlay.Static.GetDirectionToSunNormalized(); } builder.Generated = true; addToList.Add(builder); //MyEntity ent = MyEntities.CreateFromObjectBuilderAndAdd(null, new MyMwcObjectBuilder_StaticAsteroid(asteroids[rndIndex], mat), // Matrix.CreateWorld(e.PositionInSector, rnd.Vector(1), rnd.Vector(1))); } else if (e.EntityType == MySolarSystemEntityEnum.LargeShip) { var shipType = rnd.Enum<MyMwcObjectBuilder_PrefabLargeShip_TypesEnum>(); MyMwcObjectBuilder_Prefab_AppearanceEnum appearance = rnd.Enum<MyMwcObjectBuilder_Prefab_AppearanceEnum>(); var ship = new MyMwcObjectBuilder_PrefabLargeShip(shipType, appearance, new MyMwcVector3Short(0, 0, 0), rnd.Vector(1), null, rnd.FloatNormal(), "Abandoned large ship", 0, false, 0); var gamePlayProperties = MyGameplayConstants.GetGameplayProperties(MyMwcObjectBuilderTypeEnum.PrefabLargeShip, (int)shipType, MyMwcObjectBuilder_FactionEnum.Euroamerican); ship.PrefabHealthRatio = MyGameplayConstants.HEALTH_RATIO_MAX; ship.PrefabMaxHealth = gamePlayProperties.MaxHealth; var prefabs = new List<MyMwcObjectBuilder_PrefabBase>(); prefabs.Add(ship); var container = new MyMwcObjectBuilder_PrefabContainer(0, MyMwcObjectBuilder_PrefabContainer_TypesEnum.INSTANCE, prefabs, 0, rnd.Enum<MyMwcObjectBuilder_FactionEnum>(), null); container.PositionAndOrientation = new MyMwcPositionAndOrientation(e.PositionInSector, Vector3.Forward, Vector3.Up); addToList.Add(container); } else if (e.EntityType == MySolarSystemEntityEnum.DebrisField) { MyMwcObjectBuilder_LargeDebrisField objectBuilder = new MyMwcObjectBuilder_LargeDebrisField(MyMwcObjectBuilder_LargeDebrisField_TypesEnum.Debris84); objectBuilder.PositionAndOrientation = new MyMwcPositionAndOrientation(e.PositionInSector, rnd.Vector(1), rnd.Vector(1)); addToList.Add(objectBuilder); } } }
public static void GetAsteroids(int sizeInMeters, MyStaticAsteroidTypeSetEnum material, List <MyMwcObjectBuilder_StaticAsteroid_TypesEnum> toList) { switch (sizeInMeters) { case 10: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10m_E); * */ break; case 20: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid20m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid20m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid20m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid20m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid20m_E); */ break; case 30: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid30m_E); **/ break; case 50: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid50m_E); **/ break; case 100: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid100m_E); */ break; case 300: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid300m_E); */ break; case 500: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid500m_E); */ break; case 1000: // Commented unoptimized asteroids (high poly count) switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_A); break; } //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_B); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_C); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_D); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid1000m_E); break; case 2000: // Commented unoptimized asteroids (high poly count) switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_A); break; } //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_B); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_C); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_D); //toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid2000m_E); break; case 5000: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid5000m_E); */ break; case 10000: switch (material) { case MyStaticAsteroidTypeSetEnum.B: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_B); break; default: toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_A); break; } /* * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_B); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_C); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_D); * toList.Add(MyMwcObjectBuilder_StaticAsteroid_TypesEnum.StaticAsteroid10000m_E); */ break; default: System.Diagnostics.Debug.Assert(true, "Asteroid of this size does not exists"); break; } }