[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29111] branches/soc-2010-nicks: Added new actuator type for following steering behaviors: seek, flee, path following; renamed KX_Pathfinder to KX_NavMeshObject

Nick Samarin nicks1987 at bigmir.net
Tue Jun 1 00:35:22 CEST 2010


Revision: 29111
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29111
Author:   nicks
Date:     2010-06-01 00:35:22 +0200 (Tue, 01 Jun 2010)

Log Message:
-----------
Added new actuator type for following steering behaviors: seek, flee, path following; renamed KX_Pathfinder to KX_NavMeshObject

Modified Paths:
--------------
    branches/soc-2010-nicks/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
    branches/soc-2010-nicks/source/blender/blenkernel/intern/sca.c
    branches/soc-2010-nicks/source/blender/blenloader/intern/readfile.c
    branches/soc-2010-nicks/source/blender/blenloader/intern/writefile.c
    branches/soc-2010-nicks/source/blender/editors/space_logic/logic_window.c
    branches/soc-2010-nicks/source/blender/makesdna/DNA_actuator_types.h
    branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c
    branches/soc-2010-nicks/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/soc-2010-nicks/source/gameengine/Converter/KX_ConvertActuators.cpp
    branches/soc-2010-nicks/source/gameengine/GameLogic/SCA_IActuator.h
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_PythonInitTypes.cpp

Added Paths:
-----------
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.h
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_SteeringActuator.h

Removed Paths:
-------------
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_Pathfinder.cpp
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_Pathfinder.h

Modified: branches/soc-2010-nicks/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
===================================================================
--- branches/soc-2010-nicks/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj	2010-05-31 22:35:22 UTC (rev 29111)
@@ -552,7 +552,7 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\source\gameengine\Ketsji\KX_Pathfinder.cpp"
+				RelativePath="..\..\..\source\gameengine\Ketsji\KX_NavMeshObject.cpp"
 				>
 			</File>
 			<File
@@ -683,6 +683,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\..\..\source\gameengine\Ketsji\KX_SteeringActuator.cpp"
+					>
+				</File>
+				<File
 					RelativePath="..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.cpp"
 					>
 				</File>
@@ -857,11 +861,11 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.h"
+				RelativePath="..\..\..\source\gameengine\Ketsji\KX_NavMeshObject.h"
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\source\gameengine\Ketsji\KX_Pathfinder.h"
+				RelativePath="..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.h"
 				>
 			</File>
 			<File
@@ -1000,6 +1004,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\..\..\source\gameengine\Ketsji\KX_SteeringActuator.h"
+					>
+				</File>
+				<File
 					RelativePath="..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.h"
 					>
 				</File>

Modified: branches/soc-2010-nicks/source/blender/blenkernel/intern/sca.c
===================================================================
--- branches/soc-2010-nicks/source/blender/blenkernel/intern/sca.c	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/blenkernel/intern/sca.c	2010-05-31 22:35:22 UTC (rev 29111)
@@ -468,6 +468,8 @@
 	case ACT_ARMATURE:
 		act->data = MEM_callocN(sizeof( bArmatureActuator ), "armature act");
 		break;
+	case ACT_STEERING:
+		act->data = MEM_callocN(sizeof( bSteeringActuator), "steering act");
 	default:
 		; /* this is very severe... I cannot make any memory for this        */
 		/* logic brick...                                                    */
@@ -611,6 +613,7 @@
 	bMessageActuator *ma;
 	bParentActuator *para;
 	bArmatureActuator *aa;
+	bSteeringActuator *sta;
 
 	sens= obt->sensors.first;
 	while(sens) {
@@ -658,6 +661,11 @@
 			if (aa->target == ob) aa->target = NULL;
 			if (aa->subtarget == ob) aa->subtarget = NULL;
 			break;
+		case ACT_STEERING:
+			sta = act->data;
+			if (sta->target==ob) sta->target = NULL;
+			if (sta->navmesh==ob) sta->navmesh = NULL;
+			break;			
 		}
 		act= act->next;
 	}	

