source: 2010/23/sijoseha/alpha/Effects/ParticleGame.cs @ 802

Revision 802, 6.3 KB checked in by sijoseha, 9 years ago (diff)

Effects reach alpha status

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Microsoft.Xna.Framework;
5using Microsoft.Xna.Framework.Audio;
6using Microsoft.Xna.Framework.Content;
7using Microsoft.Xna.Framework.GamerServices;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Microsoft.Xna.Framework.Net;
12using Microsoft.Xna.Framework.Storage;
13
14namespace Effects
15{
16    /// <summary>
17    /// This is the main type for your game
18    /// </summary>
19    public class ParticleGame : Microsoft.Xna.Framework.Game
20    {
21        GraphicsDeviceManager graphics;
22        SpriteBatch spriteBatch;
23       
24       
25        Particle[] particles;
26        Random random = new Random();
27        const int amountOfParticles = 15;
28
29        KeyboardState previousKeyboardState = Keyboard.GetState();
30
31        public ParticleGame()
32        {
33            graphics = new GraphicsDeviceManager(this);
34            Content.RootDirectory = "Content";
35        }
36
37        /// <summary>
38        /// Allows the game to perform any initialization it needs to before starting to run.
39        /// This is where it can query for any required services and load any non-graphic
40        /// related content.  Calling base.Initialize will enumerate through any components
41        /// and initialize them as well.
42        /// </summary>
43        protected override void Initialize()
44        {
45            // TODO: Add your initialization logic here
46
47            base.Initialize();
48        }
49
50        /// <summary>
51        /// LoadContent will be called once per game and is the place to load
52        /// all of your content.
53        /// </summary>
54        protected override void LoadContent()
55        {
56            particles = new Particle[amountOfParticles];
57            Texture2D glowTexture = Content.Load<Texture2D>("Glow");
58            Texture2D glowTexture2 = Content.Load<Texture2D>("Glow2");
59            // Create a new SpriteBatch, which can be used to draw textures.
60            spriteBatch = new SpriteBatch(GraphicsDevice);
61            for (int i = 0; i < particles.Length; i++)
62            {
63                particles[i] = new Particle(this, glowTexture, glowTexture2, new Vector2(
64                    (float)random.NextDouble() * graphics.GraphicsDevice.Viewport.Width,
65                    (float)random.NextDouble() * graphics.GraphicsDevice.Viewport.Height), 2.0f);
66                particles[i].Scale = (float)random.NextDouble();//0.2f + (float)random.NextDouble() * 0.8f;
67                particles[i].Velocity = new Vector2(
68                    (float)random.NextDouble() * 5 - 2.5f,
69                    (float)random.NextDouble() * 5 - 2.5f);
70
71            }
72            // TODO: use this.Content to load your game content here
73        }
74
75        /// <summary>
76        /// UnloadContent will be called once per game and is the place to unload
77        /// all content.
78        /// </summary>
79        protected override void UnloadContent()
80        {
81            // TODO: Unload any non ContentManager content here
82        }
83
84        /// <summary>
85        /// Allows the game to run logic such as updating the world,
86        /// checking for collisions, gathering input, and playing audio.
87        /// </summary>
88        /// <param name="gameTime">Provides a snapshot of timing values.</param>
89        protected override void Update(GameTime gameTime)
90        {
91            float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
92            KeyboardState keyboardState = Keyboard.GetState();
93            MouseState mouseState = Mouse.GetState();
94            // Allows the game to exit
95            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
96                this.Exit();
97            for (int i = 0; i < particles.Length; i++)
98            {
99                if (particles[i].Alive)
100                {
101                    particles[i].CurrentTime += dt;
102                    particles[i].Scale = 1.0f - (particles[i].Lifetime * particles[i].CurrentTime);
103                    particles[i].Position += particles[i].Velocity;
104                    if (particles[i].CurrentTime > particles[i].Lifetime)
105                    {
106                        particles[i].Alive = false;
107                    }
108                }
109                if (!particles[i].Alive)
110                {
111                    particles[i].Alive = true;
112                    particles[i].Lifetime = 2.0f;
113                    particles[i].CurrentTime = 0.0f;
114                    particles[i].Scale = 1.0f;
115                    particles[i].Position = new Vector2(
116                        (float)mouseState.X,
117                        (float)mouseState.Y);
118                    particles[i].Velocity = new Vector2(
119                        (float)random.NextDouble() * 5 - 2.5f,
120                        (float)random.NextDouble() * 5 - 2.5f);
121                    //particles[i].Position = new Vector2(
122                    //(float)random.NextDouble() * graphics.GraphicsDevice.Viewport.Width,
123                    //(float)random.NextDouble() * graphics.GraphicsDevice.Viewport.Height);
124                }
125            }
126
127            // TODO: Add your update logic here
128
129            previousKeyboardState = keyboardState;
130            base.Update(gameTime);
131        }
132
133        /// <summary>
134        /// This is called when the game should draw itself.
135        /// </summary>
136        /// <param name="gameTime">Provides a snapshot of timing values.</param>
137        protected override void Draw(GameTime gameTime)
138        {
139            GraphicsDevice.Clear(Color.Black);
140            spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
141            foreach (Particle p in particles)
142            {
143                if (p.Alive)
144                {
145                    Color color = new Color(1.0f, 1.0f, 1.0f, 1.0f - (p.Lifetime * p.CurrentTime));
146                    spriteBatch.Draw(p.Texture, p.Position, null, color, p.Rotation, p.Origin, p.Scale, SpriteEffects.None, 1.0f);
147                    spriteBatch.Draw(p.InnerTexture, p.Position, null, color, p.Rotation, p.Origin, p.Scale*0.8f, SpriteEffects.None, 1.0f);
148                }
149            }
150            spriteBatch.End();
151            // TODO: Add your drawing code here
152
153            base.Draw(gameTime);
154        }
155    }
156}
Note: See TracBrowser for help on using the repository browser.