Ejemplo n.º 1
0
        private void SetupParticleSystem()
        {
            particleSystem = new ParticleSystem();
            shipEffect     = new ParticleEffect();
            Texture2D texture1 = Content.Load <Texture2D>("Images/smoke2");
            Texture2D texture2 = Content.Load <Texture2D>("Images/smoke3");

            ParticleEmitter shipEmitter = new ConeEmitter(Vector2.Zero,
                                                          MathHelper.ToRadians(90));

            shipEmitter.AddTexture(texture1);
            shipEmitter.AddTexture(texture2);
            shipEmitter.Quantity = 10;
            shipEmitter.AddPropertyGenerator(new RandomSpeedGenerator(2.01f, 4.0f, 1.0f));
            shipEmitter.AddPropertyGenerator(new ConstantColorGenerator(Color.Green * 0.7f));
            shipEmitter.AddPropertyGenerator(new RandomTTLGenerator(2.0f, 5.0f, 1.0f));
            shipEmitter.AddParticleModifier(new ScaleModifier2(0.1f, 2.0f));
            shipEmitter.AddParticleModifier(new DepthModifier2(0.0f, 1.0f));
            shipEmitter.AddParticleModifier(new OpacityModifier2(0.6f, 0f));
            shipEmitter.AddParticleModifier(new DampingLinearVelocityModifier(0.99f));
            shipEmitter.AddParticleModifier(new RotationModifier2(-1.0f, 1.0f));
            shipEffect.AddEmitter(shipEmitter);
            particleSystem.AddEffect(shipEffect);

            shipEffect2 = new ParticleEffect();
            ParticleEmitter shipEmitter2 = new ConeEmitter(Vector2.Zero,
                                                           MathHelper.ToRadians(90));

            shipEmitter2.AddTexture(texture1);
            shipEmitter2.AddTexture(texture2);
            shipEmitter2.Quantity = 10;
            shipEmitter2.AddPropertyGenerator(new RandomSpeedGenerator(2.01f, 4.0f, 1.0f));
            shipEmitter2.AddPropertyGenerator(new ConstantColorGenerator(Color.Yellow * 0.7f));
            shipEmitter2.AddPropertyGenerator(new RandomTTLGenerator(2.0f, 5.0f, 1.0f));
            shipEmitter2.AddParticleModifier(
                new ScaleModifier2(0.1f, 2.0f));
            shipEmitter2.AddParticleModifier(
                new DepthModifier2(0.0f, 1.0f));
            shipEmitter2.AddParticleModifier(
                new OpacityModifier2(0.6f, 0f));
            shipEmitter2.AddParticleModifier(new DampingLinearVelocityModifier(0.99f));
            shipEmitter2.AddParticleModifier(new RotationModifier2(-1.0f, 1.0f));
            shipEffect2.AddEmitter(shipEmitter2);
            particleSystem.AddEffect(shipEffect2);
        }
        protected override void Initialize()
        {
            content     = new ContentManager(Services, "Content");
            spriteBatch = new SpriteBatch(GraphicsDevice);
            viewport    = GraphicsDevice.Viewport;

            Texture2D tex1 = content.Load <Texture2D>("Images/smoke2");

            particleSystem  = new ParticleSystem();
            Effect          = new ParticleEffect();
            Effect.Rotation = 0f;
            Effect.Position = new Vector2(viewport.Width / 2, viewport.Height / 2);
            ParticleEmitter emitter = new CircleEmitter(new Circle(100.0f, Vector2.Zero));

            emitter.AutoGenerate = true;
            ParticleGenerationParams config = new ParticleGenerationParams();

            config.AddTexture(tex1);
            config.ColorRangeStart          = Color.Red;
            config.ColorRangeEnd            = Color.Yellow;
            config.QuantityRange            = new Vector2(10, 100);
            config.Flags                    = EmitterCastStyle.None;
            config.ScaleRange               = new Vector2(0.1f, 1.1f);
            config.DepthRange               = new Vector2(0.0f, 1.0f);
            config.OpacityRange             = new Vector2(0.6f, 0f);
            config.InitialSpeedRange        = new Vector2(0.1f, 2.0f);
            config.SpeedDamping             = 0.99f;
            config.RotationRange            = new Vector2(-1.0f, 1.0f);
            config.InitialRotationVariation = 1.0f;
            config.TTLRange                 = new Vector2(500.0f, 4000.0f); emitter.Configuration = config;
            Effect.AddEmitter(emitter);
            particleSystem.AddEffect(Effect);

            // Start the animation timer.
//            timer = Stopwatch.StartNew();
            timer          = new FpsTimer(1.0f / 20);
            totalTimeSpan  = TimeSpan.FromTicks(DateTime.Now.Ticks);
            timer.Elapsed += timer_Elapsed;
            timer.Start();
            gameTime = new GameTime(TimeSpan.Zero, TimeSpan.Zero);

            // Hook the idle event to constantly redraw our animation.
            Application.Idle += delegate { Invalidate(); };
        }