Modified: branches/soc-2010-nicks/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2010-nicks/source/blender/blenloader/intern/readfile.c	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/blenloader/intern/readfile.c	2010-05-31 22:35:22 UTC (rev 29111)
@@ -3612,6 +3612,11 @@
 					arma->target= newlibadr(fd, ob->id.lib, arma->target);
 					arma->subtarget= newlibadr(fd, ob->id.lib, arma->subtarget);
 				}
+				else if(act->type==ACT_STEERING) {
+					bSteeringActuator *steeringa = act->data; 
+					steeringa->target = newlibadr(fd, ob->id.lib, steeringa->target);
+					steeringa->navmesh = newlibadr(fd, ob->id.lib, steeringa->navmesh);
+				}
 				act= act->next;
 			}
 			
@@ -11745,6 +11750,11 @@
 			bArmatureActuator *arma= act->data;
 			expand_doit(fd, mainvar, arma->target);
 		}
+		else if(act->type==ACT_STEERING) {
+			bSteeringActuator *sta= act->data;
+			expand_doit(fd, mainvar, sta->target);
+			expand_doit(fd, mainvar, sta->navmesh);
+		}
 		act= act->next;
 	}
 

Modified: branches/soc-2010-nicks/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2010-nicks/source/blender/blenloader/intern/writefile.c	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/blenloader/intern/writefile.c	2010-05-31 22:35:22 UTC (rev 29111)
@@ -858,6 +858,9 @@
 		case ACT_ARMATURE:
 			writestruct(wd, DATA, "bArmatureActuator", 1, act->data);
 			break;
+		case ACT_STEERING:
+			writestruct(wd, DATA, "bSteeringActuator", 1, act->data);
+			break;
 		default:
 			; /* error: don't know how to write this file */
 		}

Modified: branches/soc-2010-nicks/source/blender/editors/space_logic/logic_window.c
===================================================================
--- branches/soc-2010-nicks/source/blender/editors/space_logic/logic_window.c	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/editors/space_logic/logic_window.c	2010-05-31 22:35:22 UTC (rev 29111)
@@ -710,6 +710,8 @@
 		return "State";
 	case ACT_ARMATURE:
 		return "Armature";
+	case ACT_STEERING:
+		return "Steering";
 	}
 	return "unknown";
 }
@@ -2895,7 +2897,6 @@
 		uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); 
 		  yco-= ysize; 
 		  break; 
-
 	 default:
 		ysize= 4;
 
@@ -4232,6 +4233,20 @@
 	uiItemR(row, ptr, "children", 0, NULL, 0);
 }
 
+static void draw_actuator_steering(uiLayout *layout, PointerRNA *ptr)
+{
+	uiLayout *row;
+
+	uiItemR(layout, ptr, "mode", 0, NULL, 0);
+	uiItemR(layout, ptr, "target", 0, NULL, 0);
+	uiItemR(layout, ptr, "navmesh", 0, NULL, 0);	
+
+	row = uiLayoutRow(layout, 0);
+	uiItemR(row, ptr, "distance", 0, NULL, 0);
+	uiItemR(row, ptr, "movement", 0, NULL, 0);
+}
+
+
 void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr, bContext *C)
 {
 	uiLayout *box;
@@ -4296,6 +4311,8 @@
 		case ACT_VISIBILITY:
 			draw_actuator_visibility(box, ptr);
 			break;
+		case ACT_STEERING:
+			draw_actuator_steering(box, ptr);
 	}
 }
 

Modified: branches/soc-2010-nicks/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- branches/soc-2010-nicks/source/blender/makesdna/DNA_actuator_types.h	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/makesdna/DNA_actuator_types.h	2010-05-31 22:35:22 UTC (rev 29111)
@@ -214,6 +214,15 @@
 	struct Object *subtarget;
 } bArmatureActuator;
 
