Example #1
0
        void CreateCustomWorldStone()
        {
            List <BoundingSphere> safeAreas = new List <BoundingSphere>();

            foreach (MyEntity entity in MyEntities.GetEntities())
            {
                MyDummyPoint dummyPoint = entity as MyDummyPoint;

                if (dummyPoint != null && dummyPoint.DummyFlags.HasFlag(MinerWars.CommonLIB.AppCode.ObjectBuilders.SubObjects.MyDummyPointFlags.SAFE_AREA))
                {
                    safeAreas.Add(dummyPoint.WorldVolume);
                }
            }

            BoundingSphere playerSafeArea = new BoundingSphere(MySession.PlayerShip.GetPosition(), 150); //smallship + mothership

            safeAreas.Add(playerSafeArea);

            //MyEntities.CloseAll(false);
            var generator     = new MySectorGenerator((int)DateTime.Now.Ticks, safeAreas);
            var sectorObjects = generator.GenerateObjectBuilders(MyGuiScreenGamePlay.Static.GetSectorIdentifier().Position, m_sectorObjectCounts, false);

            MyGuiScreenGamePlay.CreateFromSectorObjectBuilder(sectorObjects);

            MyEntities.UpdateAfterSimulation(); //Updates AABBs of objects
            MinerWars.AppCode.Game.Render.MyRender.RebuildCullingStructure();
        }
Example #2
0
 /// <summary>
 /// Inits the physics.
 /// </summary>
 protected virtual void InitPhysics()
 {
     if (!MySectorGenerator.IsOutsideSector(this.GetPosition(), LocalVolume.Radius))
     {
         // create the box
         InitTrianglePhysics(MyMaterialType.ROCK, 1.0f, ModelCollision, null);
     }
 }
Example #3
0
        void CreateCustomWorldIce()
        {
            //MyEntities.CloseAll(false);
            var generator     = new MySectorGenerator((int)DateTime.Now.Ticks);
            var sectorObjects = generator.GenerateObjectBuilders(MyGuiScreenGamePlay.Static.GetSectorIdentifier().Position, m_sectorObjectCounts, false);

            MyGuiScreenGamePlay.CreateFromSectorObjectBuilder(sectorObjects);

            MyEntities.UpdateAfterSimulation(); //Updates AABBs of objects
            MinerWars.AppCode.Game.Render.MyRender.RebuildCullingStructure();
        }
Example #4
0
        public static MyMeteor GenerateMeteor(float sizeInMeters, Matrix worldMatrix, Vector3 position, MyMwcVoxelMaterialsEnum material)
        {
            int size = MySectorGenerator.FindAsteroidSize(sizeInMeters, MyMwcObjectBuilder_StaticAsteroid.AsteroidSizes);

            asteroids.Clear();
            MyMwcObjectBuilder_Meteor.GetAsteroids(size, MyStaticAsteroidTypeSetEnum.A, asteroids);
            int rndIndex = MyMwcUtils.GetRandomInt(0, asteroids.Count);

            var builder = new MyMwcObjectBuilder_Meteor(asteroids[rndIndex], material);

            builder.PositionAndOrientation.Position = position;
            builder.PositionAndOrientation.Forward  = MyMwcUtils.GetRandomVector3Normalized();
            builder.PositionAndOrientation.Up       = MyMwcUtils.GetRandomVector3Normalized();

            builder.UseModelTechnique = false;

            MyMeteor meteor = (MyMeteor)MyEntities.CreateFromObjectBuilderAndAdd(null, builder, worldMatrix);

            meteor.m_size = sizeInMeters;

            return(meteor);
        }
