    package flare.physics
    {
        /**
         * Represents a Particle in a physics simulation. A particle is a
         * point-mass (or point-charge) subject to physical forces.
         */
        public class Particle
        {
            /** The mass (or charge) of the particle. */
            public var mass:Number;
            /** The number of springs (degree) attached to this particle. */
            public var degree:Number;
            /** The x position of the particle. */
            public var x:Number;
            /** The y position of the particle. */
            public var y:Number;
            /** The x velocity of the particle. */
            public var vx:Number;
            /** A temporary x velocity variable. */
            public var _vx:Number;
            /** The y velocity of the particle. */
            public var vy:Number;
            /** A temporary y velocity variable. */
            public var _vy:Number;
            /** The x force exerted on the particle. */
            public var fx:Number;
            /** The y force exerted on the particle. */
            public var fy:Number;
            /** The age of the particle in simulation ticks. */
            public var age:Number;
            /** Flag indicating if the particule should have a fixed position. */
            public var fixed:Boolean;
            /** Flag indicating that the particle is scheduled for removal. */
            public var die:Boolean;
            /** Tag property for storing an arbitrary value. */
            public var tag:uint;

            /**
             * Creates a new Particle with given parameters.
             * @param mass the mass (or charge) of the particle
             * @param x the x position of the particle
             * @param y the y position of the particle
             * @param vx the x velocity of the particle
             * @param vy the y velocity of the particle
             * @param fixed flag indicating if the particle should have a
             *  fixed position
             */
            public function Particle(mass:Number=1, x:Number=0, y:Number=0,
                                     vx:Number=0, vy:Number=0, fixed:Boolean=false)
            {
                init(mass, x, y, vx, vy, fixed);
            }

            /**
             * Initializes an existing particle instance.
             * @param mass the mass (or charge) of the particle
             * @param x the x position of the particle
             * @param y the y position of the particle
             * @param vx the x velocity of the particle
             * @param vy the y velocity of the particle
             * @param fixed flag indicating if the particle should have a
             *  fixed position
             */
            public function init(mass:Number=1, x:Number=0, y:Number=0,
                vx:Number=0, vy:Number=0, fixed:Boolean=false):void
            {
                this.mass = mass;
                this.degree = 0;
                this.x = x;
                this.y = y;
                this.vx = this._vx = vx;
                this.vy = this._vy = vy;
                this.fx = 0;
                this.fy = 0;
                this.age = 0;
                this.fixed = fixed;
                this.die = false;
                this.tag = 0;
            }

            /**
             * "Kills" this particle, scheduling it for removal in the next
             * simulation cycle.
             */
            public function kill():void {
                this.die = true;
            }

        } // end of class Particle
    }