コード例 #1
0
 public void ParticleWithNoMaterialThrowsException()
 {
     emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
     emitterData.ParticleMaterial = null;
     Assert.Throws <ParticleEmitter.UnableToCreateWithoutMaterial>(
         () => new ParticleEmitter(emitterData, new Vector2D(0.5f, 0.5f)));
 }
コード例 #2
0
 private void PrepareSimplestPossibleData()
 {
     emitterData = new ParticleEmitterData();
     emitterData.ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured,
                                                 "DeltaEngineLogo");
     SaveDataToStream();
 }
コード例 #3
0
        public ParticleEmitterPrimitive(Viewer viewer, ParticleEmitterData data, WorldPosition worldPosition)
        {
            this.viewer         = viewer;
            this.graphicsDevice = viewer.GraphicsDevice;

            MaxParticles      = (int)(ParticleEmitterViewer.MaxParticlesPerSecond * ParticleEmitterViewer.MaxParticleDuration);
            Vertices          = new ParticleVertex[MaxParticles * VerticiesPerParticle];
            VertexDeclaration = new VertexDeclaration(ParticleVertex.VertexStride, ParticleVertex.VertexElements);
            VertexBuffer      = new DynamicVertexBuffer(graphicsDevice, VertexDeclaration, MaxParticles * VerticiesPerParticle, BufferUsage.WriteOnly);
            IndexBuffer       = InitIndexBuffer(graphicsDevice, MaxParticles * IndiciesPerParticle);

            EmitterData        = data;
            XNAInitialVelocity = data.XNADirection;
            XNATargetVelocity  = Vector3.Up;
            ParticlesPerSecond = 0;
            ParticleDuration   = 3;
            ParticleColor      = Color.White;

            WorldPosition     = worldPosition;
            LastWorldPosition = new WorldPosition(worldPosition);

            TimeParticlesLastEmitted = (float)viewer.Simulator.GameTime;

            PerlinStart = new float[] {
                (float)Viewer.Random.NextDouble() * 30000f,
                (float)Viewer.Random.NextDouble() * 30000f,
                (float)Viewer.Random.NextDouble() * 30000f,
                (float)Viewer.Random.NextDouble() * 30000f,
            };
        }
コード例 #4
0
        public void LoadDefaultData()
        {
            PrepareSimplestPossibleData();
            var loadedData = new ParticleEmitterData();

            loadedData.LoadFromFile(dataStream);
        }
コード例 #5
0
            public void saveEmitter(SimObject emitter)
            {
                PEE_EmitterSelector_Control PEE_EmitterSelector_Control      = "PEE_EmitterSelector_Control";
                ParticleEmitterData         PE_EmitterEditor_NotDirtyEmitter = "PE_EmitterEditor_NotDirtyEmitter";
                PersistenceManager          PE_EmitterSaver = "PE_EmitterSaver";
                ParticleEditor ParticleEditor = "ParticleEditor";

                GuiTextEditCtrl TextEdit = PEE_EmitterSelector_Control.FOT("TextEdit");

                string newName;

                if (emitter == "")
                {
                    newName = TextEdit.getText();
                }
                else
                {
                    newName = emitter.getName();
                }

                this.currEmitter.setName(newName);
                PE_EmitterEditor_NotDirtyEmitter.assignFieldsFrom(emitter);
                PE_EmitterEditor_NotDirtyEmitter["originalName"] = newName;

                PE_EmitterSaver.saveDirty();

                this.currEmitter = newName.getID();
                this.setEmitterNotDirty();

                ParticleEditor.createParticleList();
            }
コード例 #6
0
		private void PrepareSimplestPossibleData()
		{
			emitterData = new ParticleEmitterData();
			emitterData.ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured,
				"DeltaEngineLogo");
			SaveDataToStream();
		}
