[Bf-codereview] Set Influence option for Armature Actuator (issue 5673063)

dfelinto at gmail.com dfelinto at gmail.com
Thu Feb 16 03:35:58 CET 2012


Reviewers: bf-codereview_blender.org, benoit.bolsee, Moguri,

Description:
option for the Armature Actuator to change the influence of a bone
constraint.
Also adds DampedTrackTo to the list of supported constraints in the BGE

Test file:
http://www.pasteall.org/blend/11715

Windows32 build:
ftp://ftp.fisheries.ubc.ca/d.felinto/AAAS/blender262_patch_32.zip

Patch developed as part of a project to NF-UBC Nereus Program.
Development time 'sponsored' by the project.
www.nereusprogram.org

Please review this at http://codereview.appspot.com/5673063/

Affected files:
   doc/python_api/rst/bge.types.rst
   source/blender/blenkernel/intern/sca.c
   source/blender/editors/space_logic/logic_window.c
   source/blender/makesdna/DNA_actuator_types.h
   source/blender/makesrna/intern/rna_actuator.c
   source/gameengine/Converter/BL_ArmatureActuator.cpp
   source/gameengine/Converter/BL_ArmatureActuator.h
   source/gameengine/Converter/BL_ArmatureConstraint.h
   source/gameengine/Converter/BL_ArmatureObject.cpp
   source/gameengine/Converter/KX_ConvertActuators.cpp


Index: source/gameengine/Converter/BL_ArmatureActuator.cpp
===================================================================
--- source/gameengine/Converter/BL_ArmatureActuator.cpp	(revision 44133)
+++ source/gameengine/Converter/BL_ArmatureActuator.cpp	(working copy)
@@ -53,7 +53,8 @@
  						const char *constraintname,
  						KX_GameObject* targetobj,
  						KX_GameObject* subtargetobj,
-						float weight) :
+						float weight,
+						float influence) :
  	SCA_IActuator(obj, KX_ACT_ARMATURE),
  	m_constraint(NULL),
  	m_gametarget(targetobj),
@@ -61,6 +62,7 @@
  	m_posechannel(posechannel),
  	m_constraintname(constraintname),
  	m_weight(weight),
+	m_influence(influence),
  	m_type(type)
  {
  	if (m_gametarget)
@@ -173,6 +175,10 @@
  			if (m_constraint)
  				m_constraint->SetWeight(m_weight);
  			break;
+		case ACT_ARM_SETINFLUENCE:
+			if (m_constraint)
+				m_constraint->SetInfluence(m_influence);
+			break;
  		}
  	}
  	return result;
@@ -216,6 +222,7 @@
  	KX_PYATTRIBUTE_RW_FUNCTION("target", BL_ArmatureActuator,  
pyattr_get_object, pyattr_set_object),
  	KX_PYATTRIBUTE_RW_FUNCTION("subtarget", BL_ArmatureActuator,  
pyattr_get_object, pyattr_set_object),
  	KX_PYATTRIBUTE_FLOAT_RW("weight",0.0f,1.0f,BL_ArmatureActuator,m_weight),
+	 
KX_PYATTRIBUTE_FLOAT_RW("influence",0.0f,1.0f,BL_ArmatureActuator,m_influence),
  	 
KX_PYATTRIBUTE_INT_RW("type",0,ACT_ARM_MAXTYPE,false,BL_ArmatureActuator,m_type),
  	{ NULL }	//Sentinel
  };
Index: source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- source/gameengine/Converter/KX_ConvertActuators.cpp	(revision 44133)
+++ source/gameengine/Converter/KX_ConvertActuators.cpp	(working copy)
@@ -1060,7 +1060,7 @@
  				bArmatureActuator* armAct = (bArmatureActuator*) bact->data;
  				KX_GameObject *tmpgob = converter->FindGameObject(armAct->target);
  				KX_GameObject *subgob = converter->FindGameObject(armAct->subtarget);
-				BL_ArmatureActuator* tmparmact = new BL_ArmatureActuator(gameobj,  
armAct->type, armAct->posechannel, armAct->constraint, tmpgob, subgob,  
armAct->weight);
+				BL_ArmatureActuator* tmparmact = new BL_ArmatureActuator(gameobj,  
armAct->type, armAct->posechannel, armAct->constraint, tmpgob, subgob,  
armAct->weight, armAct->influence);
  				baseact = tmparmact;
  				break;
  			}
Index: source/gameengine/Converter/BL_ArmatureActuator.h
===================================================================
--- source/gameengine/Converter/BL_ArmatureActuator.h	(revision 44133)
+++ source/gameengine/Converter/BL_ArmatureActuator.h	(working copy)
@@ -54,7 +54,8 @@
  						const char *constraintname,
  						KX_GameObject* targetobj,
  						KX_GameObject* subtargetobj,
-						float weight);
+						float weight,
+						float influence);

  	virtual ~BL_ArmatureActuator();

@@ -88,6 +89,7 @@
  	STR_String		m_posechannel;
  	STR_String		m_constraintname;
  	float			m_weight;
+	float			m_influence;
  	int				m_type;
  };

Index: source/gameengine/Converter/BL_ArmatureConstraint.h
===================================================================
--- source/gameengine/Converter/BL_ArmatureConstraint.h	(revision 44133)
+++ source/gameengine/Converter/BL_ArmatureConstraint.h	(working copy)
@@ -104,6 +104,11 @@
  			con->weight = weight;
  		}
  	}
+	void SetInfluence(float influence)
+	{
+		if (m_constraint)
+			m_constraint->enforce = influence;
+	}
  	void SetTarget(KX_GameObject* target);
  	void SetSubtarget(KX_GameObject* subtarget);

