]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/brush.h
refactored CONTENTS_DETAIL macro
[xonotic/netradiant.git] / radiant / brush.h
index b0a932d86deeacfdeea692e4e27bd6fdb3ada5ae..b4c0f0934d0e7ffccc2f97bfce18cbd744257ce3 100644 (file)
@@ -65,8 +65,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include "winding.h"
 #include "brush_primit.h"
 
-#define CONTENTS_DETAIL 0x8000000
-
+const unsigned int BRUSH_DETAIL_FLAG = 27;
+const unsigned int BRUSH_DETAIL_MASK = (1 << BRUSH_DETAIL_FLAG);
 
 enum EBrushType
 {
@@ -378,14 +378,18 @@ public:
   bool m_specified;
 };
 
-inline unsigned int ContentFlags_assignable(unsigned int contentFlags)
+inline void ContentsFlagsValue_assignMasked(ContentsFlagsValue& flags, const ContentsFlagsValue& other)
 {
-  return contentFlags & ~CONTENTS_DETAIL;
-}
-
-inline ContentsFlagsValue ContentsFlagsValue_maskDetail(const ContentsFlagsValue& other)
-{
-  return ContentsFlagsValue(other.m_surfaceFlags, ContentFlags_assignable(other.m_contentFlags), other.m_value, other.m_specified);
+  bool detail = bitfield_enabled(flags.m_contentFlags, BRUSH_DETAIL_MASK);
+  flags = other;
+  if(detail)
+  {
+    flags.m_contentFlags = bitfield_enable(flags.m_contentFlags, BRUSH_DETAIL_MASK);
+  }
+  else
+  {
+    flags.m_contentFlags = bitfield_disable(flags.m_contentFlags, BRUSH_DETAIL_MASK);
+  }
 }
 
 
@@ -526,7 +530,7 @@ public:
   void setFlags(const ContentsFlagsValue& flags)
   {
     ASSERT_MESSAGE(m_realised, "FaceShader::setFlags: flags not valid when unrealised");
-    m_flags = ContentsFlagsValue_maskDetail(flags);
+    ContentsFlagsValue_assignMasked(m_flags, flags);
   }
 
   Shader* state() const
@@ -955,6 +959,7 @@ public:
 };
 
 bool face_filtered(Face& face);
+void add_face_filter(FaceFilter& filter, int mask, bool invert = false);
 
 void Brush_addTextureChangedCallback(const SignalHandler& callback);
 void Brush_textureChanged();
@@ -1411,18 +1416,18 @@ public:
 
   bool isDetail() const
   {
-    return (m_shader.m_flags.m_contentFlags & CONTENTS_DETAIL) != 0;
+    return (m_shader.m_flags.m_contentFlags & BRUSH_DETAIL_MASK) != 0;
   }
   void setDetail(bool detail)
   {
     undoSave();
     if(detail && !isDetail())
     {
-      m_shader.m_flags.m_contentFlags |= CONTENTS_DETAIL;
+      m_shader.m_flags.m_contentFlags |= BRUSH_DETAIL_MASK;
     }
     else if(!detail && isDetail())
     {
-      m_shader.m_flags.m_contentFlags &= ~CONTENTS_DETAIL;
+      m_shader.m_flags.m_contentFlags &= ~BRUSH_DETAIL_MASK;
     }
     m_observer->shaderChanged();
   }
@@ -4101,7 +4106,7 @@ public:
 template<typename Functor>
 inline const Functor& Brush_ForEachFaceInstance(BrushInstance& brush, const Functor& functor)
 {
-  brush.forEachFaceInstance(FaceInstanceVisitAll<Functor>(functor)));
+  brush.forEachFaceInstance(FaceInstanceVisitAll<Functor>(functor));
   return functor;
 }
 
@@ -4140,7 +4145,7 @@ public:
   {
     if(path.top().get().visible())
     {
-      BrushInstance* brush = Instance_getIBrush(instance);
+      BrushInstance* brush = Instance_getBrush(instance);
       if(brush != 0)
       {
         m_functor(*brush);