public override ParticleState changeState(UserParticle particle){
		if (Input.GetKeyDown (KeyCode.UpArrow)) {
			if (Random.Range(0,100) > 98){
				Debug.Log ("State: Floating");
				return new FloatingState();
			}
		}
		return null;
	}
	public override ParticleState changeState(UserParticle particle){
		if (Input.GetKeyDown (KeyCode.DownArrow)) {
			Debug.Log ("State: Returning");
			return new ReturningState();
		}
		return null;
	}
	public override void enter (UserParticle particle)
	{
		particle.rigidbody.isKinematic = false;
	}
	public override void enter (UserParticle particle)
	{
		particle.rigidbody.velocity = Vector3.zero;
		particle.rigidbody.isKinematic = true;
	}
	public virtual void update (UserParticle particle){}
	public virtual ParticleState changeState(UserParticle particle){
		return null;
	}
	public virtual void enter(UserParticle particle){}
	public override void update(UserParticle particle){
		particle.rigidbody.detectCollisions = false;
		particle.transform.position = Vector3.Lerp (particle.transform.position, particle.originPlatform.ParticleOriginalLocation (particle.xPositionInPlatform, particle.zPositionInPlatform), 0.1f);
		particle.transform.rotation = Quaternion.Lerp (particle.transform.rotation, Quaternion.AngleAxis(0, Vector3.zero), Time.time * 0.1f);

		if (Vector3.Distance(particle.transform.position, particle.originPlatform.ParticleOriginalLocation(particle.xPositionInPlatform, particle.zPositionInPlatform)) < 0.3f){

			particle.transform.position = particle.originPlatform.ParticleOriginalLocation(particle.xPositionInPlatform, particle.zPositionInPlatform);
			particle.transform.rotation = Quaternion.AngleAxis(0, Vector3.zero);

			//This seems dirty- should I be setting states here? I guess really I wouldn't be using input on the 'real' thing
			particle.state_ = new StaticState();
			particle.state_.enter(particle);
			Debug.Log ("State: Static");
		}

	}
	public override void update(UserParticle particle){
		particle.rigidbody.AddForce (particle.floatingAcceleration);
	}