コード例 #7
0
            public void loadNewEmitter(string emitter)
            {
                ParticleEditor      ParticleEditor      = "ParticleEditor";
                GuiPopUpMenuCtrl    PEE_EmitterSelector = "PEE_EmitterSelector";
                ParticleEmitterData PE_EmitterEditor_NotDirtyEmitter = "PE_EmitterEditor_NotDirtyEmitter";

                ParticleParticleEditor.PE_ParticleEditor PE_ParticleEditor = "PE_ParticleEditor";

                GuiCheckBoxCtrl PEE_infiniteLoop = this.FOT("PEE_infiniteLoop");

                SimObject current;

                if (emitter.isObject())
                {
                    current = emitter.getID();
                }
                else
                {
                    current = PEE_EmitterSelector.getSelected();
                }

                this.currEmitter = current;
                PE_EmitterEditor_NotDirtyEmitter.assignFieldsFrom(current);
                PE_EmitterEditor_NotDirtyEmitter["originalName"] = current["name"];

                this.guiSync();
                this.setEmitterNotDirty();

                PE_ParticleEditor.loadNewParticle(Util.getWord(current["particles"], 0));

                ParticleEditor.updateEmitterNode();

                PEE_infiniteLoop.setStateOn(current["lifetimeMS"].AsInt() == 0);
            }
コード例 #8
0
		public void LoadingFromEmptyStreamThrows()
		{
			dataStream = new MemoryStream();
			var loadedData = new ParticleEmitterData();
			Assert.Throws<ParticleEmitterData.EmptyEmitterDataFileGiven>(
				() => { loadedData.LoadFromFile(dataStream); });
		}
コード例 #9
0
 public void CreateEmitterAndKeepRunningWithSpriteSheetAnimation()
 {
     emitterData      = CreateDataAndEmitterWithAnimation("EarthSpriteSheet");
     emitter          = new ParticleEmitter(emitterData, Vector2D.Half);
     emitter.Position = new Vector2D(0.5f, 0.7f);
     AdvanceTimeAndUpdateEntities();
     Assert.IsTrue(emitter.IsPauseable);
 }
コード例 #10
0
            public void saveEmitterDialogDontSave(SimObject emitter)
            {
                ParticleEmitterData PE_EmitterEditor_NotDirtyEmitter = "PE_EmitterEditor_NotDirtyEmitter";

                emitter.setName(PE_EmitterEditor_NotDirtyEmitter["originalName"]);
                emitter.assignFieldsFrom(PE_EmitterEditor_NotDirtyEmitter);
                this.setEmitterNotDirty();
            }
コード例 #11
0
        public void LoadingFromEmptyStreamThrows()
        {
            dataStream = new MemoryStream();
            var loadedData = new ParticleEmitterData();

            Assert.Throws <ParticleEmitterData.EmptyEmitterDataFileGiven>(
                () => { loadedData.LoadFromFile(dataStream); });
        }
コード例 #12
0
		public static ParticleSystem ImpactEffect()
		{
			var impactEffect = new ParticleSystem();
			var impactEmitterData = new ParticleEmitterData();
			impactEmitterData.ParticleMaterial = GetFallbackMaterial();
			impactEffect.AttachEmitter(new ParticleEmitter(impactEmitterData, Vector3D.Zero));
			return impactEffect;
		}
コード例 #13
0
 public ParticlePreviewWindow(ParticleEmitterData data)
     : base(800, 800, "Particle Preview", GameWindowFlags.FixedWindow)
 {
     PreviewInstance = this;
     _state          = new State();
     this.PushState(_state);
     SetParticleData(data);
 }
コード例 #14
0
 public void DisposeEmitterAfterSetTime()
 {
     emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
     emitter     = new ParticleEmitter(emitterData, Vector2D.Half);
     emitter.DisposeAfterSeconds(0.1f);
     AdvanceTimeAndUpdateEntities(0.25f);
     emitter.DisposeAfterSeconds(0.1f);
     Assert.IsFalse(emitter.IsActive);
 }
コード例 #15
0
 public void CreateRotatedParticles()
 {
     emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
     emitterData.StartRotation = new RangeGraph <ValueRange>(new ValueRange(45, 50),
                                                             new ValueRange(65, 70));
     emitterData.Size = new RangeGraph <Size>(new Size(0.05f));
     emitter          = new ParticleEmitter(emitterData, Vector2D.Half);
     emitter.Position = new Vector2D(0.5f, 0.7f);
 }
コード例 #16
0
		public static ParticleSystem CreepTransformationEffect()
		{
			var transformationEffect = new ParticleSystem();
			var transformationEmitterData = new ParticleEmitterData();
			transformationEmitterData.ParticleMaterial = GetFallbackMaterial();
			transformationEffect.AttachEmitter(new ParticleEmitter(transformationEmitterData,
				Vector3D.Zero));
			return transformationEffect;
		}
