[Bf-blender-cvs] [ad8fa26] id-remap: Adding game sensors/controllers/actuators to foreachid libquery.

Bastien Montagne noreply at git.blender.org
Wed Oct 7 20:40:26 CEST 2015


Commit: ad8fa268a410bfd5ea36f682dc04c430e5211dc2
Author: Bastien Montagne
Date:   Wed Oct 7 10:31:36 2015 +0200
Branches: id-remap
https://developer.blender.org/rBad8fa268a410bfd5ea36f682dc04c430e5211dc2

Adding game sensors/controllers/actuators to foreachid libquery.

Those were totally missing, cannot see a good reason for it...
Seems to work OK, but only very quickly tested code.

===================================================================

M	source/blender/blenkernel/BKE_sca.h
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/sca.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_sca.h b/source/blender/blenkernel/BKE_sca.h
index ebdd159..341d949 100644
--- a/source/blender/blenkernel/BKE_sca.h
+++ b/source/blender/blenkernel/BKE_sca.h
@@ -73,6 +73,16 @@ void sca_move_sensor(struct bSensor *sens_to_move, struct Object *ob, int move_u
 void sca_move_controller(struct bController *cont_to_move, struct Object *ob, int move_up);
 void sca_move_actuator(struct bActuator *act_to_move, struct Object *ob, int move_up);
 
+/* Callback format for performing operations on ID-pointers for Constraints */
+typedef void (*SCASensorIDFunc)(struct bSensor *sensor, struct ID **idpoin, void *userdata, int cd_flag);
+typedef void (*SCAControllerIDFunc)(struct bController *controller, struct ID **idpoin, void *userdata, int cd_flag);
+typedef void (*SCAActuatorIDFunc)(struct bActuator *actuator, struct ID **idpoin, void *userdata, int cd_flag);
+
+void BKE_sca_sensors_id_loop(struct ListBase *senslist, SCASensorIDFunc func, void *userdata);
+void BKE_sca_controllers_id_loop(struct ListBase *contlist, SCAControllerIDFunc func, void *userdata);
+void BKE_sca_actuators_id_loop(struct ListBase *atclist, SCAActuatorIDFunc func, void *userdata);
+
+
 const char *sca_state_name_get(Object *ob, short bit);
 
 #endif
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 67d9b89..7bc3558 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -30,10 +30,12 @@
 #include <stdlib.h>
 
 
+#include "DNA_actuator_types.h"
 #include "DNA_anim_types.h"
 #include "DNA_brush_types.h"
 #include "DNA_camera_types.h"
 #include "DNA_constraint_types.h"
+#include "DNA_controller_types.h"
 #include "DNA_group_types.h"
 #include "DNA_gpencil_types.h"
 #include "DNA_key_types.h"
@@ -48,6 +50,7 @@
 #include "DNA_node_types.h"
 #include "DNA_object_force.h"
 #include "DNA_scene_types.h"
+#include "DNA_sensor_types.h"
 #include "DNA_sequence_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_speaker_types.h"
@@ -64,6 +67,7 @@
 #include "BKE_library_query.h"
 #include "BKE_modifier.h"
 #include "BKE_particle.h"
+#include "BKE_sca.h"
 #include "BKE_sequencer.h"
 #include "BKE_tracking.h"
 
@@ -112,6 +116,27 @@ static void library_foreach_constraintObjectLooper(bConstraint *UNUSED(con), ID
 	FOREACH_CALLBACK_INVOKE_ID_PP(data->self_id, id_pointer, data->flag, data->callback, data->user_data, IDWALK_NOP);
 }
 
+static void library_foreach_sensorsObjectLooper(
+        bSensor *UNUSED(sensor), ID **id_pointer, void *user_data, int cd_flag)
+{
+	LibraryForeachIDData *data = (LibraryForeachIDData *) user_data;
+	FOREACH_CALLBACK_INVOKE_ID_PP(data->self_id, id_pointer, data->flag, data->callback, data->user_data, cd_flag);
+}
+
+static void library_foreach_controllersObjectLooper(
+        bController *UNUSED(controller), ID **id_pointer, void *user_data, int cd_flag)
+{
+	LibraryForeachIDData *data = (LibraryForeachIDData *) user_data;
+	FOREACH_CALLBACK_INVOKE_ID_PP(data->self_id, id_pointer, data->flag, data->callback, data->user_data, cd_flag);
+}
+
+static void library_foreach_actuatorsObjectLooper(
+        bActuator *UNUSED(actuator), ID **id_pointer, void *user_data, int cd_flag)
+{
+	LibraryForeachIDData *data = (LibraryForeachIDData *) user_data;
+	FOREACH_CALLBACK_INVOKE_ID_PP(data->self_id, id_pointer, data->flag, data->callback, data->user_data, cd_flag);
+}
+
 static void library_foreach_animationData(LibraryForeachIDData *data, AnimData *adt)
 {
 	FCurve *fcu;
@@ -275,6 +300,16 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
 			BKE_constraints_id_loop(&object->constraints,
 			                        library_foreach_constraintObjectLooper,
 			                        &data);
+
+			BKE_sca_sensors_id_loop(&object->sensors,
+			                        library_foreach_sensorsObjectLooper,
+			                        &data);
+			BKE_sca_controllers_id_loop(&object->controllers,
+			                            library_foreach_controllersObjectLooper,
+			                            &data);
+			BKE_sca_actuators_id_loop(&object->actuators,
+			                          library_foreach_actuatorsObjectLooper,
+			                          &data);
 			break;
 		}
 
diff --git a/source/blender/blenkernel/intern/sca.c b/source/blender/blenkernel/intern/sca.c
index c902659..88a2822 100644
--- a/source/blender/blenkernel/intern/sca.c
+++ b/source/blender/blenkernel/intern/sca.c
@@ -48,6 +48,7 @@
 #include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_library.h"
+#include "BKE_library_query.h"
 #include "BKE_sca.h"
 
 /* ******************* SENSORS ************************ */
@@ -903,6 +904,179 @@ void unlink_logicbricks(void **poin, void ***ppoin, short *tot)
 	}
 }
 
