[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25624] trunk/blender/source/blender/ blenkernel: Fix for [#20430] Boids options for Flying and climbing do not work

Janne Karhu jhkarh at utu.fi
Wed Dec 30 16:58:59 CET 2009


Revision: 25624
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25624
Author:   jhk
Date:     2009-12-30 16:58:59 +0100 (Wed, 30 Dec 2009)

Log Message:
-----------
Fix for [#20430] Boids options for Flying and climbing do not work
* Boids didn't yet use global gravity

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_particle.h
    trunk/blender/source/blender/blenkernel/intern/boids.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c

Modified: trunk/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_particle.h	2009-12-30 15:45:41 UTC (rev 25623)
+++ trunk/blender/source/blender/blenkernel/BKE_particle.h	2009-12-30 15:58:59 UTC (rev 25624)
@@ -203,6 +203,7 @@
 int psys_check_edited(struct ParticleSystem *psys);
 
 void psys_check_group_weights(struct ParticleSettings *part);
+int psys_uses_gravity(struct ParticleSimulationData *sim);
 
 /* free */
 void psys_free_settings(struct ParticleSettings *part);

Modified: trunk/blender/source/blender/blenkernel/intern/boids.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/boids.c	2009-12-30 15:45:41 UTC (rev 25623)
+++ trunk/blender/source/blender/blenkernel/intern/boids.c	2009-12-30 15:58:59 UTC (rev 25624)
@@ -557,8 +557,8 @@
 		add_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec);
 
 		/* leveling */
-		if(asbr->level > 0.0f) {
-			project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->psys->part->acc);
+		if(asbr->level > 0.0f && psys_uses_gravity(bbd->sim)) {
+			project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->scene->physics_settings.gravity);
 			mul_v3_fl(vec, asbr->level);
 			sub_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec);
 		}
@@ -574,8 +574,8 @@
 		}
 		
 		/* leveling */
-		if(asbr->level > 0.0f) {
-			project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->psys->part->acc);
+		if(asbr->level > 0.0f && psys_uses_gravity(bbd->sim)) {
+			project_v3_v3v3(vec, bbd->wanted_co, bbd->sim->scene->physics_settings.gravity);
 			mul_v3_fl(vec, asbr->level);
 			sub_v3_v3v3(bbd->wanted_co, bbd->wanted_co, vec);
 		}
@@ -1002,8 +1002,8 @@
 				if(dot_v2v2(cvel, dir) > 0.95f / mul || len <= state->rule_fuzziness) {
 					/* try to reach goal at highest point of the parabolic path */
 					cur_v = len_v2(pa->prev_state.vel);
-					z_v = sasqrt(-2.0f * bbd->part->acc[2] * bbd->wanted_co[2]);
-					ground_v = len_v2(bbd->wanted_co)*sasqrt(-0.5f * bbd->part->acc[2] / bbd->wanted_co[2]);
+					z_v = sasqrt(-2.0f * bbd->sim->scene->physics_settings.gravity[2] * bbd->wanted_co[2]);
+					ground_v = len_v2(bbd->wanted_co)*sasqrt(-0.5f * bbd->sim->scene->physics_settings.gravity[2] / bbd->wanted_co[2]);
 
 					len = sasqrt((ground_v-cur_v)*(ground_v-cur_v) + z_v*z_v);
 
@@ -1061,12 +1061,12 @@
 		pa_mass*=pa->size;
 
 	/* if boids can't fly they fall to the ground */
-	if((boids->options & BOID_ALLOW_FLIGHT)==0 && ELEM(bpa->data.mode, eBoidMode_OnLand, eBoidMode_Climbing)==0 && bbd->part->acc[2] != 0.0f)
+	if((boids->options & BOID_ALLOW_FLIGHT)==0 && ELEM(bpa->data.mode, eBoidMode_OnLand, eBoidMode_Climbing)==0 && psys_uses_gravity(bbd->sim))
 		bpa->data.mode = eBoidMode_Falling;
 
 	if(bpa->data.mode == eBoidMode_Falling) {
 		/* Falling boids are only effected by gravity. */
-		acc[2] = bbd->part->acc[2];
+		acc[2] = bbd->sim->scene->physics_settings.gravity[2];
 	}
 	else {
 		/* figure out acceleration */
@@ -1221,7 +1221,7 @@
 	switch(bpa->data.mode) {
 		case eBoidMode_InAir:
 		{
-			float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f};
+			float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f};
 
 			/* don't take forward acceleration into account (better banking) */
 			if(dot_v3v3(bpa->data.acc, pa->state.vel) > 0.0f) {
@@ -1253,7 +1253,7 @@
 		}
 		case eBoidMode_Falling:
 		{
-			float grav[3] = {0.0f, 0.0f, bbd->part->acc[2] < 0.0f ? -1.0f : 0.0f};
+			float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f};
 
 			/* gather apparent gravity */
 			VECADDFAC(bpa->gravity, bpa->gravity, grav, dtime);

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2009-12-30 15:45:41 UTC (rev 25623)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2009-12-30 15:58:59 UTC (rev 25624)
@@ -361,6 +361,10 @@
 		BLI_freelistN(&part->dupliweights);
 	}
 }
+int psys_uses_gravity(ParticleSimulationData *sim)
+{
+	return sim->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY && sim->psys->part && sim->psys->part->effector_weights->global_gravity != 0.0f;
+}
 /************************************************/
 /*			Freeing stuff						*/
 /************************************************/

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2009-12-30 15:45:41 UTC (rev 25623)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2009-12-30 15:58:59 UTC (rev 25624)
@@ -2332,7 +2332,7 @@
 		mul_v3_fl(force,1.0f/pa_mass);
 
 		/* add global acceleration (gravitation) */
-		if(sim->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY
+		if(psys_uses_gravity(sim)
 			/* normal gravity is too strong for hair so it's disabled by default */
 			&& (part->type != PART_HAIR || part->effector_weights->flag & EFF_WEIGHT_DO_HAIR)) {
 			float gravity[3];





More information about the Bf-blender-cvs mailing list