コード例 #17
0
 public ParticleEmitterComponent(Entity entity, ParticleEmitterData data)
     : base(entity)
 {
     _emitter = new ParticleEmitter(data);
     if (data.ParticleTexture != "")
     {
         _particleTexture = Assets.GetTexture("Particles/" + data.ParticleTexture);
     }
 }
コード例 #18
0
 public void SetParticleData(ParticleEmitterData data)
 {
     if (_emitterEntity != null)
     {
         _emitterEntity.Destroy();
     }
     _emitterEntity = Entity.CreateInstance(_state.EntityManager);
     _emitterEntity.GetTransform().Position = new Vector3(400, 400, 0);
     ParticleEmitterComponent component     = new ParticleEmitterComponent(_emitterEntity, data);
 }
コード例 #19
0
        public ParticleEmitterViewer(Viewer viewer, ParticleEmitterData data, IWorldPosition positionSource)
        {
            Viewer         = viewer;
            EmissionHoleM2 = (MathHelper.Pi * ((data.NozzleWidth / 2f) * (data.NozzleWidth / 2f)));
            Emitter        = new ParticleEmitterPrimitive(viewer, data, positionSource);
#if DEBUG_EMITTER_INPUT
            EmitterID  = ++EmitterIDIndex;
            InputCycle = Viewer.Random.Next(InputCycleLimit);
#endif
        }
コード例 #20
0
		public static ParticleSystem CreepDeathEffect()
		{
			var deathEffect = new ParticleSystem();
			var emitterData = new ParticleEmitterData();
			emitterData.ParticleMaterial = GetFallbackMaterial();
			emitterData.Size = new RangeGraph<Size>(new Size(1.0f), new Size(1.0f));
			emitterData.LifeTime = 1.0f;
			emitterData.MaximumNumberOfParticles = 1;
			deathEffect.AttachEmitter(new ParticleEmitter(emitterData, Vector3D.Zero));
			return deathEffect;
		}
コード例 #21
0
		private ParticleEmitter CreateAndAttachEmitter(Vector3D emitterPosition)
		{
			var textureData = new ImageCreationData(new Size(32));
			var material = new Material(ContentLoader.Create<Shader>(
				new ShaderCreationData(ShaderFlags.ColoredTextured)),
				ContentLoader.Create<Image>(textureData));
			var emitterData = new ParticleEmitterData { ParticleMaterial = material };
			var emitter = new ParticleEmitter(emitterData, emitterPosition);
			particleSystem.AttachEmitter(emitter);
			return emitter;
		}
コード例 #22
0
        private static Stream CreateEmitter3D(ParticleEmitterPositionType positionType)
        {
            var pointEmitter = new ParticleEmitterData();

            pointEmitter.ParticleMaterial = new Material(ShaderFlags.ColoredTextured, "DeltaEngineLogo");
            pointEmitter.PositionType     = positionType;
            var data = BinaryDataExtensions.SaveToMemoryStream(pointEmitter);

            data.Seek(0, SeekOrigin.Begin);
            return(data);
        }
コード例 #23
0
		public static ParticleSystem ProjectileEffect()
		{
			var projectileEffect = new ParticleSystem();
			var projectileEmitterData = new ParticleEmitterData();
			projectileEmitterData.ParticleMaterial = GetFallbackMaterial();
			projectileEmitterData.SpawnInterval = 0.01f;
			projectileEmitterData.LifeTime = 0;
			projectileEmitterData.MaximumNumberOfParticles = 1;
			projectileEmitterData.Color = new RangeGraph<Color>(Color.Red, Color.Red);
			projectileEmitterData.Size = new RangeGraph<Size>(new Size(0.2f), new Size(0.2f));
			projectileEffect.AttachEmitter(new ParticleEmitter(projectileEmitterData, Vector3D.Zero));
			return projectileEffect;
		}
