#ifndef COMPUCELL3DTARGETVOLUMESTEPPABLE_H
#define COMPUCELL3DTARGETVOLUMESTEPPABLE_H


#include <CompuCell3D/Steppable.h>
#include <CompuCell3D/Potts3D/Cell.h>
/*#include <CompuCell3D/plugins/Volume/CellVolumeDynamicClassNode.h>
#include <CompuCell3D/plugins/Surface/CellSurfaceDynamicClassNode.h>*/
#include <CompuCell3D/Automaton/CellTypeDynamicClassNode.h>

#include <BasicUtils/BasicClassAccessor.h>

namespace CompuCell3D {

/**
@author m
*/
//forward declarations
class Potts3D;
class CellInventory;
class DiffusionSolverFE;


class TargetVolumeSteppable : public Steppable
{
protected:

   Potts3D *potts;
   CellInventory * cellInventoryPtr;
   unsigned int currentStep;
   float initialTargetVolume;
   DiffusionSolverFE * diffusionSolverPtr;   


public:
    TargetVolumeSteppable();

    virtual ~TargetVolumeSteppable();


    void (TargetVolumeSteppable::*setInitTargetVolume)(CellG * _cell);///ptr to member method setting initial target volume
    void simpleInitTargetVolume(CellG * _cell);
    void (TargetVolumeSteppable::*updateTargetVolume)(CellG * _cell);///ptr to member method  setting step-updated target volume
    void simpleUpdateTargetVolume(CellG * _cell);
    
    
    virtual void init(Simulator *simulator);

    // Begin Steppable interface
    virtual void start();
    virtual void step(const unsigned int _currentStep);
    virtual void finish() {}
    // End Steppable interface

    // Begin XMLSerializable interface
    virtual void readXML(XMLPullParser &in);
    virtual void writeXML(XMLSerializer &out){};
    // End XMLSerializable interface

    
};

};

#endif