Ejemplo n.º 3
0
        public override void LoadContent()
        {
            base.LoadContent();
            menuEntries  = new List <MenuEntry>();
            entryTexture = StateManager.Content.Load <Texture2D>("Images/button_clean");
            Vector2 pos = new Vector2(Bounds.Width / 2, 100);

            playMenuEntry           = CreateMenuEntry(entryTexture, "Play", pos, Keys.F1);
            playMenuEntry.AnimState = -0.5f;
            pos.Y                     += entryTexture.Height + 10;
            optionsMenuEntry           = CreateMenuEntry(entryTexture, "Options", pos, Keys.F2);
            optionsMenuEntry.AnimState = 0.0f;
            pos.Y                     += entryTexture.Height + 10;
            physicsMenuEntry           = CreateMenuEntry(entryTexture, "Physics", pos, Keys.F3);
            physicsMenuEntry.AnimState = 1.0f;
            pos.Y                     += entryTexture.Height + 10;
            exitMenuEntry              = CreateMenuEntry(entryTexture, "Exit", pos, Keys.Escape);
            exitMenuEntry.AnimState    = 0.5f;

            // AnimatedSprite
            // This will make a sprite which animates when mouse is clicked in it.

/*
 *          animSprite = new AnimatedSprite(StateManager.Content.Load<Texture2D>("Images/soniccd"), 11, 1);
 *          animSprite.Position = new Vector2(Bounds.Width / 2, 400);
 *          animSprite.Style = AnimatedSprite.AnimationStyle.Manual;
 *          animSprite.InputEventSource = StateManager.Input;
 *          AddComponent(animSprite);
 */
            // TextureAtlas
            // Make textureatlas from the example image
            atlas = new TextureAtlas(StateManager.Content.Load <Texture2D>("Images/soniccd"), 11, 1);

            // Make AnimatedSprite from the atlas
            animSprite                  = new AnimatedSprite(atlas, 0, atlas.Frames - 1, 25);
            animSprite.Position         = new Vector2(Bounds.Width / 2, 400);
            animSprite.Style            = AnimatedSprite.AnimationStyle.Manual;
            animSprite.InputEventSource = StateManager.Input;
            AddComponent(animSprite);

            // This will use a image with 11 columns and 1 rows. And makes a
            // sprite for frame 2 (second frame).
            atlasSprite          = atlas.MakeSprite(1);
            atlasSprite.Position = new Vector2(Bounds.Width / 2, 600);
            atlasSprite.Scale    = 4.0f;
            // TODO: This adds a component to the canvas but canvas does not yet
            // Draw it automatically. See Draw() here, it does atlasSprite.Draw(..).
            AddComponent(atlasSprite);

            // Set up a simple smoke effect
            particleSystem = new ParticleSystem();
//            particleSystem.EnableCache(6000, 10000);
            particleEffect          = new ParticleEffect(20000);
            particleEffect.Rotation = 0f;
            particleEffect.Position = Vector2.Zero;

//            emitter = new LineEmitter(new Vector2(-200,0), new Vector2(200,0));
//            emitter = new PointEmitter(Vector2.Zero);
//            emitter = new ConeEmitter(Vector2.Zero, MathHelper.ToRadians(45));
            emitter          = new CircleEmitter(new Circle(50.0f, new Vector2(0, 0)));
            emitter.Quantity = 2000;
            emitter.AddPropertyGenerator(new RandomSpeedGenerator(30.0f, 30.0f, 1.0f));
            emitter.AddPropertyGenerator(new RandomScaleGenerator(0.1f, 0.5f, 1.0f));
            emitter.AddPropertyGenerator(new RandomOpacityGenerator(0.5f, 0.0f, 1.0f));
            emitter.AddPropertyGenerator(new RandomRotationGenerator(0.0f, MathConstants.TwoPI, 1.0f));
            emitter.AddPropertyGenerator(new RandomAngularVelocityGenerator(-1.0f, 1.0f, 1.0f));
            emitter.AddPropertyGenerator(new RandomTTLGenerator(0.5f, 10.0f, 1.0f));
            emitter.AddPropertyGenerator(new RandomColorGenerator(Color.White, Color.Red));
            emitter.AddParticleModifier(new OpacityModifier1(0.0f));
            emitter.AddParticleModifier(new ScaleModifier1(1.0f));
            emitter.AddParticleModifier(new DampingLinearVelocityModifier(1.001f));

            emitter.Flags |= EmitterModes.AutoGenerate;
            emitter.AddTexture(StateManager.Content.Load <Texture2D>("Images/smoke1"));
            emitter.AddTexture(StateManager.Content.Load <Texture2D>("Images/smoke2"));
            emitter.AddTexture(StateManager.Content.Load <Texture2D>("Images/smoke3"));
            particleEffect.AddEmitter(emitter);
            particleSystem.AddEffect(particleEffect);
        }