コード例 #24
0
ファイル: Grid.cs プロジェクト: isaveu/DeltaEngine.SlimDX
 public Grid(BlocksContent content)
 {
     this.content  = content;
     zoomBrickData = new ParticleEmitterData
     {
         LifeTime = 0.2f,
         Color    = new RangeGraph <Color>(Color.White, Color.TransparentWhite),
         MaximumNumberOfParticles = 10,
         SpawnInterval            = -1,
         StartVelocity            = new RangeGraph <Vector3D>(Vector2D.Zero, Vector2D.Zero),
         StartPosition            = new RangeGraph <Vector3D>(Vector2D.Zero, Vector2D.Zero),
     };
 }
コード例 #25
0
        public EnemyPlane(Vector2D initialPosition)
            : base(ContentLoader.Load <Material>("EnemyPlaneMaterial"), initialPosition)
        {
            Hitpoints = 5;
            verticalDecelerationFactor = 3.0f;
            verticalAccelerationFactor = 1.5f;
            RenderLayer             = (int)DefRenderLayer.Player;
            elapsedSinceLastMissile = missileCadenceInverse - 0.2f;
            // ParticleSystemData can very well be loaded by a ContentLoader, unused for simplicity in M5
            //machineGunAndLauncher =
            //	new ParticleSystem(ContentLoader.Load<ParticleSystemData>("MachineGunAndLauncherEnemy"));
            machineGunAndLauncher = new ParticleSystem();

            var machineGunData = new ParticleEmitterData
            {
                ParticleMaterial = ContentLoader.Load <Material>("BulletMaterial"),
                Size             = new RangeGraph <Size>(new Size(0.01f, 0.005f), new Size(0.01f, 0.005f)),
                LifeTime         = 3.0f,
                StartPosition    =
                    new RangeGraph <Vector3D>(new Vector3D(0.0f, -0.01f, 0.0f),
                                              new Vector3D(0.0f, -0.01f, 0.0f)),
                StartRotation =
                    new RangeGraph <ValueRange>(new ValueRange(180.0f, 180.0f), new ValueRange(180.0f, 180.0f)),
                StartVelocity = new RangeGraph <Vector3D>(new Vector3D(-0.8f, 0.0f, 0.0f), Vector3D.Zero),
                Acceleration  =
                    new RangeGraph <Vector3D>(new Vector3D(0.0f, 0.1f, 0.0f), new Vector3D(0.0f, 0.1f, 0.0f)),
                SpawnInterval            = 0,
                MaximumNumberOfParticles = 64
            };
            var launcherData = new ParticleEmitterData
            {
                ParticleMaterial = ContentLoader.Load <Material>("RocketMaterial"),
                Size             = new RangeGraph <Size>(new Size(0.03f, 0.007f), new Size(0.03f, 0.007f)),
                LifeTime         = 3.0f,
                StartPosition    = new RangeGraph <Vector3D>(new Vector3D(0.0f, 0.01f, 0.0f), new Vector3D(0.0f, 0.01f, 0.0f)),
                StartRotation    =
                    new RangeGraph <ValueRange>(new ValueRange(180.0f, 180.0f), new ValueRange(180.0f, 180.0f)),
                StartVelocity            = new RangeGraph <Vector3D>(new Vector3D(-0.5f, 0.0f, 0.0f), Vector3D.Zero),
                Acceleration             = new RangeGraph <Vector3D>(new Vector3D[] { new Vector3D(0.0f, -0.1f, 0.0f), new Vector3D(0.0f, 0.1f, 0.0f), new Vector3D(0.0f, -0.1f, 0.0f) }),
                SpawnInterval            = 0,
                MaximumNumberOfParticles = 8
            };

            machineGunAndLauncher.AttachEmitter(new ParticleEmitter(machineGunData, Vector3D.Zero));
            machineGunAndLauncher.AttachEmitter(new ParticleEmitter(launcherData, Vector3D.Zero));

            machineGunAndLauncher.Position = new Vector3D(initialPosition);
            Add(new Velocity2D(new Vector2D(-0.3f, 0), MaximumSpeed));
            Start <EnemyHandler>();
        }
コード例 #26
0
        private void SetMapEvent(MapEvent mapEvent)
        {
            _mapEvent = mapEvent;
            SetSpriteID(mapEvent.SpriteID);
            SetRealPosition();
            SetYFrame((int)_mapEvent.EventDirection);

            ParticleEmitterData data = ParticleEmitterData.GetEmitterData(_mapEvent.ParticleEmitterID);

            if (data != null)
            {
                _particleEmitterComponent = new ParticleEmitterComponent(Parent, data);
            }
        }