Example #5
0
        public static void Update()
        {
            //  Update only if sun wind is active
            if (IsActive == false)
            {
                return;
            }

            float darkeningPhase;
            float dt;
            int   relTime = GetDarkeningPhase(out darkeningPhase, out dt);

            if (relTime > MaxTimeMs)
            {
                Clear();
                return;
            }


            MyAudio.UpdateCuePosition(ambientSound,
                                      MyCamera.Position + MyCamera.ForwardVector * -MaxSoundDistance * (1 - darkeningPhase),
                                      MyCamera.ForwardVector, MyCamera.UpVector, Vector3.Zero);
            MyAudio.UpdateCueVolume(ambientSound, darkeningPhase * MaxAmbientVolume);

            // update smoke
            foreach (SmokeParticle part in smokeParticles)
            {
                Vector3 toCamera = (MyCamera.Position - part.Pos);
                toCamera.Normalize();
                float alpha = darkeningPhase * MaxSmokeAlpha;
                part.Color = new Vector4(alpha, alpha, alpha, alpha);
                //part.Color.W = darkeningPhase;
                part.Pos   += part.Velocity * dt + toCamera * CenterBias * dt;
                part.Angle += part.AngularVelocity * dt;
            }


            // remove old ice and sparks

            m_iceList.Clear();
            foreach (IceParticle particle in iceParticles)
            {
                if (particle.StartTime + 4000 < relTime)
                {
                    m_iceList.Add(particle);
                }
            }

            foreach (IceParticle ice in m_iceList)
            {
                ice.AsteroidEntity.MarkForClose();
                Debug.Assert(ice.TrailEffect != null, "ice.TrailEffect != null");
                ice.TrailEffect.Stop();
                ice.TrailEffect = null;
                StopCue(ice.Sound);
                iceParticles.Remove(ice);
            }

            int c = 0;

            while (c < storms.Count)
            {
                ElectricStorm storm = storms[c];
                if (storm.StartTime + 1500 < relTime)
                {
                    storms.RemoveAt(c);
                    continue;
                }
                c++;
            }



            // if its dark add new sparks and ice balls
            if (darkeningPhase >= 1)
            {
                if (storms.Count < MaxSparkCount && MyMwcUtils.GetRandomInt(SparkEveryMs) < dt * 1000.0f)
                {
                    var storm = new ElectricStorm
                    {
                        Position =
                            MyCamera.Position + MyCamera.ForwardVector * 250 +
                            MyMwcUtils.GetRandomVector3HemisphereNormalized(MyCamera.ForwardVector) *
                            MyMwcUtils.GetRandomFloat(0, 300),
                        StartTime = relTime,
                        Effect    =
                            MyParticlesManager.CreateParticleEffect(
                                (int)MyParticleEffectsIDEnum.Damage_Sparks),
                    };
                    storm.Effect.WorldMatrix = Matrix.CreateTranslation(storm.Position);
                    storm.Effect.AutoDelete  = true;
                    storm.Effect.UserScale   = 2;
                    storm.Sound = MyAudio.AddCue2D(MySoundCuesEnum.SfxSpark);
                    storms.Add(storm);
                }


                if (iceParticles.Count < MaxIceCount && MyMwcUtils.GetRandomInt(IceEveryMs) < dt * 1000.0f)
                {
                    Vector3 dir = MyMwcUtils.GetRandomVector3HemisphereNormalized(MyCamera.ForwardVector);
                    Vector3 pos = MyCamera.Position + MyCamera.ForwardVector * 250 +
                                  MyMwcUtils.GetRandomVector3Normalized() * MyMwcUtils.GetRandomFloat(0, 200) +
                                  dir * MyMwcUtils.GetRandomFloat(0, 500);
                    MyMwcObjectBuilder_StaticAsteroid rockModel =
                        MySectorGenerator.GenerateStaticAsteroid(MyMwcUtils.GetRandomFloat(0.1f, 2f),
                                                                 MyStaticAsteroidTypeSetEnum.A,
                                                                 MyMwcVoxelMaterialsEnum.Ice_01, pos, random,
                                                                 asteroidTypes);
                    Matrix matrix = Matrix.CreateFromAxisAngle(MyMwcUtils.GetRandomVector3Normalized(),
                                                               MyMwcUtils.GetRandomFloat(0, MathHelper.Pi));
                    matrix.Translation = pos;
                    MyEntity asteroid = MyEntities.CreateFromObjectBuilderAndAdd(null, rockModel, matrix);
                    asteroid.Physics.Enabled = false;
                    asteroid.CastShadows     = false;

                    MyParticleEffect effect =
                        MyParticlesManager.CreateParticleEffect((int)MyParticleEffectsIDEnum.Smoke_CannonShot);
                    Vector3 velocity = -dir *MyMwcUtils.GetRandomInt(150, 400);

                    iceParticles.Add(new IceParticle
                    {
                        StartTime       = relTime,
                        Position        = pos,
                        Direction       = -dir,
                        AsteroidEntity  = asteroid,
                        TrailEffect     = effect,
                        RotAxis         = MyMwcUtils.GetRandomVector3Normalized(),
                        RotAngle        = MyMwcUtils.GetRandomRadian(),
                        AngularVelocity = MyMwcUtils.GetRandomFloat(0.2f, 10f),
                        Velocity        = velocity,
                        Sound           =
                            MyAudio.AddCue3D(MySoundCuesEnum.WepSniperHighFire2d, pos, dir,
                                             dir * -dir, velocity)
                    });
                }
            }

            // update ice parts
            foreach (IceParticle particle in iceParticles)
            {
                particle.RotAngle += particle.AngularVelocity * dt;
                particle.Position += particle.Velocity * dt;
                Matrix matrix = Matrix.CreateFromAxisAngle(particle.RotAxis, particle.RotAngle);
                matrix.Translation = particle.Position;
                particle.AsteroidEntity.SetWorldMatrix(matrix);
                Matrix trans = Matrix.CreateTranslation(-particle.Direction * 10);
                particle.TrailEffect.WorldMatrix = matrix * trans;
                MyAudio.UpdateCuePosition(particle.Sound, particle.Position, particle.Direction,
                                          particle.Direction * -particle.Direction, particle.Velocity);
            }



            lastUpdateMs = MyMinerGame.TotalGamePlayTimeInMilliseconds;
        }