+typedef struct bSteeringActuator {
+	char pad[4];
+	int type;		/* 0=seek, 1=flee, 2=path following */
+	float dist;
+	float movement;
+	struct Object *target;
+	struct Object *navmesh;
+} bSteeringActuator;
+
 typedef struct bActuator {
 	struct bActuator *next, *prev, *mynew;
 	short type;
@@ -286,6 +295,7 @@
 #define ACT_SHAPEACTION 21
 #define ACT_STATE		22
 #define ACT_ARMATURE	23
+#define ACT_STEERING    24
 
 /* actuator flag */
 #define ACT_SHOW		1
@@ -502,6 +512,11 @@
 #define ACT_CAMERA_X		(float)'x'
 #define ACT_CAMERA_Y		(float)'y'
 
+/* steeringactuator->type */
+#define ACT_STEERING_SEEK   0
+#define ACT_STEERING_FLEE   1
+#define ACT_STEERING_PATHFOLLOWING   2
+
 #endif
 
 

Modified: branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c
===================================================================
--- branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c	2010-05-31 20:48:22 UTC (rev 29110)
+++ branches/soc-2010-nicks/source/blender/makesrna/intern/rna_actuator.c	2010-05-31 22:35:22 UTC (rev 29111)
@@ -54,6 +54,7 @@
 	{ACT_SOUND, "SOUND", 0, "Sound", ""},
 	{ACT_STATE, "STATE", 0, "State", ""},
 	{ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
+	{ACT_STEERING, "STEERING", 0, "Steering", ""},
 	{0, NULL, 0, NULL, NULL}};
 
 EnumPropertyItem edit_object_type_items[] ={
@@ -109,6 +110,8 @@
 			return &RNA_StateActuator;
 		case ACT_ARMATURE:
 			return &RNA_ArmatureActuator;
+		case ACT_STEERING:
+			return &RNA_SteeringActuator;
 		default:
 			return &RNA_Actuator;
 	}
@@ -401,6 +404,7 @@
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_PROPERTY);
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_RANDOM);
 	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_SCENE);
+	RNA_enum_items_add_value(&item, &totitem, actuator_type_items, ACT_STEERING);
 
 	if (ob != NULL) {
 		if (ob->type==OB_MESH){
@@ -1841,6 +1845,54 @@
 	RNA_def_property_update(prop, NC_LOGIC, NULL);
 }
 
+static void rna_def_steering_actuator(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	static EnumPropertyItem prop_type_items[] ={
+		{ACT_STEERING_SEEK, "SEEK", 0, "Seek", ""},
+		{ACT_STEERING_FLEE, "FLEE", 0, "Flee", ""},
+		{ACT_STEERING_PATHFOLLOWING, "PATHFOLLOWING", 0, "Path following", ""},
+		{0, NULL, 0, NULL, NULL}};
+
+	srna= RNA_def_struct(brna, "SteeringActuator", "Actuator");
+	RNA_def_struct_ui_text(srna, "Steering Actuator", "");
+	RNA_def_struct_sdna_from(srna, "bSteeringActuator", "data");
+
+	prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "type");
+	RNA_def_property_enum_items(prop, prop_type_items);
+	RNA_def_property_ui_text(prop, "Behavior", "");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	prop= RNA_def_property(srna, "movement", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "movement");
+	RNA_def_property_range(prop, 0.0, 1000.0);
+	RNA_def_property_ui_text(prop, "Move", "Movement value");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "dist");
+	RNA_def_property_range(prop, 0.0, 1000.0);
+	RNA_def_property_ui_text(prop, "Dist", "Relax distance");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+	RNA_def_property_struct_type(prop, "Object");
+	RNA_def_property_pointer_sdna(prop, NULL, "target");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Target Object", "Set target object");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+
+	prop= RNA_def_property(srna, "navmesh", PROP_POINTER, PROP_NONE);
+	RNA_def_property_struct_type(prop, "Object");
+	RNA_def_property_pointer_sdna(prop, NULL, "navmesh");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "NavMesh Object", "Navigation mesh");
+	RNA_def_property_update(prop, NC_LOGIC, NULL);
+}
+
 void RNA_def_actuator(BlenderRNA *brna)
 {
 	rna_def_actuator(brna);
@@ -1863,6 +1915,7 @@
 	rna_def_shape_action_actuator(brna);
 	rna_def_state_actuator(brna);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list