コード例 #27
0
		public static ParticleSystem AttackEffect()
		{
			var attackEffect = new ParticleSystem();
			var attackEmitterData = new ParticleEmitterData();
			attackEmitterData.ParticleMaterial = GetFallbackMaterial();
			attackEmitterData.StartVelocity = new RangeGraph<Vector3D>(-Vector3D.UnitY);
			attackEmitterData.SpawnInterval = 0;
			attackEmitterData.MaximumNumberOfParticles = 16;
			attackEmitterData.LifeTime = 0.5f;
			attackEmitterData.Size = new RangeGraph<Size>(new Size(0.2f), new Size(0.4f));
			attackEmitterData.Color = new RangeGraph<Color>(Color.Red, Color.TransparentBlack);
			attackEffect.AttachEmitter(new ParticleEmitter(attackEmitterData, Vector3D.Zero));
			return attackEffect;
		}
コード例 #28
0
        private ParticleEmitter CreateAndAttachEmitter(Vector3D emitterPosition)
        {
            var textureData = new ImageCreationData(new Size(32));
            var material    = new Material(ContentLoader.Create <Shader>(
                                               new ShaderCreationData(ShaderFlags.ColoredTextured)),
                                           ContentLoader.Create <Image>(textureData));
            var emitterData = new ParticleEmitterData {
                ParticleMaterial = material
            };
            var emitter = new ParticleEmitter(emitterData, emitterPosition);

            particleSystem.AttachEmitter(emitter);
            return(emitter);
        }
コード例 #29
0
ファイル: Effects.cs プロジェクト: cyecp/DeltaEngine.OpenTK
        public static ParticleEmitter CreateHitEffect(Vector2D position)
        {
            var material    = new Material(ShaderFlags.Position2DColoredTextured, "Hit");
            var deathEffect = new ParticleEmitterData
            {
                ParticleMaterial         = material,
                MaximumNumberOfParticles = 1,
                SpawnInterval            = 0,
                Size     = new RangeGraph <Size>(new Size(0.06f), new Size(0.09f)),
                LifeTime = 0.5f
            };

            return(new ParticleEmitter(deathEffect, position));
        }
コード例 #30
0
        /// <summary>
        /// Special behavior of the player's plane for use in the side-scrolling shoot'em'up.
        /// Can be controlled in its vertical position, fire shots and make the environment move.
        /// (It is so mighty that, when it flies faster, in truth the world turns faster!)
        /// </summary>
        public PlayerPlane(Vector2D initialPosition)
            : base(ContentLoader.Load <Material>("PlayerPlaneMaterial"), initialPosition)
        {
            Hitpoints = 3;
            verticalDecelerationFactor = 3.0f;
            verticalAccelerationFactor = 1.5f;
            mgCadenceInverse           = PlayerMgCadenceInverse;
            missileCadenceInverse      = PlayerMissileCadenceInverse;
            RenderLayer = (int)DefRenderLayer.Player;
            // ParticleSystemData can very well be loaded by a ContentLoader, unused for simplicity in M5
            //machineGunAndLauncher =
            //	new ParticleSystem(ContentLoader.Load<ParticleSystemData>("MachineGunAndLauncher"));
            machineGunAndLauncher = new ParticleSystem();
            var machineGunData = new ParticleEmitterData
            {
                ParticleMaterial = ContentLoader.Load <Material>("BulletMaterial"),
                Size             = new RangeGraph <Size>(new Size(0.01f, 0.005f), new Size(0.01f, 0.005f)),
                LifeTime         = 3.0f,
                StartPosition    =
                    new RangeGraph <Vector3D>(new Vector3D(0.0f, -0.01f, 0.0f),
                                              new Vector3D(0.0f, -0.01f, 0.0f)),
                StartVelocity = new RangeGraph <Vector3D>(new Vector3D(0.8f, 0.0f, 0.0f), Vector3D.Zero),
                Acceleration  =
                    new RangeGraph <Vector3D>(new Vector3D(0.0f, 0.1f, 0.0f), new Vector3D(0.0f, 0.1f, 0.0f)),
                SpawnInterval            = 0,
                MaximumNumberOfParticles = 64
            };
            var launcherData = new ParticleEmitterData
            {
                ParticleMaterial         = ContentLoader.Load <Material>("RocketMaterial"),
                Size                     = new RangeGraph <Size>(new Size(0.03f, 0.007f), new Size(0.03f, 0.007f)),
                LifeTime                 = 3.0f,
                StartPosition            = new RangeGraph <Vector3D>(new Vector3D(0.0f, 0.01f, 0.0f), new Vector3D(0.0f, 0.01f, 0.0f)),
                StartVelocity            = new RangeGraph <Vector3D>(new Vector3D(0.3f, 0.0f, 0.0f), Vector3D.Zero),
                Acceleration             = new RangeGraph <Vector3D>(new Vector3D[] { new Vector3D(0.0f, -0.1f, 0.0f), new Vector3D(0.0f, 0.1f, 0.0f), new Vector3D(0.0f, -0.1f, 0.0f) }),
                SpawnInterval            = 0,
                MaximumNumberOfParticles = 8
            };

            machineGunAndLauncher.AttachEmitter(new ParticleEmitter(machineGunData, Vector3D.Zero));
            machineGunAndLauncher.AttachEmitter(new ParticleEmitter(launcherData, Vector3D.Zero));

            machineGunAndLauncher.Position = new Vector3D(initialPosition);

            Add(new Velocity2D(Vector2D.Zero, MaximumSpeed));
            Start <PlayerMovement>();
            Start <MachineGunFire>();
        }
