#ifndef _GUIEFFECTCANVAS_H_
#define _GUIEFFECTCANVAS_H_

#include "gui/core/guiCanvas.h"
#include "core/iTickable.h"
#include "dgl/gVectorField.h"
#include "dgl/gDynamicTexture.h"

class GuiEffectCanvas : public GuiCanvas, public virtual ITickable
{
   typedef GuiCanvas Parent;

protected:
   bool mEffectInProgress;
   bool mVisualizeField;
   bool mUpdateFeedbackTexture;
   bool mStartEffect;

   U32 mEffectTickCount;

   VectorField *mVectorField;
   DynamicTexture mFeedbackTexture;
   ColorF mClearColor;

   Point2I mLastSize;

public:
   DECLARE_CONOBJECT(GuiEffectCanvas);

   GuiEffectCanvas();
   ~GuiEffectCanvas();

   // Change rendering to support the effects
   virtual void renderFrame( bool preRenderOnly, bool bufferSwap = true );

   // To adjust the vector field
   virtual void canvasResized();

   // This will start the effect!
   virtual void setContentControl(GuiControl *gui);

   // ITickable stuff
   virtual void processTick();

   virtual void interpolateTick( F32 delta ) {};
   virtual void advanceTime( F32 timeDelta ) {};
};

#endif