/*
	ZStandardParticleUpdateStrategy.h
	Author: James Russell <jcrussell@762studios.com>

	Purpose: TODO

	Changelog
	2011/09/11 - creation (jcrussell)
*/

#pragma once

#ifndef _ZSTANDARDPARTICLEUPDATESTRATEGY_H
#define _ZSTANDARDPARTICLEUPDATESTRATEGY_H

#include <ZRendererUtil/ZParticleUpdateStrategy.h>

#define ZSP_DEFAULT_ENERGY_BLEED	(1)
#define ZSP_DEFAULT_ACCELERATION_X	(0.0f)
#define ZSP_DEFAULT_ACCELERATION_Y	(0.0f)
#define ZSP_DEFAULT_ACCELERATION_Z	(0.5f)

class ZStandardParticleUpdateStrategy : public ZParticleUpdateStrategy
{
protected:
	//Acceleration Vector
	ZVector3f ParticleAcceleration;

	//Energy drop per ms
	size_t EnergyBleed;

public:
	/*
	Default Constructor.
	*/
	ZStandardParticleUpdateStrategy();

	/*
	Destructor.
	*/
	~ZStandardParticleUpdateStrategy();

	/*
	public ZStandardParticleUpdateStrategy::GetEnergyBleed
	
	TODO
	
	@return (const size_t)
	@context (all)
	*/
	const size_t GetEnergyBleed();

	/*
	public ZStandardParticleUpdateStrategy::GetParticleAcceleration
	
	TODO
	
	@return (const ZVector3f)
	@context (all)
	*/
	const ZVector3f GetParticleAcceleration();

	/*
	public ZStandardParticleUpdateStrategy::SetEnergyBleed
	
	TODO
	
	@param _bleedRate - 
	@return (void)
	@context (all)
	*/
	void SetEnergyBleed(size_t _bleedRate);

	/*
	public ZStandardParticleUpdateStrategy::SetParticleAcceleration
	
	TODO
	
	@param _accel - 
	@return (void)
	@context (all)
	*/
	void SetParticleAcceleration(const ZVector3f& _accel);

	//Subclass Implementation
	virtual bool CheckParticleFormat( const ZString& _format );

	//Subclass Implementation
	virtual void UpdateParticles(ZParticleEffect* _particleEffect, 
								 ZParticleEmitter* _particleEmitter, 
								 ZParticleStorageAllocator* _storageAllocator, 
								 size_t _dt );

};

#endif
 
