2007-11-04 03:34:51 +00:00
/*
2012-03-17 20:01:54 +00:00
Copyright ( C ) 1999 - 2007 id Software , Inc . and contributors .
For a list of contributors , see the accompanying CONTRIBUTORS file .
2007-11-04 03:34:51 +00:00
2012-03-17 20:01:54 +00:00
This file is part of GtkRadiant .
2007-11-04 03:34:51 +00:00
2012-03-17 20:01:54 +00:00
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 .
2007-11-04 03:34:51 +00:00
2012-03-17 20:01:54 +00:00
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 .
2007-11-04 03:34:51 +00:00
2012-03-17 20:01:54 +00:00
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
*/
2007-11-04 03:34:51 +00:00
# ifndef _IMODEL_H_
# define _IMODEL_H_
# define MODEL_MAJOR "model"
/*!
2012-03-17 20:01:54 +00:00
loads model from model file name specified ,
fills model struct with pointers to model interfaces
2007-11-04 03:34:51 +00:00
2012-03-17 20:01:54 +00:00
name is a relative path , we ' ll use VFS to extract a basepath to add to get the absolute path .
*/
typedef void ( * PFN_LOADMODEL ) ( entity_interfaces_t * model , const char * name ) ;
2007-11-04 03:34:51 +00:00
struct _QERPlugModelTable
{
2012-03-17 20:01:54 +00:00
int m_nSize ;
PFN_LOADMODEL m_pfnLoadModel ;
2007-11-04 03:34:51 +00:00
} ;
//forward declare entity_t
struct entity_s ;
typedef struct entity_s entity_t ;
// any module relying on imodel will need to link against the mathlib
# include "mathlib.h"
// state flags
# define DRAW_GL_FILL 0x0001
# define DRAW_GL_LIGHTING 0x0010
# define DRAW_GL_TEXTURE_2D 0x0100
# define DRAW_GL_BLEND 0x1000
// predefined state combinations
2012-03-17 20:01:54 +00:00
# define DRAW_GL_WIRE 0x0000
# define DRAW_GL_FLAT 0x0001
# define DRAW_GL_SOLID 0x0011
# define DRAW_GL_TEXTURED 0x0111
2007-11-04 03:34:51 +00:00
// mode
2012-03-17 20:01:54 +00:00
# define DRAW_WIRE 0
# define DRAW_SOLID 1
# define DRAW_TEXTURED 2
2007-11-04 03:34:51 +00:00
// render flags
# define DRAW_RF_NONE 0x0000
# define DRAW_RF_SEL_OUTLINE 0x0001
# define DRAW_RF_SEL_FILL 0x0010
# define DRAW_RF_XY 0x0011
# define DRAW_RF_CAM 0x0100
class IRender
{
public :
2012-03-17 20:01:54 +00:00
virtual ~ IRender ( ) { }
virtual void IncRef ( ) = 0 ; // increments the reference counter for this object
virtual void DecRef ( ) = 0 ; // decrements the reference counter for this object, deletes the object if reference count is zero
virtual void Draw ( int state , int rflags ) const = 0 ; // render the object - state = the opengl state
2015-11-11 10:56:29 +00:00
virtual const bool IsModelNotNull ( ) const = 0 ;
2012-03-17 20:01:54 +00:00
virtual const aabb_t * GetAABB ( ) const = 0 ;
2007-11-04 03:34:51 +00:00
} ;
class ISelect
{
public :
2012-03-17 20:01:54 +00:00
virtual ~ ISelect ( ) { }
virtual void IncRef ( ) = 0 ; // increments the reference counter for this object
virtual void DecRef ( ) = 0 ; // decrements the reference counter for this object, deletes the object if reference count is zero
virtual bool TestRay ( const ray_t * ray , vec_t * dist ) const = 0 ; // test ray intersection, return bool true if intersects, and store distance to closest point of intersection
//virtual bool TestBox(const aabb_t *aabb) const = 0; // test aabb intersection, return bool true if touching or intersecting
2007-11-04 03:34:51 +00:00
} ;
class IEdit
{
public :
2012-03-17 20:01:54 +00:00
virtual ~ IEdit ( ) { }
virtual void IncRef ( ) = 0 ; // increments the reference counter for this object
virtual void DecRef ( ) = 0 ; // decrements the reference counter for this object, deletes the object if reference count is zero
virtual void Translate ( const vec3_t translation ) = 0 ;
virtual void Rotate ( const vec3_t pivot , const vec3_t rotation ) = 0 ;
virtual const vec_t * GetTranslation ( ) const = 0 ;
virtual const vec_t * GetRotation ( ) const = 0 ;
virtual void OnKeyValueChanged ( entity_t * e , const char * key , const char * value ) = 0 ;
2007-11-04 03:34:51 +00:00
} ;
# endif /* _IMODEL_H_ */