/* Sparx * Copyright August Zinsser 2007 * This program is distributed under the terms of the GNU General Public License */ using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Pina3D.Particles { public class Directional : Force { private Vector3 mDirection; public Vector3 Direction { set { mDirection = value; ReCalculateForceVector(); } get { return mDirection; } } public override float Magnitude { set { mMagnitude = value; ReCalculateForceVector(); } get { return mMagnitude; } } public Directional(string name, float lifeSpan, float delay, Vector3 direction, float magnitude) : base(name, lifeSpan, delay) { mDirection = direction; mMagnitude = magnitude; ReCalculateForceVector(); } public override Object Clone() { Directional retFo = new Directional(mName + "_clone", mAge, mDelay, mDirection, mMagnitude); return retFo; } public override void Update(Emission emission) { if (emission != null && emission.Age > mDelay && emission.Age < mLifeExpectancy + mDelay) emission.Velocity3D += Vector3.Multiply(mForceVector, Pina.ElapsedSeconds); } private void ReCalculateForceVector() { mForceVector = mDirection; if (mForceVector != Vector3.Zero) mForceVector.Normalize(); mForceVector = Vector3.Multiply(mForceVector, mMagnitude); } } }