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

	Purpose: TODO

	Changelog
	2011/08/28 - creation (jcrussell)
*/

#pragma once

#ifndef _ZPARTICLEUPDATESTRATEGY_H
#define _ZPARTICLEUPDATESTRATEGY_H

#include <ZUtil/ZUtil.hpp>

//Forward Declarations
class ZParticleEffect;
class ZParticleEmitter;
class ZParticleStorageAllocator;

class ZParticleUpdateStrategy
{
public:
	//Virtual Destructor
	~ZParticleUpdateStrategy() { }

	/*
	virtual public ZParticleUpdateStrategy::CheckParticleFormat
	
	Checks to see if this update strategy can update the provided particle format.
	
	@param _format - string description of the particle format
	@return (bool) - true if this udpate strategy can handle it, false otherwise
	@context (all)
	*/
	virtual bool CheckParticleFormat(const ZString& _format) = 0;

	/*
	virtual public ZParticleUpdateStrategy::UpdateParticles
	
	Updates the particle data present in particle storage.
	
	@param _particleEffect - the emitter's parent particle effect
	@param _particleEmitter - the parent emitter
	@param _storageAllocator - the particle data storage
	@param _dt - the time (in millisecond) since last update
	@return (void)
	@context (all)
	*/
	virtual void UpdateParticles(ZParticleEffect* _particleEffect, 
								 ZParticleEmitter* _particleEmitter, 
								 ZParticleStorageAllocator* _storageAllocator, 
								 size_t _dt
								 ) = 0;
};

#endif
 