-/*\r
-BobToolz plugin for GtkRadiant\r
-Copyright (C) 2001 Gordon Biggans\r
-\r
-This library is free software; you can redistribute it and/or\r
-modify it under the terms of the GNU Lesser General Public\r
-License as published by the Free Software Foundation; either\r
-version 2.1 of the License, or (at your option) any later version.\r
-\r
-This library is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-Lesser General Public License for more details.\r
-\r
-You should have received a copy of the GNU Lesser General Public\r
-License along with this library; if not, write to the Free Software\r
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
-*/\r
-\r
-#ifndef __DTREE_H__\r
-#define __DTREE_H__\r
-\r
-#include "../include/igl.h"\r
-#include "DEntity.h"\r
-#include "misc.h"\r
-#include "ScriptParser.h"\r
-\r
-#define MAX_QPATH 64\r
-\r
-typedef struct treeModel_s {\r
- char name[MAX_QPATH];\r
-} treeModel_t;\r
-\r
-#define MAX_TP_MODELS 256\r
-\r
-class DTreePlanter : public IWindowListener {\r
-public:\r
- virtual bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y);\r
- virtual bool OnKeyPressed(char *s) { return false; }\r
- virtual bool Paint() { return true; }\r
- virtual void Close() { }\r
- \r
- DTreePlanter() {\r
- m_refCount = 1;\r
- m_hooked = false;\r
- m_XYWrapper = NULL;\r
- m_numModels = 0;\r
- m_offset = 0;\r
- m_maxPitch = 0;\r
- m_minPitch = 0;\r
- m_maxYaw = 0;\r
- m_minYaw = 0;\r
- m_setAngles = false;\r
- m_useScale = false;\r
- m_autoLink = false;\r
- m_linkNum = 0;\r
-\r
- Register();\r
-\r
- m_world.LoadSelectedBrushes();\r
-\r
- char buffer[256];\r
- GetFilename( buffer, "bt/tp_ent.txt" );\r
-\r
- FILE* file = fopen( buffer, "rb" );\r
- if(file) {\r
- fseek( file, 0, SEEK_END );\r
- int len = ftell( file );\r
- fseek( file, 0, SEEK_SET );\r
-\r
- if(len) {\r
- char* buf = new char[len+1];\r
- buf[len] = '\0';\r
- // parser will do the cleanup, dont delete.\r
-\r
- fread( buf, len, 1, file );\r
-\r
- CScriptParser parser;\r
- parser.SetScript( buf );\r
-\r
- ReadConfig( &parser );\r
- }\r
-\r
- fclose( file );\r
- }\r
- }\r
-\r
-#define MT(t) !stricmp( pToken, t )\r
-#define GT pToken = pScriptParser->GetToken( true )\r
-#define CT if(!*pToken) { return; }\r
-\r
- void ReadConfig( CScriptParser* pScriptParser ) {\r
- const char* GT;\r
- CT;\r
-\r
- do {\r
- GT;\r
- if(*pToken == '}') {\r
- break;\r
- }\r
-\r
- if(MT("model")) {\r
- if(m_numModels >= MAX_TP_MODELS) {\r
- return;\r
- }\r
-\r
- GT; CT;\r
-\r
- strncpy( m_trees[m_numModels++].name, pToken, MAX_QPATH );\r
- } else if(MT("link")) {\r
- GT; CT;\r
-\r
- strncpy( m_linkName, pToken, MAX_QPATH );\r
-\r
- m_autoLink = true;\r
- } else if(MT("entity")) {\r
- GT; CT;\r
-\r
- strncpy( m_entType, pToken, MAX_QPATH );\r
- } else if(MT("offset")) {\r
- GT; CT;\r
-\r
- m_offset = atoi(pToken);\r
- } else if(MT("pitch")) {\r
- GT; CT;\r
-\r
- m_minPitch = atoi(pToken);\r
-\r
- GT; CT;\r
-\r
- m_maxPitch = atoi(pToken);\r
-\r
- m_setAngles = true;\r
- } else if(MT("yaw")) {\r
- GT; CT;\r
-\r
- m_minYaw = atoi(pToken);\r
-\r
- GT; CT;\r
-\r
- m_maxYaw = atoi(pToken);\r
-\r
- m_setAngles = true;\r
- } else if(MT("scale")) {\r
- GT; CT;\r
-\r
- m_minScale = static_cast< float >( atof( pToken ) );\r
-\r
- GT; CT;\r
-\r
- m_maxScale = static_cast< float >( atof( pToken ) );\r
-\r
- m_useScale = true;\r
- } else if(MT("numlinks")) {\r
- GT; CT;\r
-\r
- m_linkNum = atoi( pToken );\r
- }\r
- } while( true );\r
- }\r
-\r
- virtual ~DTreePlanter() {\r
- UnRegister();\r
- }\r
-\r
- virtual void IncRef() { m_refCount++; }\r
- virtual void DecRef() { m_refCount--; if (m_refCount <= 0) delete this; }\r
-\r
- void Register() {\r
- if(!m_hooked) {\r
- g_MessageTable.m_pfnHookWindow( this );\r
- m_XYWrapper = g_MessageTable.m_pfnGetXYWndWrapper();\r
- m_hooked = true;\r
- }\r
- }\r
-\r
- void UnRegister() {\r
- if(m_hooked) {\r
- g_MessageTable.m_pfnUnHookWindow( this );\r
- m_XYWrapper = NULL;\r
- m_hooked = false;\r
- }\r
- }\r
-\r
- bool FindDropPoint(vec3_t in, vec3_t out);\r
- void DropEntsToGround( void );\r
- void MakeChain( void );\r
- void SelectChain( void );\r
-\r
-private:\r
- IXYWndWrapper* m_XYWrapper;\r
- DEntity m_world;\r
-\r
- treeModel_t m_trees[MAX_TP_MODELS];\r
-\r
- int m_refCount;\r
- int m_numModels;\r
- int m_offset;\r
- int m_maxPitch;\r
- int m_minPitch;\r
- int m_maxYaw;\r
- int m_minYaw;\r
-\r
- char m_entType[MAX_QPATH];\r
- char m_linkName[MAX_QPATH];\r
- int m_linkNum;\r
-\r
- float m_minScale;\r
- float m_maxScale;\r
-\r
- bool m_hooked;\r
- bool m_useScale;\r
- bool m_setAngles;\r
- bool m_autoLink;\r
-};\r
-\r
-#endif\r
+/*
+BobToolz plugin for GtkRadiant
+Copyright (C) 2001 Gordon Biggans
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef __DTREE_H__
+#define __DTREE_H__
+
+#include "../include/igl.h"
+#include "DEntity.h"
+#include "misc.h"
+#include "ScriptParser.h"
+
+#define MAX_QPATH 64
+
+typedef struct treeModel_s {
+ char name[MAX_QPATH];
+} treeModel_t;
+
+#define MAX_TP_MODELS 256
+
+class DTreePlanter : public IWindowListener {
+public:
+ virtual bool OnMouseMove(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnLButtonDown(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnMButtonDown(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnRButtonDown(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnLButtonUp(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnMButtonUp(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnRButtonUp(guint32 nFlags, gdouble x, gdouble y);
+ virtual bool OnKeyPressed(char *s) { return false; }
+ virtual bool Paint() { return true; }
+ virtual void Close() { }
+
+ DTreePlanter() {
+ m_refCount = 1;
+ m_hooked = false;
+ m_XYWrapper = NULL;
+ m_numModels = 0;
+ m_offset = 0;
+ m_maxPitch = 0;
+ m_minPitch = 0;
+ m_maxYaw = 0;
+ m_minYaw = 0;
+ m_setAngles = false;
+ m_useScale = false;
+ m_autoLink = false;
+ m_linkNum = 0;
+
+ Register();
+
+ m_world.LoadSelectedBrushes();
+
+ char buffer[256];
+ GetFilename( buffer, "bt/tp_ent.txt" );
+
+ FILE* file = fopen( buffer, "rb" );
+ if(file) {
+ fseek( file, 0, SEEK_END );
+ int len = ftell( file );
+ fseek( file, 0, SEEK_SET );
+
+ if(len) {
+ char* buf = new char[len+1];
+ buf[len] = '\0';
+ // parser will do the cleanup, dont delete.
+
+ fread( buf, len, 1, file );
+
+ CScriptParser parser;
+ parser.SetScript( buf );
+
+ ReadConfig( &parser );
+ }
+
+ fclose( file );
+ }
+ }
+
+#define MT(t) !stricmp( pToken, t )
+#define GT pToken = pScriptParser->GetToken( true )
+#define CT if(!*pToken) { return; }
+
+ void ReadConfig( CScriptParser* pScriptParser ) {
+ const char* GT;
+ CT;
+
+ do {
+ GT;
+ if(*pToken == '}') {
+ break;
+ }
+
+ if(MT("model")) {
+ if(m_numModels >= MAX_TP_MODELS) {
+ return;
+ }
+
+ GT; CT;
+
+ strncpy( m_trees[m_numModels++].name, pToken, MAX_QPATH );
+ } else if(MT("link")) {
+ GT; CT;
+
+ strncpy( m_linkName, pToken, MAX_QPATH );
+
+ m_autoLink = true;
+ } else if(MT("entity")) {
+ GT; CT;
+
+ strncpy( m_entType, pToken, MAX_QPATH );
+ } else if(MT("offset")) {
+ GT; CT;
+
+ m_offset = atoi(pToken);
+ } else if(MT("pitch")) {
+ GT; CT;
+
+ m_minPitch = atoi(pToken);
+
+ GT; CT;
+
+ m_maxPitch = atoi(pToken);
+
+ m_setAngles = true;
+ } else if(MT("yaw")) {
+ GT; CT;
+
+ m_minYaw = atoi(pToken);
+
+ GT; CT;
+
+ m_maxYaw = atoi(pToken);
+
+ m_setAngles = true;
+ } else if(MT("scale")) {
+ GT; CT;
+
+ m_minScale = static_cast< float >( atof( pToken ) );
+
+ GT; CT;
+
+ m_maxScale = static_cast< float >( atof( pToken ) );
+
+ m_useScale = true;
+ } else if(MT("numlinks")) {
+ GT; CT;
+
+ m_linkNum = atoi( pToken );
+ }
+ } while( true );
+ }
+
+ virtual ~DTreePlanter() {
+ UnRegister();
+ }
+
+ virtual void IncRef() { m_refCount++; }
+ virtual void DecRef() { m_refCount--; if (m_refCount <= 0) delete this; }
+
+ void Register() {
+ if(!m_hooked) {
+ g_MessageTable.m_pfnHookWindow( this );
+ m_XYWrapper = g_MessageTable.m_pfnGetXYWndWrapper();
+ m_hooked = true;
+ }
+ }
+
+ void UnRegister() {
+ if(m_hooked) {
+ g_MessageTable.m_pfnUnHookWindow( this );
+ m_XYWrapper = NULL;
+ m_hooked = false;
+ }
+ }
+
+ bool FindDropPoint(vec3_t in, vec3_t out);
+ void DropEntsToGround( void );
+ void MakeChain( void );
+ void SelectChain( void );
+
+private:
+ IXYWndWrapper* m_XYWrapper;
+ DEntity m_world;
+
+ treeModel_t m_trees[MAX_TP_MODELS];
+
+ int m_refCount;
+ int m_numModels;
+ int m_offset;
+ int m_maxPitch;
+ int m_minPitch;
+ int m_maxYaw;
+ int m_minYaw;
+
+ char m_entType[MAX_QPATH];
+ char m_linkName[MAX_QPATH];
+ int m_linkNum;
+
+ float m_minScale;
+ float m_maxScale;
+
+ bool m_hooked;
+ bool m_useScale;
+ bool m_setAngles;
+ bool m_autoLink;
+};
+
+#endif