コード例 #1
0
        public override Task <Entity> CreateEntity(EntityHierarchyItemViewModel parent)
        {
            var name = ComputeNewName(parent, "Simple particle system");

            var component = new ParticleSystemComponent();
            var emitter   = new ParticleEmitter {
                ParticleLifetime = new Vector2(1, 2)
            };

            // 100 Particles per second
            var spawner = new SpawnerPerSecond();

            emitter.Spawners.Add(spawner);

            // Size
            var randSize = new InitialSizeSeed {
                RandomSize = new Vector2(0.05f, 0.1f)
            };

            emitter.Initializers.Add(randSize);

            // Position
            emitter.Initializers.Add(new InitialPositionSeed());

            // Velocity
            var randVel = new InitialVelocitySeed
            {
                VelocityMin = new Vector3(-0.5f, 1f, -0.5f),
                VelocityMax = new Vector3(0.5f, 3, 0.5f)
            };

            emitter.Initializers.Add(randVel);

            // Gravity
            var gravity = new UpdaterForceField
            {
                EnergyConservation = 1f,
                FieldShape         = null
            };

            gravity.FieldFalloff.StrengthInside = gravity.FieldFalloff.StrengthOutside = 1f;
            gravity.ForceFixed    = new Vector3(0, -9.81f, 0);
            gravity.ForceDirected = gravity.ForceRepulsive = gravity.ForceVortex = 0f;
            emitter.Updaters.Add(gravity);

            component.ParticleSystem.Emitters.Add(emitter);

            return(CreateEntityWithComponent(name, component));
        }
コード例 #2
0
ファイル: ParticlePoolTest.cs プロジェクト: cg123/xenko
        public void EmitterUpdate()
        {
            var emitter = new ParticleEmitter();
            var dummyParticleSystem = new ParticleSystem();
            const float dt = 0.0166666666667f;

            // Updating the emitter forces the creation of a default spawner (100 particles per second)
            emitter.Update(dt, dummyParticleSystem);

            var forceField = new UpdaterForceField();
            emitter.Updaters.Add(forceField);

            var positionSeed = new InitialPositionSeed();
            emitter.Initializers.Add(positionSeed);

            var velocitySeed = new InitialVelocitySeed();
            emitter.Initializers.Add(velocitySeed);

            // Fixed delta time for simulating 60 fps
            var totalTime = 0f;

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Updaters.Remove(forceField);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Initializers.Remove(positionSeed);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Updaters.Add(forceField);
            emitter.Initializers.Add(positionSeed);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            // The emitter update doesn't assert anything as the state of the particle system will be difficult to predict
            //  Such tests will be part of the GraphicsTests
        }
コード例 #3
0
ファイル: ParticlePoolTest.cs プロジェクト: glepag1/stride
        public void EmitterUpdate()
        {
            var         emitter             = new ParticleEmitter();
            var         dummyParticleSystem = new ParticleSystem();
            const float dt = 0.0166666666667f;

            // Updating the emitter forces the creation of a default spawner (100 particles per second)
            emitter.Update(dt, dummyParticleSystem);

            var forceField = new UpdaterForceField();

            emitter.Updaters.Add(forceField);

            var positionSeed = new InitialPositionSeed();

            emitter.Initializers.Add(positionSeed);

            var velocitySeed = new InitialVelocitySeed();

            emitter.Initializers.Add(velocitySeed);

            // Fixed delta time for simulating 60 fps
            var totalTime = 0f;

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Updaters.Remove(forceField);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Initializers.Remove(positionSeed);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            emitter.Updaters.Add(forceField);
            emitter.Initializers.Add(positionSeed);

            // Simulate 10 seconds
            while (totalTime < 10)
            {
                emitter.Update(dt, dummyParticleSystem);
                totalTime += dt;
            }

            // The emitter update doesn't assert anything as the state of the particle system will be difficult to predict
            //  Such tests will be part of the GraphicsTests
        }