2011-02-23 10:52:22 +00:00
/*
2002-10-12 11:37:38 +00:00
* $ Id $
2008-04-16 22:40:48 +00:00
* * * * * * BEGIN GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*
* This program 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
2008-04-16 22:40:48 +00:00
* of the License , or ( at your option ) any later version .
2002-10-12 11:37:38 +00:00
*
* This program 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 this program ; if not , write to the Free Software Foundation ,
2010-02-12 13:34:04 +00:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2002-10-12 11:37:38 +00:00
*
* The Original Code is Copyright ( C ) 2001 - 2002 by NaN Holding BV .
* All rights reserved .
*
* The Original Code is : all of this file .
*
* Contributor ( s ) : none yet .
*
2008-04-16 22:40:48 +00:00
* * * * * * END GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*/
2011-02-25 13:30:41 +00:00
/** \file gameengine/Converter/KX_ConvertProperties.cpp
* \ ingroup bgeconv
*/
2002-10-12 11:37:38 +00:00
# include "KX_ConvertProperties.h"
# include "DNA_object_types.h"
# include "DNA_property_types.h"
/* end of blender include block */
2009-09-06 13:20:05 +00:00
2002-10-12 11:37:38 +00:00
# include "Value.h"
# include "VectorValue.h"
# include "BoolValue.h"
# include "StringValue.h"
# include "FloatValue.h"
# include "KX_GameObject.h"
# include "IntValue.h"
# include "SCA_TimeEventManager.h"
# include "SCA_IScene.h"
2009-09-06 13:20:05 +00:00
/* This little block needed for linking to Blender... */
# ifdef WIN32
# include "BLI_winstuff.h"
# endif
2002-10-12 11:37:38 +00:00
void BL_ConvertProperties ( Object * object , KX_GameObject * gameobj , SCA_TimeEventManager * timemgr , SCA_IScene * scene , bool isInActiveLayer )
{
bProperty * prop = ( bProperty * ) object - > prop . first ;
CValue * propval ;
bool show_debug_info ;
while ( prop )
{
propval = NULL ;
show_debug_info = bool ( prop - > flag & PROP_DEBUG ) ;
switch ( prop - > type ) {
2008-12-24 21:23:07 +00:00
case GPROP_BOOL :
{
propval = new CBoolValue ( ( bool ) ( prop - > data ! = 0 ) ) ;
gameobj - > SetProperty ( prop - > name , propval ) ;
//promp->poin= &prop->data;
break ;
}
case GPROP_INT :
{
propval = new CIntValue ( ( int ) prop - > data ) ;
gameobj - > SetProperty ( prop - > name , propval ) ;
break ;
}
case GPROP_FLOAT :
{
//prop->poin= &prop->data;
float floatprop = * ( ( float * ) & prop - > data ) ;
propval = new CFloatValue ( floatprop ) ;
gameobj - > SetProperty ( prop - > name , propval ) ;
}
2002-10-12 11:37:38 +00:00
break ;
2008-12-24 21:23:07 +00:00
case GPROP_STRING :
2002-10-12 11:37:38 +00:00
{
2008-12-24 21:23:07 +00:00
//prop->poin= callocN(MAX_PROPSTRING, "property string");
propval = new CStringValue ( ( char * ) prop - > poin , " " ) ;
gameobj - > SetProperty ( prop - > name , propval ) ;
break ;
2002-10-12 11:37:38 +00:00
}
2008-12-24 21:23:07 +00:00
case GPROP_TIME :
{
float floatprop = * ( ( float * ) & prop - > data ) ;
2002-10-12 11:37:38 +00:00
2008-12-24 21:23:07 +00:00
CValue * timeval = new CFloatValue ( floatprop ) ;
// set a subproperty called 'timer' so that
// we can register the replica of this property
// at the time a game object is replicated (AddObjectActuator triggers this)
CValue * bval = new CBoolValue ( true ) ;
timeval - > SetProperty ( " timer " , bval ) ;
bval - > Release ( ) ;
if ( isInActiveLayer )
{
timemgr - > AddTimeProperty ( timeval ) ;
}
propval = timeval ;
gameobj - > SetProperty ( prop - > name , timeval ) ;
}
default :
{
// todo make an assert etc.
}
2002-10-12 11:37:38 +00:00
}
if ( propval )
{
if ( show_debug_info )
{
scene - > AddDebugProperty ( gameobj , STR_String ( prop - > name ) ) ;
}
2008-03-01 19:46:50 +00:00
// done with propval, release it
propval - > Release ( ) ;
2002-10-12 11:37:38 +00:00
}
2009-06-08 20:08:19 +00:00
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2009-06-08 20:08:19 +00:00
/* Warn if we double up on attributes, this isnt quite right since it wont find inherited attributes however there arnt many */
for ( PyAttributeDef * attrdef = KX_GameObject : : Attributes ; attrdef - > m_name ; attrdef + + ) {
if ( strcmp ( prop - > name , attrdef - > m_name ) = = 0 ) {
printf ( " Warning! user defined property name \" %s \" is also a python attribute for object \" %s \" \n \t Use ob[ \" %s \" ] syntax to avoid conflict \n " , prop - > name , object - > id . name + 2 , prop - > name ) ;
break ;
}
}
for ( PyMethodDef * methdef = KX_GameObject : : Methods ; methdef - > ml_name ; methdef + + ) {
if ( strcmp ( prop - > name , methdef - > ml_name ) = = 0 ) {
printf ( " Warning! user defined property name \" %s \" is also a python method for object \" %s \" \n \t Use ob[ \" %s \" ] syntax to avoid conflict \n " , prop - > name , object - > id . name + 2 , prop - > name ) ;
break ;
}
}
/* end warning check */
2010-10-31 04:11:39 +00:00
# endif // WITH_PYTHON
2002-10-12 11:37:38 +00:00
prop = prop - > next ;
}
2008-09-25 16:19:07 +00:00
// check if state needs to be debugged
if ( object - > scaflag & OB_DEBUGSTATE )
{
// reserve name for object state
scene - > AddDebugProperty ( gameobj , STR_String ( " __state__ " ) ) ;
}
2002-10-12 11:37:38 +00:00
}