Index: source/gameengine/Converter/BL_ArmatureObject.cpp
===================================================================
--- source/gameengine/Converter/BL_ArmatureObject.cpp	(revision 44133)
+++ source/gameengine/Converter/BL_ArmatureObject.cpp	(working copy)
@@ -287,6 +287,7 @@
  			// which constraint should we support?
  			switch (pcon->type) {
  			case CONSTRAINT_TYPE_TRACKTO:
+			case CONSTRAINT_TYPE_DAMPTRACK:
  			case CONSTRAINT_TYPE_KINEMATIC:
  			case CONSTRAINT_TYPE_ROTLIKE:
  			case CONSTRAINT_TYPE_LOCLIKE:
Index: source/blender/blenkernel/intern/sca.c
===================================================================
--- source/blender/blenkernel/intern/sca.c	(revision 44133)
+++ source/blender/blenkernel/intern/sca.c	(working copy)
@@ -395,6 +395,7 @@
  	bRandomActuator *ra;
  	bSoundActuator *sa;
  	bSteeringActuator *sta;
+	bArmatureActuator *arma;
  	
  	if(act->data) MEM_freeN(act->data);
  	act->data= NULL;
@@ -468,6 +469,8 @@
  		break;
  	case ACT_ARMATURE:
  		act->data = MEM_callocN(sizeof( bArmatureActuator ), "armature act");
+		arma = act->data;
+		arma->influence = 1.f;
  		break;
  	case ACT_STEERING:
  		act->data = MEM_callocN(sizeof( bSteeringActuator), "steering act");
Index: source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- source/blender/makesdna/DNA_actuator_types.h	(revision 44133)
+++ source/blender/makesdna/DNA_actuator_types.h	(working copy)
@@ -224,6 +224,8 @@
  	char constraint[64];	/* MAX_NAME */
  	int type;		/* 0=run, 1=enable, 2=disable, 3=set target, 4=set weight */
  	float weight;
+	float influence;
+	float pad;
  	struct Object *target;
  	struct Object *subtarget;
  } bArmatureActuator;
@@ -511,8 +513,9 @@
  #define ACT_ARM_DISABLE		2
  #define ACT_ARM_SETTARGET	3
  #define ACT_ARM_SETWEIGHT	4
-/* update this define if more type are addedd */
-#define ACT_ARM_MAXTYPE		4
+#define ACT_ARM_SETINFLUENCE	5
+/* update this define if more types are added */
+#define ACT_ARM_MAXTYPE		5

  /* stateactuator->type */
  #define ACT_STATE_SET		0
Index: source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- source/blender/makesrna/intern/rna_actuator.c	(revision 44133)
+++ source/blender/makesrna/intern/rna_actuator.c	(working copy)
@@ -1887,6 +1887,7 @@
  		{ACT_ARM_DISABLE, "DISABLE", 0, "Disable", ""},
  		{ACT_ARM_SETTARGET, "SETTARGET", 0, "Set Target", ""},
  		{ACT_ARM_SETWEIGHT, "SETWEIGHT", 0, "Set Weight", ""},
+		{ACT_ARM_SETINFLUENCE, "SETINFLUENCE", 0, "Set Influence", ""},
  		{0, NULL, 0, NULL, NULL}};

  	srna= RNA_def_struct(brna, "ArmatureActuator", "Actuator");
@@ -1927,6 +1928,12 @@
  	RNA_def_property_range(prop, 0.0, 1.0);
  	RNA_def_property_ui_text(prop, "Weight", "Weight of this constraint");
  	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "influence");
+	RNA_def_property_range(prop, 0.0, 1.0);
+	RNA_def_property_ui_text(prop, "Influence", "Influence of this  
constraint");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
  }

  static void rna_def_steering_actuator(BlenderRNA *brna)
Index: source/blender/editors/space_logic/logic_window.c
===================================================================
--- source/blender/editors/space_logic/logic_window.c	(revision 44135)
+++ source/blender/editors/space_logic/logic_window.c	(working copy)
@@ -3806,6 +3806,16 @@

  			uiItemR(layout, ptr, "weight", 0, NULL, ICON_NONE);
  			break;
+		case ACT_ARM_SETINFLUENCE:
+			if (ob->pose) {
+				uiItemPointerR(layout, ptr, "bone", &pose_ptr, "bones", NULL,  
ICON_BONE_DATA);
+				
+				if (RNA_property_collection_lookup_string(&pose_ptr, bones_prop,  
aa->posechannel, &pchan_ptr))
+					uiItemPointerR(layout, ptr, "constraint", &pchan_ptr, "constraints",  
NULL, ICON_CONSTRAINT_BONE);
+			}
+
+			uiItemR(layout, ptr, "influence", 0, NULL, ICON_NONE);
+			break;
  	}
  }

Index: doc/python_api/rst/bge.types.rst
===================================================================
--- doc/python_api/rst/bge.types.rst	(revision 44133)
+++ doc/python_api/rst/bge.types.rst	(working copy)
@@ -4518,10 +4518,16 @@

     .. data:: KX_ACT_ARMATURE_SETWEIGHT

-      Change weight of (only for IK constraint).
+      Change weight of (only for IK) constraint.

        :value: 4

+   .. data:: KX_ACT_ARMATURE_SETINFLUENCE
+
+      Change influence of constraint.
+
+      :value: 5
+
     .. attribute:: type

        The type of action that the actuator executes when it is active.
@@ -4566,6 +4572,12 @@

           A weight of 0 disables a constraint while still updating  
constraint runtime values (see :class:`BL_ArmatureConstraint`)

+   .. attribute:: influence
+
+      The influence this actuator will set on the constraint it controls.
+
+      :type: float.
+
  .. class:: KX_ArmatureSensor(SCA_ISensor)

     Armature sensor detect conditions on armatures.




More information about the Bf-codereview mailing list