/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined( INCLUDED_IBRUSH_H ) #define INCLUDED_IBRUSH_H #include "generic/constant.h" #include "generic/callback.h" #include "generic/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() : m_shader( "" ), contents( 0 ), flags( 0 ), value( 0 ){ } 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 BrushFaceDataCallback; class BrushCreator { public: INTEGER_CONSTANT( Version, 1 ); STRING_CONSTANT( Name, "brush" ); virtual scene::Node& createBrush() = 0; virtual bool useAlternativeTextureProjection() const = 0; virtual void Brush_forEachFace( scene::Node& brush, const BrushFaceDataCallback& callback ) = 0; virtual bool Brush_addFace( scene::Node& brush, const _QERFaceData& faceData ) = 0; }; #include "modulesystem.h" template class GlobalModule; typedef GlobalModule GlobalBrushModule; template class GlobalModuleRef; typedef GlobalModuleRef GlobalBrushModuleRef; inline BrushCreator& GlobalBrushCreator(){ return GlobalBrushModule::getTable(); } #endif