예제 #1
0
        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;
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        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;
            }
        }