[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37455] trunk/blender: BGE Patch: [#27425] Allow to change the damping of the camera actuator

Dalai Felinto dfelinto at gmail.com
Mon Jun 13 19:08:33 CEST 2011


Revision: 37455
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37455
Author:   dfelinto
Date:     2011-06-13 17:08:33 +0000 (Mon, 13 Jun 2011)
Log Message:
-----------
BGE Patch: [#27425] Allow to change the damping of the camera actuator
##########
original name: "Allow to change the strenght of the "go behind" constraint of the camera actuator"

The camera actuator is an actuator that drive the camera to follow an object, with a set of constraint.
Currently, when the object followed rotate on himself (like a person, or an helicopter), the camera is really slow to go behind (at least 10 seconds).

This patch gives the UI to tweak the strenght of the 'go behind'[named damping] constraint.
###########

epydocs (rst) updated too

Modified Paths:
--------------
    trunk/blender/doc/python_api/rst/bge.types.rst
    trunk/blender/source/blender/blenkernel/intern/sca.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesdna/DNA_actuator_types.h
    trunk/blender/source/blender/makesrna/intern/rna_actuator.c
    trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h

Modified: trunk/blender/doc/python_api/rst/bge.types.rst
===================================================================
--- trunk/blender/doc/python_api/rst/bge.types.rst	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/doc/python_api/rst/bge.types.rst	2011-06-13 17:08:33 UTC (rev 37455)
@@ -710,6 +710,12 @@
 
    Applies changes to a camera.
 
+   .. attribute:: damping
+
+      strength of of the camera following movement.
+
+      :type: float
+   
    .. attribute:: min
 
       minimum distance to the target object maintained by the actuator.

Modified: trunk/blender/source/blender/blenkernel/intern/sca.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sca.c	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/blender/blenkernel/intern/sca.c	2011-06-13 17:08:33 UTC (rev 37455)
@@ -430,6 +430,7 @@
 		act->data= MEM_callocN(sizeof(bCameraActuator), "camact");
 		ca = act->data;
 		ca->axis = ACT_CAMERA_X;
+		ca->damping = 1.0/32.0;
 		break;
 	case ACT_EDIT_OBJECT:
 		act->data= MEM_callocN(sizeof(bEditObjectActuator), "editobact");

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-06-13 17:08:33 UTC (rev 37455)
@@ -11647,6 +11647,21 @@
 				}
 			}
 		}
+
+		{
+			/* add default value for behind strength of camera actuator */
+			Object *ob;
+			bActuator *act;
+			for(ob = main->object.first; ob; ob= ob->id.next) {
+				for(act= ob->actuators.first; act; act= act->next) {
+					if (act->type == ACT_CAMERA) {
+						bCameraActuator *ba= act->data;
+
+						ba->damping = 1.0/32.0;
+					}
+				}
+			}
+		}
 	}
 	
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2011-06-13 17:08:33 UTC (rev 37455)
@@ -3786,6 +3786,8 @@
 	row = uiLayoutRow(layout, 1);
 	uiItemR(row, ptr, "min", 0, NULL, ICON_NONE);
 	uiItemR(row, ptr, "max", 0, NULL, ICON_NONE);
+
+	uiItemR(layout, ptr, "damping", 0, NULL, ICON_NONE);
 }
 
 static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext *C)

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2011-06-13 17:08:33 UTC (rev 37455)
@@ -133,7 +133,7 @@
 typedef struct bCameraActuator {
 	struct Object *ob;
 	float height, min, max;
-	float pad;
+	float damping;
 	short pad1, axis;
 	float pad2;
 } bCameraActuator ;

Modified: trunk/blender/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2011-06-13 17:08:33 UTC (rev 37455)
@@ -922,6 +922,13 @@
 	RNA_def_property_ui_text(prop, "Max", "");
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 
+	prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "damping");
+	RNA_def_property_range(prop, 0, 10.0);
+	RNA_def_property_ui_range(prop, 0, 5.0, 1, 2);
+	RNA_def_property_ui_text(prop, "Damping", "Specify the strength of the constraint that drive the camera behind the target");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
 	/* x/y */
 	prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "axis");

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2011-06-13 17:08:33 UTC (rev 37455)
@@ -287,7 +287,8 @@
 						camact->height,
 						camact->min,
 						camact->max,
-						camact->axis=='x');
+						camact->axis=='x',
+						camact->damping);
 					baseact = tmpcamact;
 				}
 				break;

Modified: trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp	2011-06-13 17:08:33 UTC (rev 37455)
@@ -54,14 +54,16 @@
 	float hght,
 	float minhght,
 	float maxhght,
-	bool  xytog
+	bool  xytog,
+	float damping
 ): 
 	SCA_IActuator(gameobj, KX_ACT_CAMERA),
 	m_ob (obj),
 	m_height (hght),
 	m_minHeight (minhght),
 	m_maxHeight (maxhght),
-	m_x (xytog)
+	m_x (xytog),
+	m_damping (damping)
 {
 	if (m_ob)
 		m_ob->RegisterActuator(this);
@@ -283,7 +285,7 @@
 	}
 	
 	inp= fp1[0]*fp2[0] + fp1[1]*fp2[1] + fp1[2]*fp2[2];
-	fac= (-1.0 + inp)/32.0;
+	fac= (-1.0 + inp) * m_damping;
 
 	from[0]+= fac*fp1[0];
 	from[1]+= fac*fp1[1];
@@ -390,6 +392,7 @@
 	KX_PYATTRIBUTE_FLOAT_RW("height",-FLT_MAX,FLT_MAX,KX_CameraActuator,m_height),
 	KX_PYATTRIBUTE_BOOL_RW("useXY",KX_CameraActuator,m_x),
 	KX_PYATTRIBUTE_RW_FUNCTION("object", KX_CameraActuator, pyattr_get_object,	pyattr_set_object),
+	KX_PYATTRIBUTE_FLOAT_RW("damping",0.f,10.f,KX_CameraActuator,m_damping),
 	{NULL}
 };
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h	2011-06-13 15:07:36 UTC (rev 37454)
+++ trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h	2011-06-13 17:08:33 UTC (rev 37455)
@@ -73,6 +73,9 @@
 	
 	/** xy toggle (pick one): true == x, false == y */
 	bool m_x;
+	
+	/** damping (float), */
+	float m_damping;
 
 	/* get the KX_IGameObject with this name */
 	CValue *findObject(char *obName);
@@ -95,7 +98,8 @@
 		float hght,
 		float minhght,
 		float maxhght,
-		bool xytog
+		bool xytog,
+		float damping
 	);
 
 




More information about the Bf-blender-cvs mailing list