Index: source/blender/editors/space_logic/logic_window.c =================================================================== --- source/blender/editors/space_logic/logic_window.c (revision 32619) +++ source/blender/editors/space_logic/logic_window.c (working copy) @@ -3867,9 +3867,11 @@ switch (RNA_enum_get(ptr, "mode")) { case ACT_EDOB_ADD_OBJECT: - row = uiLayoutRow(layout, 0); + split = uiLayoutSplit(layout, 0.9, 0); + row = uiLayoutRow(split, 0); uiItemR(row, ptr, "object", 0, NULL, 0); uiItemR(row, ptr, "time", 0, NULL, 0); + uiItemR(split,ptr,"unique_names",UI_ITEM_R_TOGGLE,NULL,0); split = uiLayoutSplit(layout, 0.9, 0); row = uiLayoutRow(split, 0); Index: source/blender/makesdna/DNA_actuator_types.h =================================================================== --- source/blender/makesdna/DNA_actuator_types.h (revision 32619) +++ source/blender/makesdna/DNA_actuator_types.h (working copy) @@ -92,6 +92,7 @@ float mass; short localflag; /* flag for the lin & ang. vel: apply locally */ short dyn_operation; + } bEditObjectActuator; typedef struct bSceneActuator { @@ -391,6 +392,7 @@ /* editObjectActuator->localflag */ #define ACT_EDOB_LOCAL_LINV 2 #define ACT_EDOB_LOCAL_ANGV 4 +#define ACT_EDOB_UNIQUENAME 8 /* editObjectActuator->flag */ #define ACT_TRACK_3D 1 Index: source/blender/makesrna/intern/rna_actuator.c =================================================================== --- source/blender/makesrna/intern/rna_actuator.c (revision 32619) +++ source/blender/makesrna/intern/rna_actuator.c (working copy) @@ -1248,7 +1248,7 @@ RNA_def_property_update(prop, NC_LOGIC, NULL); prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "Object"); + RNA_def_property_struct_type(prop, "Object"); RNA_def_property_pointer_sdna(prop, NULL, "ob"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Object", "Add this Object and all its children (cant be on an visible layer)"); @@ -1280,6 +1280,12 @@ RNA_def_property_ui_text(prop, "Mass", "The mass of the object"); RNA_def_property_update(prop, NC_LOGIC, NULL); + /* Boolean */ + prop= RNA_def_property(srna, "unique_names", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "localflag",ACT_EDOB_UNIQUENAME); + RNA_def_property_ui_text(prop, "U", "Make Unique Names for object copies"); + RNA_def_property_update(prop, NC_LOGIC, NULL); + /* floats 3 Arrays*/ prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_XYZ); RNA_def_property_float_sdna(prop, NULL, "linVelocity"); Index: source/gameengine/Converter/KX_ConvertActuators.cpp =================================================================== --- source/gameengine/Converter/KX_ConvertActuators.cpp (revision 32619) +++ source/gameengine/Converter/KX_ConvertActuators.cpp (working copy) @@ -469,10 +469,12 @@ editobact->linVelocity, (editobact->localflag & ACT_EDOB_LOCAL_LINV)!=0, editobact->angVelocity, - (editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0 + (editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0, + (editobact->localflag & ACT_EDOB_UNIQUENAME)!=0 ); //editobact->ob to gameobj + printf("%d",editobact->localflag); baseact = tmpaddact; } break; Index: source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp =================================================================== --- source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp (revision 32619) +++ source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp (working copy) @@ -51,14 +51,17 @@ const float *linvel, bool linv_local, const float *angvel, - bool angv_local) + bool angv_local, + bool u_name) : SCA_IActuator(gameobj, KX_ACT_ADD_OBJECT), m_OriginalObject(original), m_scene(scene), m_localLinvFlag(linv_local), - m_localAngvFlag(angv_local) + m_localAngvFlag(angv_local), + m_uniqueName(u_name) + { m_linear_velocity[0] = linvel[0]; m_linear_velocity[1] = linvel[1]; @@ -66,12 +69,15 @@ m_angular_velocity[0] = angvel[0]; m_angular_velocity[1] = angvel[1]; m_angular_velocity[2] = angvel[2]; + if (m_OriginalObject) m_OriginalObject->RegisterActuator(this); m_lastCreatedObject = NULL; m_timeProp = time; + m_cont = 0; + } @@ -194,6 +200,7 @@ }; PyAttributeDef KX_SCA_AddObjectActuator::Attributes[] = { + KX_PYATTRIBUTE_BOOL_RW("uniqueName",KX_SCA_AddObjectActuator,m_uniqueName), KX_PYATTRIBUTE_RW_FUNCTION("object",KX_SCA_AddObjectActuator,pyattr_get_object,pyattr_set_object), KX_PYATTRIBUTE_RO_FUNCTION("objectLastCreated",KX_SCA_AddObjectActuator,pyattr_get_objectLastCreated), KX_PYATTRIBUTE_INT_RW("time",0,2000,true,KX_SCA_AddObjectActuator,m_timeProp), @@ -250,8 +257,12 @@ void KX_SCA_AddObjectActuator::InstantAddObject() { + char m_name [50]; + if(m_uniqueName){m_cont +=1;} + if (m_OriginalObject) { + // Add an identical object, with properties inherited from the original object // Now it needs to be added to the current scene. SCA_IObject* replica = m_scene->AddReplicaObject(m_OriginalObject,GetParent(),m_timeProp ); @@ -259,7 +270,14 @@ game_obj->setLinearVelocity(m_linear_velocity ,m_localLinvFlag); game_obj->setAngularVelocity(m_angular_velocity,m_localAngvFlag); game_obj->ResolveCombinedVelocities(m_linear_velocity, m_angular_velocity, m_localLinvFlag, m_localAngvFlag); - + + if(m_uniqueName) + { + // Store the orginal name and the count value in a String + sprintf(m_name,"%s.%03d",(const char *)(game_obj->GetName()), m_cont); + game_obj->SetName(m_name); // assign de new name + } + // keep a copy of the last object, to allow python scripters to change it if (m_lastCreatedObject) { Index: source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h =================================================================== --- source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h (revision 32619) +++ source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h (working copy) @@ -54,6 +54,10 @@ /// Time field: lifetime of the new object int m_timeProp; + // Object Counter and UniqueName feature ON/OFF + int m_cont; + bool m_uniqueName; + /// Original object reference (object to replicate) SCA_IObject* m_OriginalObject; @@ -69,10 +73,7 @@ float m_angular_velocity[3]; /// Apply the velocity locally bool m_localAngvFlag; - - - - + SCA_IObject* m_lastCreatedObject; public: @@ -90,7 +91,8 @@ const float *linvel, bool linv_local, const float *angvel, - bool angv_local + bool angv_local, + bool u_name ); ~KX_SCA_AddObjectActuator(void);
Index: source/blender/editors/space_logic/logic_window.c =================================================================== --- source/blender/editors/space_logic/logic_window.c (revision 32619) +++ source/blender/editors/space_logic/logic_window.c (working copy) @@ -3867,9 +3867,11 @@ switch (RNA_enum_get(ptr, "mode")) { case ACT_EDOB_ADD_OBJECT: - row = uiLayoutRow(layout, 0); + split = uiLayoutSplit(layout, 0.9, 0); + row = uiLayoutRow(split, 0); uiItemR(row, ptr, "object", 0, NULL, 0); uiItemR(row, ptr, "time", 0, NULL, 0); + uiItemR(split,ptr,"unique_names",UI_ITEM_R_TOGGLE,NULL,0); split = uiLayoutSplit(layout, 0.9, 0); row = uiLayoutRow(split, 0); Index: source/blender/makesdna/DNA_actuator_types.h =================================================================== --- source/blender/makesdna/DNA_actuator_types.h (revision 32619) +++ source/blender/makesdna/DNA_actuator_types.h (working copy) @@ -92,6 +92,7 @@ float mass; short localflag; /* flag for the lin & ang. vel: apply locally */ short dyn_operation; + } bEditObjectActuator; typedef struct bSceneActuator { @@ -391,6 +392,7 @@ /* editObjectActuator->localflag */ #define ACT_EDOB_LOCAL_LINV 2 #define ACT_EDOB_LOCAL_ANGV 4 +#define ACT_EDOB_UNIQUENAME 8 /* editObjectActuator->flag */ #define ACT_TRACK_3D 1 Index: source/blender/makesrna/intern/rna_actuator.c =================================================================== --- source/blender/makesrna/intern/rna_actuator.c (revision 32619) +++ source/blender/makesrna/intern/rna_actuator.c (working copy) @@ -1248,7 +1248,7 @@ RNA_def_property_update(prop, NC_LOGIC, NULL); prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "Object"); + RNA_def_property_struct_type(prop, "Object"); RNA_def_property_pointer_sdna(prop, NULL, "ob"); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Object", "Add this Object and all its children (cant be on an visible layer)"); @@ -1280,6 +1280,12 @@ RNA_def_property_ui_text(prop, "Mass", "The mass of the object"); RNA_def_property_update(prop, NC_LOGIC, NULL); + /* Boolean */ + prop= RNA_def_property(srna, "unique_names", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "localflag",ACT_EDOB_UNIQUENAME); + RNA_def_property_ui_text(prop, "U", "Make Unique Names for object copies"); + RNA_def_property_update(prop, NC_LOGIC, NULL); + /* floats 3 Arrays*/ prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_XYZ); RNA_def_property_float_sdna(prop, NULL, "linVelocity"); Index: source/gameengine/Converter/KX_ConvertActuators.cpp =================================================================== --- source/gameengine/Converter/KX_ConvertActuators.cpp (revision 32619) +++ source/gameengine/Converter/KX_ConvertActuators.cpp (working copy) @@ -469,10 +469,12 @@ editobact->linVelocity, (editobact->localflag & ACT_EDOB_LOCAL_LINV)!=0, editobact->angVelocity, - (editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0 + (editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0, + (editobact->localflag & ACT_EDOB_UNIQUENAME)!=0 ); //editobact->ob to gameobj + printf("%d",editobact->localflag); baseact = tmpaddact; } break; Index: source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp =================================================================== --- source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp (revision 32619) +++ source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp (working copy) @@ -51,14 +51,17 @@ const float *linvel, bool linv_local, const float *angvel, - bool angv_local) + bool angv_local, + bool u_name) : SCA_IActuator(gameobj, KX_ACT_ADD_OBJECT), m_OriginalObject(original), m_scene(scene), m_localLinvFlag(linv_local), - m_localAngvFlag(angv_local) + m_localAngvFlag(angv_local), + m_uniqueName(u_name) + { m_linear_velocity[0] = linvel[0]; m_linear_velocity[1] = linvel[1]; @@ -66,12 +69,15 @@ m_angular_velocity[0] = angvel[0]; m_angular_velocity[1] = angvel[1]; m_angular_velocity[2] = angvel[2]; + if (m_OriginalObject) m_OriginalObject->RegisterActuator(this); m_lastCreatedObject = NULL; m_timeProp = time; + m_cont = 0; + } @@ -194,6 +200,7 @@ }; PyAttributeDef KX_SCA_AddObjectActuator::Attributes[] = { + KX_PYATTRIBUTE_BOOL_RW("uniqueName",KX_SCA_AddObjectActuator,m_uniqueName), KX_PYATTRIBUTE_RW_FUNCTION("object",KX_SCA_AddObjectActuator,pyattr_get_object,pyattr_set_object), KX_PYATTRIBUTE_RO_FUNCTION("objectLastCreated",KX_SCA_AddObjectActuator,pyattr_get_objectLastCreated), KX_PYATTRIBUTE_INT_RW("time",0,2000,true,KX_SCA_AddObjectActuator,m_timeProp), @@ -250,8 +257,12 @@ void KX_SCA_AddObjectActuator::InstantAddObject() { + char m_name [50]; + if(m_uniqueName){m_cont +=1;} + if (m_OriginalObject) { + // Add an identical object, with properties inherited from the original object // Now it needs to be added to the current scene. SCA_IObject* replica = m_scene->AddReplicaObject(m_OriginalObject,GetParent(),m_timeProp ); @@ -259,7 +270,14 @@ game_obj->setLinearVelocity(m_linear_velocity ,m_localLinvFlag); game_obj->setAngularVelocity(m_angular_velocity,m_localAngvFlag); game_obj->ResolveCombinedVelocities(m_linear_velocity, m_angular_velocity, m_localLinvFlag, m_localAngvFlag); - + + if(m_uniqueName) + { + // Store the orginal name and the count value in a String + sprintf(m_name,"%s.%03d",(const char *)(game_obj->GetName()), m_cont); + game_obj->SetName(m_name); // assign de new name + } + // keep a copy of the last object, to allow python scripters to change it if (m_lastCreatedObject) { Index: source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h =================================================================== --- source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h (revision 32619) +++ source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h (working copy) @@ -54,6 +54,10 @@ /// Time field: lifetime of the new object int m_timeProp; + // Object Counter and UniqueName feature ON/OFF + int m_cont; + bool m_uniqueName; + /// Original object reference (object to replicate) SCA_IObject* m_OriginalObject; @@ -69,10 +73,7 @@ float m_angular_velocity[3]; /// Apply the velocity locally bool m_localAngvFlag; - - - - + SCA_IObject* m_lastCreatedObject; public: @@ -90,7 +91,8 @@ const float *linvel, bool linv_local, const float *angvel, - bool angv_local + bool angv_local, + bool u_name ); ~KX_SCA_AddObjectActuator(void);
|