[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59146] trunk/blender/source: BGE: The Action Actuator can now make use of additive blending.

Mitchell Stokes mogurijin at gmail.com
Thu Aug 15 01:32:00 CEST 2013


Revision: 59146
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59146
Author:   moguri
Date:     2013-08-14 23:32:00 +0000 (Wed, 14 Aug 2013)
Log Message:
-----------
BGE: The Action Actuator can now make use of additive blending.

Modified Paths:
--------------
    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/BL_ActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
    trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2013-08-14 23:32:00 UTC (rev 59146)
@@ -1465,6 +1465,7 @@
 	row = uiLayoutRow(layout, FALSE);
 	uiItemR(row, ptr, "layer", 0, NULL, ICON_NONE);
 	uiItemR(row, ptr, "layer_weight", 0, NULL, ICON_NONE);
+	uiItemR(row, ptr, "blend_mode", 0, "", ICON_NONE);
 
 	uiItemPointerR(layout, ptr, "frame_property", &settings_ptr, "properties", NULL, ICON_NONE);
 

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2013-08-14 23:32:00 UTC (rev 59146)
@@ -59,7 +59,7 @@
 	short   layer;          /* Animation layer */
 	short   end_reset;      /* Ending the actuator (negative pulse) wont reset the the action to its starting frame */
 	short   strideaxis;     /* Displacement axis */
-	short   pad;
+	short   blend_mode;		/* Layer blending mode */
 	float   stridelength;   /* Displacement incurred by cycle */ // not in use
 	float   layer_weight;   /* How much of the previous layer to use for blending. (<0 = disable, 0 = add mode) */
 } bActionActuator;
@@ -341,6 +341,10 @@
 #define ACT_ACTION_FROM_PROP	6
 #define ACT_ACTION_MOTION		7
 
+/* actionactuator->blend_mode */
+#define ACT_ACTION_BLEND		0
+#define ACT_ACTION_ADD			1
+
 /* ipoactuator->type */
 #define ACT_IPO_PLAY		0
 #define ACT_IPO_PINGPONG	1

Modified: trunk/blender/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/blender/makesrna/intern/rna_actuator.c	2013-08-14 23:32:00 UTC (rev 59146)
@@ -593,6 +593,12 @@
 		{0, NULL, 0, NULL, NULL}
 	};
 
+	static EnumPropertyItem prop_blend_items[] = {
+	    {ACT_ACTION_BLEND, "BLEND", 0, "Blend", ""},
+	    {ACT_ACTION_ADD, "ADD", 0, "Add", ""},
+	    {0, NULL, 0, NULL, NULL}
+	};
+
 	srna = RNA_def_struct(brna, "ActionActuator", "Actuator");
 	RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to control the object movement");
 	RNA_def_struct_sdna_from(srna, "bActionActuator", "data");
@@ -656,7 +662,7 @@
 	prop = RNA_def_property(srna, "layer_weight", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_range(prop, 0.0, 1.0);
 	RNA_def_property_ui_text(prop, "Layer Weight",
-	                         "How much of the previous layer to blend into this one (0 = add mode)");
+	                         "How much of the previous layer to blend into this one");
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 
 	prop = RNA_def_property(srna, "frame_property", PROP_STRING, PROP_NONE);
@@ -691,6 +697,12 @@
 	RNA_def_property_ui_text(prop, "Child", "Update Action on all children Objects as well");
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 
+	prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "blend_mode");
+	RNA_def_property_enum_items(prop, prop_blend_items);
+	RNA_def_property_ui_text(prop, "Blend Mode", "Determines how this layer is blended with previous layers");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
 #ifdef __NLA_ACTION_BY_MOTION_ACTUATOR
 	prop = RNA_def_property(srna, "stride_length", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "stridelength");

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp	2013-08-14 23:32:00 UTC (rev 59146)
@@ -66,6 +66,7 @@
 					float endtime,
 					struct bAction *action,
 					short	playtype,
+					short	blend_mode,
 					short	blendin,
 					short	priority,
 					short	layer,
@@ -88,6 +89,7 @@
 	m_stridelength(stride),
 	m_layer_weight(layer_weight),
 	m_playtype(playtype),
+    m_blendmode(blend_mode),
 	m_priority(priority),
 	m_layer(layer),
 	m_ipo_flags(ipo_flags),
@@ -187,6 +189,7 @@
 	bool bUseContinue = false;
 	KX_GameObject *obj = (KX_GameObject*)GetParent();
 	short playtype = BL_Action::ACT_MODE_PLAY;
+	short blendmode = (m_blendmode == ACT_ACTION_ADD) ? BL_Action::ACT_BLEND_ADD : BL_Action::ACT_BLEND_BLEND;
 	float start = m_startframe;
 	float end = m_endframe;
 
@@ -283,7 +286,7 @@
 			ResetStartTime(curtime);
 		}
 
-		if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, playtype, m_layer_weight, m_ipo_flags))
+		if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, playtype, m_layer_weight, m_ipo_flags, 1.f, blendmode))
 		{
 			m_flag |= ACT_FLAG_ACTIVE;
 			if (bUseContinue)
@@ -328,7 +331,7 @@
 				// Convert into a play action and play back to the beginning
 				end = start;
 				start = obj->GetActionFrame(m_layer);
-				obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, 0, BL_Action::ACT_MODE_PLAY, m_layer_weight, m_ipo_flags);
+				obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, 0, BL_Action::ACT_MODE_PLAY, m_layer_weight, m_ipo_flags, 1.f, blendmode);
 
 				m_flag |= ACT_FLAG_PLAY_END;
 				break;

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.h	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.h	2013-08-14 23:32:00 UTC (rev 59146)
@@ -48,6 +48,7 @@
 						float endtime,
 						struct bAction *action,
 						short	playtype,
+						short	blend_mode,
 						short	blendin,
 						short	priority,
 						short	layer,
@@ -129,6 +130,7 @@
 	float	m_stridelength;
 	float	m_layer_weight;
 	short	m_playtype;
+	short   m_blendmode;
 	short	m_priority;
 	short	m_layer;
 	short	m_ipo_flags;

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2013-08-14 23:31:49 UTC (rev 59145)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2013-08-14 23:32:00 UTC (rev 59146)
@@ -225,6 +225,7 @@
 				            actact->end,
 				            actact->act,
 				            actact->type, // + 1, because Blender starts to count at zero,
+				            actact->blend_mode,
 				            actact->blendin,
 				            actact->priority,
 				            actact->layer,




More information about the Bf-blender-cvs mailing list