コード例 #31
0
 private ParticleEmitterData CreateDataAndEmitterWithAnimation(string contentName)
 {
     emitterData = new ParticleEmitterData
     {
         MaximumNumberOfParticles = 512,
         SpawnInterval            = 0.1f,
         LifeTime      = 5f,
         Size          = new RangeGraph <Size>(new Size(0.05f), new Size(0.10f)),
         Color         = new RangeGraph <Color>(Color.White),
         Acceleration  = new RangeGraph <Vector3D>(new Vector2D(0, 0.1f)),
         StartVelocity =
             new RangeGraph <Vector3D>(new Vector2D(0, -0.3f), new Vector2D(0.05f, 0.01f)),
         ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured, contentName)
     };
     return(emitterData);
 }
コード例 #32
0
		private void PrepareSomeData()
		{
			emitterData = new ParticleEmitterData();
			emitterData.LifeTime = 1.2f;
			emitterData.SpawnInterval = 0.2f;
			emitterData.BillboardMode = BillboardMode.Ground;
			emitterData.MaximumNumberOfParticles = 128;
			emitterData.ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured,
				"DeltaEngineLogo");
			emitterData.ParticlesPerSpawn = new RangeGraph<ValueRange>(new ValueRange(3.0f, 3.0f),
				new ValueRange(3.0f, 3.0f));
			emitterData.Color = new RangeGraph<Color>(new[] { Color.Black, Color.DarkGreen, Color.Gold });
			emitterData.StartVelocity =
				new RangeGraph<Vector3D>(new[] { -Vector3D.UnitX, Vector3D.UnitX, Vector3D.Zero });
			SaveDataToStream();
		}
コード例 #33
0
 public void ParticleTracksEmitterAcrossScreenFor4Seconds()
 {
     emitterData = new ParticleEmitterData
     {
         MaximumNumberOfParticles = 1,
         SpawnInterval            = 0.001f,
         Size                    = new RangeGraph <Size>(new Size(0.1f)),
         Color                   = new RangeGraph <Color>(Color.White),
         ParticleMaterial        = new Material(ShaderFlags.Position2DColoredTextured, "ImageAnimation"),
         DoParticlesTrackEmitter = true
     };
     emitter = new ParticleEmitter(emitterData, new Vector2D(0.2f, 0.5f));
     emitter.Start <MoveAcrossScreen>();
     emitter.DisposeAfterSeconds(4);
     AdvanceTimeAndUpdateEntities();
 }
