[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29377] branches/soc-2010-nicks: Added parameters for obstacle avoidance simulation: for object - flag for creation representation in simulation(OB_HASOBSTACLE ) and obstacle radius (obstacleRad), for scene - obstacle simulation type ( obstacleSimulation); added ui for new parameters
Nick Samarin
nicks1987 at bigmir.net
Thu Jun 10 02:19:07 CEST 2010
Revision: 29377
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29377
Author: nicks
Date: 2010-06-10 02:19:06 +0200 (Thu, 10 Jun 2010)
Log Message:
-----------
Added parameters for obstacle avoidance simulation: for object - flag for creation representation in simulation(OB_HASOBSTACLE) and obstacle radius (obstacleRad), for scene - obstacle simulation type (obstacleSimulation); added ui for new parameters
Modified Paths:
--------------
branches/soc-2010-nicks/release/scripts/ui/properties_game.py
branches/soc-2010-nicks/source/blender/blenkernel/intern/object.c
branches/soc-2010-nicks/source/blender/blenkernel/intern/scene.c
branches/soc-2010-nicks/source/blender/makesdna/DNA_object_types.h
branches/soc-2010-nicks/source/blender/makesdna/DNA_scene_types.h
branches/soc-2010-nicks/source/blender/makesrna/intern/rna_object.c
branches/soc-2010-nicks/source/blender/makesrna/intern/rna_scene.c
branches/soc-2010-nicks/source/gameengine/Converter/BL_BlenderDataConversion.cpp
branches/soc-2010-nicks/source/gameengine/Ketsji/KX_ObstacleSimulation.cpp
branches/soc-2010-nicks/source/gameengine/Ketsji/KX_Scene.cpp
branches/soc-2010-nicks/source/gameengine/Ketsji/KX_Scene.h
Modified: branches/soc-2010-nicks/release/scripts/ui/properties_game.py
===================================================================
--- branches/soc-2010-nicks/release/scripts/ui/properties_game.py 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/release/scripts/ui/properties_game.py 2010-06-10 00:19:06 UTC (rev 29377)
@@ -194,8 +194,32 @@
if wide_ui:
col = split.column()
col.prop(game, "collision_compound", text="Compound")
+
+class PHYSICS_PT_game_obstacles(PhysicsButtonsPanel):
+ bl_label = "Create obstacle"
+ def poll(self, context):
+ game = context.object.game
+ rd = context.scene.render
+ return (game.physics_type in ('DYNAMIC', 'RIGID_BODY', 'SENSOR', 'SOFT_BODY', 'STATIC')) and (rd.engine == 'BLENDER_GAME')
+ def draw_header(self, context):
+ game = context.active_object.game
+
+ self.layout.prop(game, "create_obstacle", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ game = context.active_object.game
+ wide_ui = context.region.width > narrowui
+
+ layout.active = game.create_obstacle
+
+ split = layout.split()
+ col = split.column()
+ col.prop(game, "obstacle_radius", text="Radius")
+
class RenderButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
@@ -510,10 +534,21 @@
col.label(text="Logic Steps:")
col.prop(gs, "logic_step_max", text="Max")
+class WORLD_PT_game_physics_obstacles(WorldButtonsPanel):
+ bl_label = "Obstacle simulation"
+ def draw(self, context):
+ layout = self.layout
+
+ gs = context.scene.game_data
+ wide_ui = context.region.width > narrowui
+
+ layout.prop(gs, "obstacle_simulation", text = "Type")
+
classes = [
PHYSICS_PT_game_physics,
PHYSICS_PT_game_collision_bounds,
+ PHYSICS_PT_game_obstacles,
RENDER_PT_game,
RENDER_PT_game_player,
@@ -525,7 +560,8 @@
WORLD_PT_game_context_world,
WORLD_PT_game_world,
WORLD_PT_game_mist,
- WORLD_PT_game_physics]
+ WORLD_PT_game_physics,
+ WORLD_PT_game_physics_obstacles]
def register():
Modified: branches/soc-2010-nicks/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2010-nicks/source/blender/blenkernel/intern/object.c 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/blenkernel/intern/object.c 2010-06-10 00:19:06 UTC (rev 29377)
@@ -1028,6 +1028,7 @@
ob->margin = 0.0;
/* ob->pad3 == Contact Processing Threshold */
ob->m_contactProcessingThreshold = 1.;
+ ob->obstacleRad = 1.;
/* NT fluid sim defaults */
ob->fluidsimFlag = 0;
Modified: branches/soc-2010-nicks/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/soc-2010-nicks/source/blender/blenkernel/intern/scene.c 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/blenkernel/intern/scene.c 2010-06-10 00:19:06 UTC (rev 29377)
@@ -472,6 +472,8 @@
sce->gm.flag = GAME_DISPLAY_LISTS;
sce->gm.matmode = GAME_MAT_MULTITEX;
+ sce->gm.obstacleSimulation= OBSTSIMULATION_NONE;
+
sound_create_scene(sce);
return sce;
Modified: branches/soc-2010-nicks/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/soc-2010-nicks/source/blender/makesdna/DNA_object_types.h 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/makesdna/DNA_object_types.h 2010-06-10 00:19:06 UTC (rev 29377)
@@ -182,6 +182,8 @@
float max_vel; /* clamp the maximum velocity 0.0 is disabled */
float min_vel; /* clamp the maximum velocity 0.0 is disabled */
float m_contactProcessingThreshold;
+ float obstacleRad;
+ char pad0[4];
short rotmode; /* rotation mode - uses defines set out in DNA_action_types.h for PoseChannel rotations... */
@@ -465,6 +467,7 @@
#define OB_OCCLUDER 0x40000
#define OB_SENSOR 0x80000
#define OB_NAVMESH 0x100000
+#define OB_HASOBSTACLE 0x200000
/* ob->gameflag2 */
#define OB_NEVER_DO_ACTIVITY_CULLING 1
Modified: branches/soc-2010-nicks/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/soc-2010-nicks/source/blender/makesdna/DNA_scene_types.h 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/makesdna/DNA_scene_types.h 2010-06-10 00:19:06 UTC (rev 29377)
@@ -451,10 +451,11 @@
* bit 3: (gameengine): Activity culling is enabled.
* bit 5: (gameengine) : enable Bullet DBVT tree for view frustrum culling
*/
- short mode, flag, matmode, pad[3];
+ short mode, flag, matmode, pad[6];
short occlusionRes; /* resolution of occlusion Z buffer in pixel */
short physicsEngine;
short ticrate, maxlogicstep, physubstep, maxphystep;
+ short obstacleSimulation;
/* standalone player */
struct GameFraming framing;
@@ -488,6 +489,10 @@
#define WOPHY_ODE 4
#define WOPHY_BULLET 5
+/* obstacleSimulation */
+#define OBSTSIMULATION_NONE 0
+#define OBSTSIMULATION_TOI 1
+
/* GameData.flag */
#define GAME_ENABLE_ALL_FRAMES (1 << 1)
#define GAME_SHOW_DEBUG_PROPS (1 << 2)
Modified: branches/soc-2010-nicks/source/blender/makesrna/intern/rna_object.c
===================================================================
--- branches/soc-2010-nicks/source/blender/makesrna/intern/rna_object.c 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/makesrna/intern/rna_object.c 2010-06-10 00:19:06 UTC (rev 29377)
@@ -1269,6 +1269,15 @@
RNA_def_property_pointer_sdna(prop, NULL, "bsoft");
RNA_def_property_ui_text(prop, "Soft Body Settings", "Settings for Bullet soft body simulation");
+ prop= RNA_def_property(srna, "create_obstacle", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_HASOBSTACLE);
+ RNA_def_property_ui_text(prop, "Create obstacle", "Create representation for obstacle simulation");
+
+ prop= RNA_def_property(srna, "obstacle_radius", PROP_FLOAT, PROP_NONE|PROP_UNIT_LENGTH);
+ RNA_def_property_float_sdna(prop, NULL, "obstacleRad");
+ RNA_def_property_range(prop, 0.0, 1000.0);
+ RNA_def_property_ui_text(prop, "Obstacle Radius", "Radius of object representation in obstacle simulation");
+
/* state */
prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
Modified: branches/soc-2010-nicks/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/soc-2010-nicks/source/blender/makesrna/intern/rna_scene.c 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/blender/makesrna/intern/rna_scene.c 2010-06-10 00:19:06 UTC (rev 29377)
@@ -1511,6 +1511,11 @@
{GAME_MAT_GLSL, "GLSL", 0, "GLSL", "OpenGL shading language shaders"},
{0, NULL, 0, NULL, NULL}};
+ static EnumPropertyItem obstacle_simulation_items[] = {
+ {OBSTSIMULATION_NONE, "NONE", 0, "None", ""},
+ {OBSTSIMULATION_TOI, "TOI", 0, "TOI", ""},
+ {0, NULL, 0, NULL, NULL}};
+
srna= RNA_def_struct(brna, "SceneGameData", NULL);
RNA_def_struct_sdna(srna, "GameData");
RNA_def_struct_nested(brna, srna, "Scene");
@@ -1748,6 +1753,13 @@
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_EXTRA_TEX);
RNA_def_property_ui_text(prop, "GLSL Extra Textures", "Use extra textures like normal or specular maps for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+
+ /* obstacle simulation */
+ prop= RNA_def_property(srna, "obstacle_simulation", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "obstacleSimulation");
+ RNA_def_property_enum_items(prop, obstacle_simulation_items);
+ RNA_def_property_ui_text(prop, "Obstacle simulation", "Simulation used for obstacle avoidance in the game engine");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
}
static void rna_def_scene_render_layer(BlenderRNA *brna)
Modified: branches/soc-2010-nicks/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2010-06-10 00:19:06 UTC (rev 29377)
@@ -2647,7 +2647,8 @@
for ( i=0;i<objectlist->GetCount();i++)
{
KX_GameObject* gameobj = static_cast<KX_GameObject*>(objectlist->GetValue(i));
- if (gameobj->IsDynamic())
+ struct Object* blenderobject = gameobj->GetBlenderObject();
+ if (blenderobject->gameflag & OB_HASOBSTACLE)
{
obssimulation->AddObstacleForObj(gameobj);
}
Modified: branches/soc-2010-nicks/source/gameengine/Ketsji/KX_ObstacleSimulation.cpp
===================================================================
--- branches/soc-2010-nicks/source/gameengine/Ketsji/KX_ObstacleSimulation.cpp 2010-06-09 21:27:44 UTC (rev 29376)
+++ branches/soc-2010-nicks/source/gameengine/Ketsji/KX_ObstacleSimulation.cpp 2010-06-10 00:19:06 UTC (rev 29377)
@@ -36,9 +36,12 @@
#include "KX_NavMeshObject.h"
#include "KX_PythonInit.h"
#include "DNA_object_types.h"
-#include "math.h"
-#define M_PI 3.14159265358979323846
+#include <math.h>
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
int sweepCircleCircle(const MT_Vector3& pos0, const MT_Scalar r0, const MT_Vector2& v,
const MT_Vector3& pos1, const MT_Scalar r1,
float& tmin, float& tmax)
@@ -168,7 +171,7 @@
struct Object* blenderobject = gameobj->GetBlenderObject();
obstacle->m_type = KX_OBSTACLE_OBJ;
obstacle->m_shape = KX_OBSTACLE_CIRCLE;
- obstacle->m_rad = blenderobject->inertia; //.todo use radius of collision shape bound sphere
+ obstacle->m_rad = blenderobject->obstacleRad;
obstacle->m_gameObj = gameobj;
}
@@ -235,12 +238,21 @@
void KX_ObstacleSimulation::DrawObstacles()
{
static const MT_Vector3 bluecolor(0,0,1);
+ static const MT_Vector3 normal(0.,0.,1.);
+ static const int SECTORS_NUM = 32;
for (size_t i=0; i<m_obstacles.size(); i++)
{
if (m_obstacles[i]->m_shape==KX_OBSTACLE_SEGMENT)
{
KX_RasterizerDrawDebugLine(m_obstacles[i]->m_pos, m_obstacles[i]->m_pos2, bluecolor);
}
+/*
+ else if (m_obstacles[i]->m_shape==KX_OBSTACLE_CIRCLE)
+ {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list