Changeset 833


Ignore:
Timestamp:
2010-06-15 11:25:38 (9 years ago)
Author:
sijoseha
Message:

Building up.
We have something on the screen already!

Location:
2010/23/sijoseha/alpha/Effects
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • 2010/23/sijoseha/alpha/Effects/Explosion.cs

    r831 r833  
    1717    { 
    1818 
    19         public Explosion(ParticleGame game, Vector2 position) 
    20             : base(game, position) 
     19        public Explosion(ParticleGame game) 
     20            : base(game) 
    2121        { 
    2222 
     
    2525        protected override void InitializeParticles() 
    2626        { 
    27             textureName = "Glow"; 
     27            textureName = "Glow2"; 
     28            innerTextureName = "Glow"; 
     29            outerTextureName = "Glow2"; 
    2830 
    29  
    30             textureType = TextureType.Single; 
     31            textureType = TextureType.Dual; 
    3132 
    3233            minLifetime = 0.5f; 
     
    3637            maxScale = 1.0f; 
    3738 
    38             minVelocity = 5f; 
    39             maxVelocity = 10f; 
     39            minVelocity = 20; 
     40            maxVelocity = 40; 
    4041 
    4142            rotation = 0.0f; 
     43            rotationSpeed = MathHelper.PiOver4; 
     44 
     45            maxAmountOfParticles = 6; 
     46        } 
     47 
     48        protected override void InitializeParticle(Particle p, Vector2 position) 
     49        { 
     50            base.InitializeParticle(p, position); 
    4251        } 
    4352    } 
  • 2010/23/sijoseha/alpha/Effects/Particle.cs

    r831 r833  
    1919        #region Variables, getters and setters 
    2020 
     21        /// <summary> 
     22        /// Position of the particle 
     23        /// </summary> 
    2124        private Vector2 position; 
    2225        public Vector2 Position 
     
    2629        } 
    2730 
     31        /// <summary> 
     32        /// Texture of the particle 
     33        /// </summary> 
    2834        private Texture2D texture; 
    2935        public Texture2D Texture 
     
    3339        } 
    3440 
     41        /// <summary> 
     42        /// Scaling of the particle 
     43        /// </summary> 
    3544        private float scale; 
    3645        public float Scale 
     
    4049        } 
    4150 
     51        /// <summary> 
     52        /// Rotation of the particle 
     53        /// </summary> 
    4254        private float rotation; 
    4355        public float Rotation 
     
    4759        } 
    4860 
     61        /// <summary> 
     62        /// Origin of the particles texture 
     63        /// </summary> 
    4964        private Vector2 origin; 
    5065        public Vector2 Origin 
     
    5469        } 
    5570 
     71        /// <summary> 
     72        /// Velocity of the particle 
     73        /// </summary> 
    5674        private Vector2 velocity; 
    5775        public Vector2 Velocity 
     
    6179        } 
    6280 
    63         private bool alive; 
     81        /// <summary> 
     82        /// Whether particle is alive or not 
     83        /// a.k.a will it be updated and drawn 
     84        /// </summary> 
    6485        public bool Alive 
    6586        { 
    66             get { return alive; } 
    67             set { alive = value; } 
     87            get { return currentTime < lifetime; } 
    6888        } 
    6989 
     90        /// <summary> 
     91        /// Lifetime of the particle 
     92        /// </summary> 
    7093        private float lifetime; 
    7194        public float Lifetime 
     
    7598        } 
    7699 
     100        /// <summary> 
     101        /// Current time been alive 
     102        /// </summary> 
    77103        private float currentTime; 
    78104        public float CurrentTime 
     
    84110        #endregion 
    85111 
     112        /// <summary> 
     113        /// Initilize the particle 
     114        /// </summary> 
     115        /// <param name="position">Position of particle</param> 
     116        /// <param name="scale">Scale of particle</param> 
     117        /// <param name="rotation">Rotation of particle</param> 
     118        /// <param name="velocity">Velocity of particle</param> 
     119        /// <param name="lifetime">Lifetime of particle</param> 
    86120        public void Initialize(Vector2 position, float scale, float rotation, Vector2 velocity, float lifetime) 
    87121        { 
    88             this.alive = true; 
    89122            this.position = position; 
    90123            this.scale = scale; 
    91124            this.lifetime = lifetime; 
    92125            this.rotation = rotation; 
    93             this.origin = new Vector2(texture.Width / 2, texture.Height / 2); 
     126            this.velocity = velocity; 
     127            //this.origin = new Vector2(texture.Width / 2, texture.Height / 2); 
    94128 
    95129            this.currentTime = 0.0f; 
     
    101135        /// - Update for rotation, velocity etc. 
    102136        /// </summary> 
    103         /// <param name="time"></param> 
     137        /// <param name="time">Time since last update</param> 
    104138        public void Update(float time) 
    105139        { 
    106             this.position = velocity * time; 
    107             this.currentTime += time; 
     140            position += velocity * time; 
     141            currentTime += time; 
    108142        } 
    109143    } 
  • 2010/23/sijoseha/alpha/Effects/ParticleGame.cs

    r831 r833  
    3232        Explosion explosion; 
    3333 
     34        float timeTillPuff = 0.0f; 
     35        float timeBetweenPuffs = 3.0f; 
     36 
     37 
    3438        public ParticleGame() 
    3539        { 
    3640            graphics = new GraphicsDeviceManager(this); 
    3741 
    38             explosion = new Explosion(this, Vector2.Zero); 
     42            explosion = new Explosion(this); 
     43            Components.Add(explosion); 
    3944 
    4045            Content.RootDirectory = "Content"; 
     
    8489        { 
    8590            float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; 
     91            timeTillPuff -= dt; 
     92            if (timeTillPuff < 0) 
     93            { 
     94                explosion.AddEffect(new Vector2(100, 100)); 
     95                timeTillPuff = timeBetweenPuffs; 
     96            } 
    8697            base.Update(gameTime); 
    8798        } 
  • 2010/23/sijoseha/alpha/Effects/ParticleSystem.cs

    r831 r833  
    1616    public abstract class ParticleSystem : DrawableGameComponent 
    1717    { 
     18        // Gives us Content and SpriteBatch 
    1819        private ParticleGame game; 
    1920 
    20         private Particle[] particles; 
     21        // Random 
     22        Random random = new Random(); 
     23 
     24        // Array for particles in one effect 
     25        Particle[] particles; 
     26 
     27        // Queue for free particles 
     28        Queue<Particle> freeParticles; 
    2129 
    2230        /// <summary> 
     
    4452        protected float maxLifetime; 
    4553 
     54        protected float rotationSpeed; 
     55 
     56        protected int maxAmountOfParticles; 
     57 
    4658        #endregion 
    4759 
     60        // Does the effect use single texture or dual texture 
    4861        protected enum TextureType 
    4962        { 
     
    5265        }; 
    5366 
     67        // Does the effect use single or dual texture 
    5468        protected TextureType textureType; 
    5569 
     70        // Textures for effect 
    5671        private Texture2D texture, innerTexture, outerTexture; 
     72 
     73        // Origin of textures 
    5774        private Vector2 textureOrigin; 
    5875 
    59         private int maxAmountOfParticles; 
     76        // Maximum amount of particles the effect can use 
     77        /*private int maxAmountOfParticles; 
    6078        public int MaxAmountOfParticles 
    6179        { 
    6280            get { return maxAmountOfParticles; } 
    6381            set { maxAmountOfParticles = value; } 
    64         } 
    65  
    66         public ParticleSystem(ParticleGame game, Vector2 position) 
     82        }*/ 
     83 
     84        /// <summary> 
     85        /// Constructor 
     86        /// </summary> 
     87        /// <param name="game">Game where the effect is used</param> 
     88        /// <param name="position">Position where the effect is displayed</param> 
     89        public ParticleSystem(ParticleGame game) 
    6790            : base(game) 
    6891        { 
     
    7093        } 
    7194 
     95        /// <summary> 
     96        /// Initializes the particle system 
     97        /// </summary> 
     98        public override void Initialize() 
     99        { 
     100            InitializeParticles(); 
     101 
     102            particles = new Particle[maxAmountOfParticles]; 
     103            freeParticles = new Queue<Particle>(maxAmountOfParticles); 
     104            for (int i = 0; i < maxAmountOfParticles; i++) 
     105            { 
     106                particles[i] = new Particle(); 
     107                freeParticles.Enqueue(particles[i]); 
     108            } 
     109            base.Initialize(); 
     110        } 
     111 
     112        /// <summary> 
     113        /// Method that describes variables for the effect 
     114        /// Must be called by subclasses 
     115        /// </summary> 
    72116        protected abstract void InitializeParticles(); 
    73117 
    74         protected virtual void InitializeParticle(Particle p, Vector2 position) 
    75         { 
    76             Vector2 direction = new Vector2(-100, 0); 
    77  
    78             float scale = 1.0f; 
    79             float rotation = 0.0f; 
    80             float velocity = 1.0f; 
    81             float lifetime = 1.0f; 
    82  
    83             p.Initialize(position, scale, rotation, velocity * direction, lifetime); 
    84         } 
    85  
    86         public override void Initialize() 
    87         { 
    88             particles = new Particle[maxAmountOfParticles]; 
    89             for (int i = 0; i < maxAmountOfParticles; i++) 
    90             { 
    91                 particles[i] = new Particle(); 
    92             } 
    93             base.Initialize(); 
    94         } 
    95  
     118        /// <summary> 
     119        /// Loads textures for the effect and calculates origins 
     120        /// </summary> 
    96121        protected override void LoadContent() 
    97122        { 
     
    113138        } 
    114139 
     140        public void AddEffect(Vector2 where) 
     141        { 
     142            int numParticles = 10; 
     143            for (int i = 0; i < numParticles && freeParticles.Count > 0; i++) 
     144            { 
     145                Particle p = freeParticles.Dequeue(); 
     146                InitializeParticle(p, where); 
     147            } 
     148        } 
     149 
     150        protected virtual Vector2 GiveRandomDirection() 
     151        { 
     152            float angle = (float)random.NextDouble() * MathHelper.TwoPi; 
     153            return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); 
     154        } 
     155 
     156        /// <summary> 
     157        /// Initializes single particle in the effect 
     158        /// </summary> 
     159        /// <param name="p">Particle to be initialize</param> 
     160        /// <param name="position">Position where to initialize</param> 
     161        protected virtual void InitializeParticle(Particle p, Vector2 position) 
     162        { 
     163            Vector2 direction = GiveRandomDirection(); 
     164 
     165            float scale = 1.0f; 
     166            float rotation = 1.0f; 
     167            float velocity = maxVelocity; 
     168            float lifetime = 1.0f; 
     169 
     170            p.Initialize(position, scale, rotation, velocity * direction, lifetime); 
     171        } 
     172 
     173        /// <summary> 
     174        /// Called when particle system is updated 
     175        /// </summary> 
     176        /// <param name="gameTime">Gametime</param> 
    115177        public override void Update(GameTime gameTime) 
    116178        { 
     
    122184                { 
    123185                    p.Update(time); 
     186 
     187                    if (!p.Alive) 
     188                    { 
     189                        freeParticles.Enqueue(p); 
     190                    } 
    124191                } 
    125192            } 
     
    128195        } 
    129196 
     197        /// <summary> 
     198        /// Called when particle system needs to be drawn 
     199        /// </summary> 
     200        /// <param name="gameTime">Gametime</param> 
    130201        public override void Draw(GameTime gameTime) 
    131202        { 
     
    144215                { 
    145216                    game.SpriteBatch.Draw(outerTexture, p.Position, null, Color.White, p.Rotation, textureOrigin, p.Scale, SpriteEffects.None, 1.0f); 
    146                     game.SpriteBatch.Draw(innerTexture, p.Position, null, Color.White, p.Rotation, textureOrigin, p.Scale, SpriteEffects.None, 1.0f); 
    147                 } 
    148             } 
     217                    game.SpriteBatch.Draw(innerTexture, p.Position, null, Color.White, p.Rotation, textureOrigin, p.Scale*0.6f, SpriteEffects.None, 1.0f); 
     218                } 
     219            } 
     220            game.SpriteBatch.End(); 
    149221            base.Draw(gameTime); 
    150222        } 
Note: See TracChangeset for help on using the changeset viewer.