// Author: Juan Carlos De Abreu (jcabreur@gmail.com)
//
// This class define an interface that allow make a transformation in the
// scene.

#ifndef SCENE_TRANSFORMATION_NODE_H__
#define SCENE_TRANSFORMATION_NODE_H__

#include "../../global.h"
#include "scene_node.h"

BEGIN_TEG_NAMESPACE();

class ITransformationNode : public ISceneNode {
 public:
  // ITransformationNode constructors and destructor.
  ITransformationNode(int type);
  ITransformationNode(int type, float x, float y, float z);
  virtual ~ITransformationNode();

  // Accessor and mutator methods to ITransformationNode attributes.
  inline float x() const { return x_; }
  inline float y() const { return y_; }
  inline float z() const { return z_; }
  inline void set_x(float x) { x_ = x; }
  inline void set_y(float y) { y_ = y; }
  inline void set_z(float z) { z_ = z; }

  // Method to apply the transformation.
  virtual void apply() = 0;

  // Method make an ITransformationNode copy.
  virtual SmartPointer<ISceneNode> copy() = 0;

 protected:
  // ITransformationNode attributes.
  float x_, y_, z_;

 private:
  DISALLOW_COPY_AND_ASSIGN(ITransformationNode);
};

END_TEG_NAMESPACE();

#endif  // SCENE_TRANSFORMATION_NODE_H__
