//
//  Vrml 97 library
//  Copyright (C) 1998 Chris Morley
//
//  %W% %G%
//  VrmlNodeMovieTexture.h

#ifndef  _VRMLNODEMOVIETEXTURE_
#define  _VRMLNODEMOVIETEXTURE_

#include "VrmlNodeTexture.h"
#include "VrmlMFString.h"
#include "VrmlSFBool.h"
#include "VrmlSFFloat.h"
#include "VrmlSFTime.h"
#include "Viewer.h"

class Image;

class VrmlNodeMovieTexture : public VrmlNodeTexture {

public:

  // Define the fields of MovieTexture nodes
  static VrmlNodeType *defineType(VrmlNodeType *t = 0);
  virtual VrmlNodeType *nodeType() const;

  VrmlNodeMovieTexture(VrmlScene *);
  virtual ~VrmlNodeMovieTexture();

  virtual VrmlNode *cloneMe() const;

  virtual VrmlNodeMovieTexture* toMovieTexture() const;

  virtual void addToScene( VrmlScene *s, const char *relUrl );

  virtual ostream& printFields(ostream& os, int indent);

  void update( VrmlSFTime &now );

  virtual void render(Viewer *);

  virtual void eventIn(double timeStamp,
		       const char *eventName,
		       const VrmlField *fieldValue);

  virtual void setField(const char *fieldName, const VrmlField &fieldValue);

  virtual int nComponents();
  virtual int width();
  virtual int height();
  virtual int nFrames();
  virtual unsigned char* pixels();

private:

  VrmlSFBool d_loop;
  VrmlSFFloat d_speed;
  VrmlSFTime d_startTime;
  VrmlSFTime d_stopTime;

  VrmlMFString d_url;
  VrmlSFBool d_repeatS;
  VrmlSFBool d_repeatT;

  VrmlSFTime d_duration;
  VrmlSFBool d_isActive;

  Image *d_image;
  int d_frame, d_lastFrame;
  double d_lastFrameTime;

  Viewer::TextureObject d_texObject;

};

#endif // _VRMLNODEMOVIETEXTURE_