コード例 #34
0
 private void PrepareSomeData()
 {
     emitterData                          = new ParticleEmitterData();
     emitterData.LifeTime                 = 1.2f;
     emitterData.SpawnInterval            = 0.2f;
     emitterData.BillboardMode            = BillboardMode.Ground;
     emitterData.MaximumNumberOfParticles = 128;
     emitterData.ParticleMaterial         = new Material(ShaderFlags.Position2DColoredTextured,
                                                         "DeltaEngineLogo");
     emitterData.ParticlesPerSpawn = new RangeGraph <ValueRange>(new ValueRange(3.0f, 3.0f),
                                                                 new ValueRange(3.0f, 3.0f));
     emitterData.Color         = new RangeGraph <Color>(new[] { Color.Black, Color.DarkGreen, Color.Gold });
     emitterData.StartVelocity =
         new RangeGraph <Vector3D>(new[] { -Vector3D.UnitX, Vector3D.UnitX, Vector3D.Zero });
     SaveDataToStream();
 }
コード例 #35
0
		public void LoadCommonGradeData()
		{
			PrepareSomeData();
			var loadedData = new ParticleEmitterData();
			loadedData.LoadFromFile(dataStream);
			Assert.AreEqual(emitterData.SpawnInterval, loadedData.SpawnInterval);
			Assert.AreEqual(emitterData.LifeTime, loadedData.LifeTime);
			Assert.AreEqual(emitterData.MaximumNumberOfParticles, loadedData.MaximumNumberOfParticles);
			Assert.AreEqual(emitterData.StartVelocity.Values, loadedData.StartVelocity.Values);
			Assert.AreEqual(emitterData.Acceleration.Values, loadedData.Acceleration.Values);
			Assert.AreEqual(emitterData.Size.Values, loadedData.Size.Values);
			Assert.AreEqual(emitterData.StartRotation.Values, loadedData.StartRotation.Values);
			Assert.AreEqual(emitterData.RotationSpeed.Values, loadedData.RotationSpeed.Values);
			Assert.AreEqual(emitterData.Color.Values, loadedData.Color.Values);
			Assert.AreEqual(emitterData.PositionType, loadedData.PositionType);
			Assert.AreEqual(emitterData.StartPosition.Values, loadedData.StartPosition.Values);
			Assert.AreEqual(emitterData.ParticlesPerSpawn.Values, loadedData.ParticlesPerSpawn.Values);
			Assert.AreEqual(emitterData.DoParticlesTrackEmitter, loadedData.DoParticlesTrackEmitter);
			Assert.AreEqual(emitterData.BillboardMode, loadedData.BillboardMode);
		}
コード例 #36
0
		public void LoadDefaultData()
		{
			PrepareSimplestPossibleData();
			var loadedData = new ParticleEmitterData();
			loadedData.LoadFromFile(dataStream);
		}
コード例 #37
0
 private void CreateDataAndEmitter(int maxParticles = 1, float spawnInterval = 0.01f,
     float lifeTime = 0.002f)
 {
     emitterData = CreateData(maxParticles, spawnInterval, lifeTime);
     emitter = new ParticleEmitter(emitterData, Vector2D.Half);
 }
コード例 #38
0
		public void EmittersFromSameDataAreStillIndependentlyChangeable()
		{
			emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
			var emitterChanging = new ParticleEmitter(emitterData, Vector3D.UnitY);
			var emitterStayingSame = new ParticleEmitter(emitterData, Vector3D.UnitX);
			emitterChanging.EmitterData.SpawnInterval += 0.2f;
			emitterChanging.EmitterData.Acceleration = new RangeGraph<Vector3D>(Vector3D.One);
			emitterChanging.EmitterData.Color = new RangeGraph<Color>(Color.Green, Color.Yellow);
			emitterChanging.EmitterData.StartRotation.Start = new ValueRange(3, 4);
			Assert.AreNotSame(emitterData, emitterChanging.EmitterData);
			Assert.AreNotEqual(emitterStayingSame.EmitterData.SpawnInterval,
				emitterChanging.EmitterData.SpawnInterval);
			Assert.AreNotEqual(emitterStayingSame.EmitterData.Acceleration.Values,
				emitterChanging.EmitterData.Acceleration.Values);
			Assert.AreNotEqual(emitterStayingSame.EmitterData.Color.Values,
				emitterChanging.EmitterData.Color.Values);
			Assert.AreNotEqual(emitterStayingSame.EmitterData.StartRotation,
				emitterChanging.EmitterData.StartRotation);
		}
