aboutsummaryrefslogtreecommitdiffstats
path: root/q3radiant/IEpairs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'q3radiant/IEpairs.cpp')
-rwxr-xr-xq3radiant/IEpairs.cpp185
1 files changed, 185 insertions, 0 deletions
diff --git a/q3radiant/IEpairs.cpp b/q3radiant/IEpairs.cpp
new file mode 100755
index 0000000..626e8cd
--- /dev/null
+++ b/q3radiant/IEpairs.cpp
@@ -0,0 +1,185 @@
+/*
+===========================================================================
+Copyright (C) 1999-2005 Id Software, Inc.
+
+This file is part of Quake III Arena source code.
+
+Quake III Arena source code 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.
+
+Quake III Arena source code 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 Foobar; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+===========================================================================
+*/
+//-----------------------------------------------------------------------------
+//
+// $LogFile$
+// $Revision: 1.1.1.4 $
+// $Author: ttimo $
+// $Date: 2000/01/18 00:17:12 $
+// $Log: IEpairs.cpp,v $
+// Revision 1.1.1.4 2000/01/18 00:17:12 ttimo
+// merging in for RC
+//
+// Revision 1.3 2000/01/17 23:53:41 TBesset
+// ready for merge in sourceforge (RC candidate)
+//
+// Revision 1.2 2000/01/07 16:40:10 TBesset
+// merged from BSP frontend
+// Revision 1.1.1.3 1999/12/29 18:31:26 TBesset
+// Q3Radiant public version
+//
+//
+// Revision 1.2 1999/11/22 17:46:45 Timo & Christine
+// merged EARadiant into the main tree
+// bug fixes for Q3Plugin / EAPlugin
+// export for Robert
+//
+// Revision 1.1.2.1 1999/11/03 20:37:59 Timo & Christine
+// MEAN plugin for Q3Radiant, alpha version
+//
+//
+// DESCRIPTION:
+// virtual class to allow plugin operations on entities epairs
+//
+
+#include "stdafx.h"
+
+void CEpairsWrapper::GetVectorForKey( char* key, vec3_t vec )
+{
+ ::GetVectorForKey( m_pEnt, key, vec );
+}
+
+float CEpairsWrapper::FloatForKey( char *key )
+{
+ return ::FloatForKey( m_pEnt, key );
+}
+
+char* CEpairsWrapper::ValueForKey( char *key )
+{
+ return ::ValueForKey( m_pEnt, key );
+}
+
+void CEpairsWrapper::SetKeyValue( char *key, char *value )
+{
+ ::SetKeyValue( m_pEnt, key, value );
+}
+
+void CEpairsWrapper::GetEntityOrigin( vec3_t vec )
+{
+ VectorCopy( m_pEnt->origin, vec );
+}
+
+// taken from Ritual's version of Q3Radiant ( Entity_CalculateRotatedBounds )
+void CEpairsWrapper::CalculateRotatedBounds( vec3_t mins, vec3_t maxs )
+{
+ entity_t *ent = m_pEnt;
+ int i;
+ float angle;
+ vec3_t angles;
+ vec3_t forward,right,up;
+ vec3_t rotmins, rotmaxs;
+ float trans[3][3];
+ qboolean changed;
+ char tempangles[ 128 ];
+
+ memset( angles, 0, sizeof(vec3_t) );
+ ::GetVectorForKey (ent, "angles", angles);
+
+ changed = false;
+ while ( angles[0] < 0 )
+ {
+ changed = true;
+ angles[0] += 360;
+ }
+ while ( angles[0] > 359 )
+ {
+ changed = true;
+ angles[0] -= 360;
+ }
+ while ( angles[1] < 0 )
+ {
+ changed = true;
+ angles[1] += 360;
+ }
+ while ( angles[1] > 359 )
+ {
+ changed = true;
+ angles[1] -= 360;
+ }
+ while ( angles[2] < 0 )
+ {
+ changed = true;
+ angles[2] += 360;
+ }
+ while ( angles[2] > 359 )
+ {
+ changed = true;
+ angles[2] -= 360;
+ }
+
+ if ( changed )
+ {
+ sprintf( tempangles, "%d %d %d", (int)angles[0], (int)angles[1], (int)angles[2] );
+ ::SetKeyValue ( ent, "angles", tempangles );
+ }
+
+
+ angle = ::FloatForKey (ent, "angle");
+ if ( fabs(angle) > 2 )
+ {
+ angles[1] = angle;
+ }
+ else if (angle == -1)
+ {
+ angles[0] = -90;
+ }
+ else if (angle == -2)
+ {
+ angles[0] = 90;
+ }
+ ::AngleVectors( angles, forward, right, up );
+ for (i=0 ; i<3 ; i++)
+ {
+ trans[i][0] = forward[i];
+ trans[i][1] = -right[i];
+ trans[i][2] = up[i];
+ }
+ ClearBounds( rotmins, rotmaxs );
+ for ( i = 0; i < 8; i++ )
+ {
+ int j;
+ vec3_t tmp, rottemp;
+
+ if ( i & 1 )
+ tmp[0] = mins[0];
+ else
+ tmp[0] = maxs[0];
+
+ if ( i & 2 )
+ tmp[1] = mins[1];
+ else
+ tmp[1] = maxs[1];
+
+ if ( i & 4 )
+ tmp[2] = mins[2];
+ else
+ tmp[2] = maxs[2];
+
+ for (j=0; j<3 ; j++)
+ {
+ rottemp[j] = DotProduct( tmp, trans[j] );
+ }
+ AddPointToBounds( rottemp, rotmins, rotmaxs );
+ }
+ VectorCopy( rotmins, mins );
+ VectorCopy( rotmaxs, maxs );
+}