]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - include/ibrush.h
refactored plugin api; refactored callback library; added signals library
[xonotic/netradiant.git] / include / ibrush.h
index 318ee55278daac4aa360b8540ad08fc9a7d1c794..187ebcc4a02e7b2284b855616a192a0cb8663356 100644 (file)
@@ -23,12 +23,81 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #define INCLUDED_IBRUSH_H
 
 #include "generic/constant.h"
+#include "generic/callback.h"
+#include "math/vector.h"
+#include "itexdef.h"
 
 namespace scene
 {
   class Node;
 }
 
+#if 0
+class IBrushFace
+{
+public:
+  virtual const char* GetShader() const = 0;
+  virtual void SetShader(const char* name) = 0;
+  virtual const TextureProjection& GetTexdef() const = 0;
+  virtual void GetTexdef(TextureProjection& projection) const = 0;
+  virtual void SetTexdef(const TextureProjection& projection) = 0;
+  virtual void GetFlags(ContentsFlagsValue& flags) const = 0;
+  virtual void SetFlags(const ContentsFlagsValue& flags) = 0;
+  virtual void ShiftTexdef(float s, float t) = 0;
+  virtual void ScaleTexdef(float s, float t) = 0;
+  virtual void RotateTexdef(float angle) = 0;
+  virtual void FitTexture(float s_repeat, float t_repeat) = 0;
+  virtual bool isDetail() const = 0;
+  virtual void setDetail(bool detail) = 0;
+};
+
+class IBrush
+{
+public:
+  STRING_CONSTANT(Name, "IBrush");
+  virtual void reserve(std::size_t count) = 0;
+  virtual void clear() = 0;
+  virtual void copy(const IBrush& other) = 0;
+  virtual IBrushFace* addPlane(const Vector3& p0, const Vector3& p1, const Vector3& p2, const char* shader, const TextureProjection& projection) = 0;
+  virtual const AABB& localAABB() const = 0;
+  virtual void removeEmptyFaces() = 0;
+};
+
+class IBrushFaceInstance
+{
+public:
+  virtual IBrushFace& getFace() = 0;
+  virtual const IBrushFace& getFace() const = 0;
+  virtual bool isSelected() const = 0;
+  virtual void setSelected(SelectionSystem::EComponentMode mode, bool select) const = 0;
+};
+
+class IBrushInstance
+{
+public:
+  STRING_CONSTANT(Name, "IBrushInstance");
+  virtual void forEachFaceInstance(const BrushInstanceVisitor& visitor) = 0;
+};
+#endif
+
+class _QERFaceData
+{
+public:
+  _QERFaceData() : contents(0), flags(0), value(0), m_shader("")
+  {
+  }
+  Vector3 m_p0;
+  Vector3 m_p1;
+  Vector3 m_p2;
+  texdef_t m_texdef;
+  const char* m_shader;
+  int contents;
+  int flags;
+  int value;
+};
+
+typedef Callback1<const _QERFaceData&> BrushFaceDataCallback;
+
 class BrushCreator
 {
 public:
@@ -36,6 +105,8 @@ public:
   STRING_CONSTANT(Name, "brush");
   virtual scene::Node& createBrush() = 0;
   virtual bool useAlternativeTextureProjection() const = 0;
+  virtual void forEachBrushFace(scene::Node& brush, const BrushFaceDataCallback& callback) = 0;
+  virtual bool addBrushFace(scene::Node& brush, const _QERFaceData& faceData) = 0;
 };
 
 #include "modulesystem.h"