コード例 #39
0
		public void ParticleTracksEmitterAcrossScreenFor4Seconds()
		{
			emitterData = new ParticleEmitterData
			{
				MaximumNumberOfParticles = 1,
				SpawnInterval = 0.001f,
				Size = new RangeGraph<Size>(new Size(0.1f)),
				Color = new RangeGraph<Color>(Color.White),
				ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured, "ImageAnimation"),
				DoParticlesTrackEmitter = true
			};
			emitter = new ParticleEmitter(emitterData, new Vector2D(0.2f, 0.5f));
			emitter.Start<MoveAcrossScreen>();
			emitter.DisposeAfterSeconds(4);
			AdvanceTimeAndUpdateEntities();
		}
コード例 #40
0
		public void ParticlesSwirlAroundMousePosition()
		{
			emitterData = GetSwirlingParticleEmitterData();
			emitter = new ParticleEmitter(emitterData, Vector2D.Half);
			new Command(position => emitter.Position = position).Add(new MouseMovementTrigger());
		}
コード例 #41
0
		public void ParticleWithNoMaterialThrowsException()
		{
			emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
			emitterData.ParticleMaterial = null;
			Assert.Throws<ParticleEmitter.UnableToCreateWithoutMaterial>(
				() => new ParticleEmitter(emitterData, new Vector2D(0.5f, 0.5f)));
		}
コード例 #42
0
		public void DisposeEmitterAfterSetTime()
		{
			emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
			emitter = new ParticleEmitter(emitterData, Vector2D.Half);
			emitter.DisposeAfterSeconds(0.1f);
			AdvanceTimeAndUpdateEntities(0.25f);
			emitter.DisposeAfterSeconds(0.1f);
			Assert.IsFalse(emitter.IsActive);
		}
コード例 #43
0
		public void CreateRotatingParticles()
		{
			emitterData = CreateDataAndEmitterWithAnimation("DeltaEngineLogo");
			emitterData.StartRotation = new RangeGraph<ValueRange>(new ValueRange(0, 5),
				new ValueRange(45, 50));
			emitterData.RotationSpeed = new RangeGraph<ValueRange>(new ValueRange(300.0f, 320.0f),
				new ValueRange(50f, 80f));
			emitterData.Size = new RangeGraph<Size>(new Size(0.05f));
			emitter = new ParticleEmitter(emitterData, Vector2D.Half);
			emitter.Position = new Vector2D(0.5f, 0.7f);
		}
コード例 #44
0
		public void CreateEmitterAndKeepRunningWithSpriteSheetAnimation()
		{
			emitterData = CreateDataAndEmitterWithAnimation("EarthSpriteSheet");
			emitter = new ParticleEmitter(emitterData, Vector2D.Half);
			emitter.Position = new Vector2D(0.5f, 0.7f);
			AdvanceTimeAndUpdateEntities();
			Assert.IsTrue(emitter.IsPauseable);
		}
コード例 #45
0
		private ParticleEmitterData CreateDataAndEmitterWithAnimation(string contentName)
		{
			emitterData = new ParticleEmitterData
			{
				MaximumNumberOfParticles = 512,
				SpawnInterval = 0.1f,
				LifeTime = 5f,
				Size = new RangeGraph<Size>(new Size(0.05f), new Size(0.10f)),
				Color = new RangeGraph<Color>(Color.White),
				Acceleration = new RangeGraph<Vector3D>(new Vector2D(0, 0.1f)),
				StartVelocity =
					new RangeGraph<Vector3D>(new Vector2D(0, -0.3f), new Vector2D(0.05f, 0.01f)),
				ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured, contentName)
			};
			return emitterData;
		}
コード例 #46
0
		public void MultipleEmittersShallNotInterfere()
		{
			CreateDataAndEmitter(12, 0.1f, 5);
			var data = new ParticleEmitterData
			{
				MaximumNumberOfParticles = 12,
				SpawnInterval = 0.4f,
				LifeTime = 2,
				Size = new RangeGraph<Size>(new Size(0.03f)),
				Color = new RangeGraph<Color>(Color.Gray),
				Acceleration = new RangeGraph<Vector3D>(-Vector2D.UnitY),
				StartVelocity = new RangeGraph<Vector3D>(new Vector2D(0.3f, -0.1f)),
				ParticleMaterial = new Material(ShaderFlags.Position2DColoredTextured, "DeltaEngineLogo")
			};
			new ParticleEmitter(data, Vector2D.Half);
		}