+void BKE_sca_sensors_id_loop(ListBase *senslist, SCASensorIDFunc func, void *userdata)
+{
+	bSensor *sensor;
+
+	for (sensor = senslist->first; sensor; sensor = sensor->next) {
+		func(sensor, (ID **)&sensor->ob, userdata, IDWALK_NOP);
+
+		switch (sensor->type) {
+			case SENS_TOUCH:  /* DEPRECATED */
+			{
+				bTouchSensor *ts = sensor->data;
+				func(sensor, (ID **)&ts->ma, userdata, IDWALK_NOP);
+				break;
+			}
+			case SENS_MESSAGE:
+			{
+				bMessageSensor *ms = sensor->data;
+				func(sensor, (ID **)&ms->fromObject, userdata, IDWALK_NOP);
+				break;
+			}
+			case SENS_ALWAYS:
+			case SENS_NEAR:
+			case SENS_KEYBOARD:
+			case SENS_PROPERTY:
+			case SENS_MOUSE:
+			case SENS_COLLISION:
+			case SENS_RADAR:
+			case SENS_RANDOM:
+			case SENS_RAY:
+			case SENS_JOYSTICK:
+			case SENS_ACTUATOR:
+			case SENS_DELAY:
+			case SENS_ARMATURE:
+			default:
+				break;
+		}
+	}
+}
+
+void BKE_sca_controllers_id_loop(ListBase *contlist, SCAControllerIDFunc func, void *userdata)
+{
+	bController *controller;
+
+	for (controller = contlist->first; controller; controller = controller->next) {
+		switch (controller->type) {
+			case CONT_PYTHON:
+			{
+				bPythonCont *pc = controller->data;
+				func(controller, (ID **)&pc->text, userdata, IDWALK_NOP);
+				break;
+			}
+			case CONT_LOGIC_AND:
+			case CONT_LOGIC_OR:
+			case CONT_EXPRESSION:
+			case CONT_LOGIC_NAND:
+			case CONT_LOGIC_NOR:
+			case CONT_LOGIC_XOR:
+			case CONT_LOGIC_XNOR:
+			default:
+				break;
+		}
+	}
+}
+
+void BKE_sca_actuators_id_loop(ListBase *actlist, SCAActuatorIDFunc func, void *userdata)
+{
+	bActuator *actuator;
+
+	for (actuator = actlist->first; actuator; actuator = actuator->next) {
+		func(actuator, (ID **)&actuator->ob, userdata, IDWALK_NOP);
+
+		switch (actuator->type) {
+			case ACT_ADD_OBJECT:  /* DEPRECATED */
+			{
+				bAddObjectActuator *aoa = actuator->data;
+				func(actuator, (ID **)&aoa->ob, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_ACTION:
+			{
+				bActionActuator *aa = actuator->data;
+				func(actuator, (ID **)&aa->act, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_SOUND:
+			{
+				bSoundActuator *sa = actuator->data;
+				func(actuator, (ID **)&sa->sound, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_EDIT_OBJECT:
+			{
+				bEditObjectActuator *eoa = actuator->data;
+				func(actuator, (ID **)&eoa->ob, userdata, IDWALK_NOP);
+				func(actuator, (ID **)&eoa->me, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_SCENE:
+			{
+				bSceneActuator *sa = actuator->data;
+				func(actuator, (ID **)&sa->scene, userdata, IDWALK_NOP);
+				func(actuator, (ID **)&sa->camera, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_PROPERTY:
+			{
+				bPropertyActuator *pa = actuator->data;
+				func(actuator, (ID **)&pa->ob, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_OBJECT:
+			{
+				bObjectActuator *oa = actuator->data;
+				func(actuator, (ID **)&oa->reference, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_CAMERA:
+			{
+				bCameraActuator *ca = actuator->data;
+				func(actuator, (ID **)&ca->ob, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_MESSAGE:
+			{
+				bMessageActuator *ma = actuator->data;
+				func(actuator, (ID **)&ma->toObject, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_2DFILTER:
+			{
+				bTwoDFilterActuator *tdfa = actuator->data;
+				func(actuator, (ID **)&tdfa->text, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_PARENT:
+			{
+				bParentActuator *pa = actuator->data;
+				func(actuator, (ID **)&pa->ob, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_ARMATURE:
+			{
+				bArmatureActuator *aa = actuator->data;
+				func(actuator, (ID **)&aa->target, userdata, IDWALK_NOP);
+				func(actuator, (ID **)&aa->subtarget, userdata, IDWALK_NOP);
+				break;
+			}
+			case ACT_STEERING:
+			{
+				bSteeringActuator *sa = actuator->data;
+				func(actuator, (ID **)&sa->target, userdata, IDWALK_NOP);
+				func(actuator, (ID **)&sa->navmesh, userdata, IDWALK_NOP);
+				break;
+			}
+			/* Note: some types seems to be non-implemented? ACT_LAMP, ACT_MATERIAL... */
+			case ACT_IPO:  /* DEPRECATED */
+			case ACT_LAMP:
+			case ACT_MATERIAL:
+			case ACT_END_OBJECT:  /* DEPRECATED */
+			case ACT_CONSTRAINT:
+			case ACT_GROUP:
+			case ACT_RANDOM:
+			case ACT_GAME:
+			case ACT_VISIBILITY:
+			case ACT_SHAPEACTION:
+			case ACT_STATE:
+			case ACT_MOUSE:
+			default:
+				break;
+		}
+	}
+}
+
 const char *sca_state_name_get(Object *ob, short bit)
 {
 	bController *cont;




More information about the Bf-blender-cvs mailing list