Blender V4.3
boids.cc File Reference
#include <cmath>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_object_force_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_kdtree.h"
#include "BLI_math_base_safe.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_rand.h"
#include "BLI_utildefines.h"
#include "BKE_boids.h"
#include "BKE_collision.h"
#include "BKE_effect.h"
#include "BKE_particle.h"
#include "BLI_kdopbvh.h"
#include "BLT_translation.hh"
#include "BKE_modifier.hh"
#include "RNA_enum_types.hh"

Go to the source code of this file.

Classes

struct  BoidValues
 

Typedefs

using boid_rule_cb
 

Functions

static float len_squared_v3v3_with_normal_bias (const float co_search[3], const float co_test[3], const void *user_data)
 
static bool apply_boid_rule (BoidBrainData *bbd, BoidRule *rule, BoidValues *val, ParticleData *pa, float fuzziness)
 
static bool rule_none (BoidRule *, BoidBrainData *, BoidValues *, ParticleData *)
 
static bool rule_goal_avoid (BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_avoid_collision (BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_separate (BoidRule *, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_flock (BoidRule *, BoidBrainData *bbd, BoidValues *, ParticleData *pa)
 
static bool rule_follow_leader (BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_average_speed (BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_fight (BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static void set_boid_values (BoidValues *val, BoidSettings *boids, ParticleData *pa)
 
static Objectboid_find_ground (BoidBrainData *bbd, ParticleData *pa, float ground_co[3], float ground_nor[3])
 
static bool boid_rule_applies (ParticleData *pa, BoidSettings *, BoidRule *rule)
 
void boids_precalc_rules (ParticleSettings *part, float cfra)
 
static void boid_climb (BoidSettings *boids, ParticleData *pa, float *surface_co, float *surface_nor)
 
static float boid_goal_signed_dist (float *boid_co, float *goal_co, float *goal_nor)
 
static BoidStateget_boid_state (BoidSettings *boids, ParticleData *pa)
 
void boid_brain (BoidBrainData *bbd, int p, ParticleData *pa)
 
void boid_body (BoidBrainData *bbd, ParticleData *pa)
 
BoidRuleboid_new_rule (int type)
 
void boid_default_settings (BoidSettings *boids)
 
BoidStateboid_new_state (BoidSettings *boids)
 
BoidStateboid_duplicate_state (BoidSettings *boids, BoidState *state)
 
void boid_free_settings (BoidSettings *boids)
 
BoidSettingsboid_copy_settings (const BoidSettings *boids)
 
BoidStateboid_get_current_state (BoidSettings *boids)
 

Variables

static boid_rule_cb boid_rules []
 

Typedef Documentation

◆ boid_rule_cb

using boid_rule_cb
Initial value:

Definition at line 783 of file boids.cc.

Function Documentation

◆ apply_boid_rule()

static bool apply_boid_rule ( BoidBrainData * bbd,
BoidRule * rule,
BoidValues * val,
ParticleData * pa,
float fuzziness )
static

◆ boid_body()

void boid_body ( BoidBrainData * bbd,
struct ParticleData * pa )

Tries to realize the wanted velocity taking all constraints into account.

Definition at line 1209 of file boids.cc.

References BoidData::acc, add_v3_v3(), add_v3_v3v3(), angle(), ParticleKey::ave, axis_angle_to_quat(), BoidSettings::banking, BKE_effectors_apply(), BLI_rng_get_float(), ParticleData::boid, BOID_ALLOW_FLIGHT, BOID_ALLOW_LAND, boid_climb(), boid_find_ground(), boid_goal_signed_dist(), ParticleSettings::boids, ParticleKey::co, ParticleSimulationData::colliders, copy_particle_key(), copy_qt_qt(), copy_v2_v2(), copy_v3_v3(), cross_v3_v3v3(), ParticleSettings::dampfac, BoidParticle::data, BoidBrainData::dfra, dot_v2v2(), dot_v3v3(), eBoidMode_Climbing, eBoidMode_Falling, eBoidMode_InAir, eBoidMode_Liftoff, eBoidMode_OnLand, ParticleSettings::effector_weights, ParticleSystem::effectors, ELEM, ParticleSettings::flag, BoidBrainData::goal_co, BoidBrainData::goal_nor, BoidBrainData::goal_ob, BoidParticle::gravity, PhysicsSettings::gravity, BoidParticle::ground, BoidSettings::height, BoidSettings::land_stick_force, BoidSettings::landing_smoothness, len_v3(), madd_v3_v3fl(), madd_v3_v3v3fl(), ParticleSettings::mass, mat3_to_quat_legacy(), BoidValues::max_acc, BoidValues::max_ave, BoidValues::max_speed, min_ff(), BoidValues::min_speed, BoidData::mode, mul_qt_v3(), mul_v2_fl(), mul_v3_fl(), negate_v3(), negate_v3_v3(), nor, normalize_v2(), normalize_v3(), normalize_v3_v3(), BoidSettings::options, BoidBrainData::part, PART_SIZEMASS, pd_point_from_particle(), Scene::physics_settings, BoidSettings::pitch, ParticleData::prev_state, project_v3_v3v3(), ParticleSimulationData::psys, psys_uses_gravity(), BoidBrainData::rng, ParticleKey::rot, safe_acosf(), safe_sqrtf(), ParticleSimulationData::scene, set_boid_values(), BoidBrainData::sim, ParticleData::size, ParticleData::state, sub_v3_v3v3(), BoidBrainData::timestep, v, ParticleKey::vel, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.

Referenced by dynamics_step().

◆ boid_brain()

◆ boid_climb()

◆ boid_copy_settings()

◆ boid_default_settings()

◆ boid_duplicate_state()

◆ boid_find_ground()

◆ boid_free_settings()

void boid_free_settings ( BoidSettings * boids)

Definition at line 1683 of file boids.cc.

References BLI_freelistN(), ListBase::first, MEM_freeN(), state, and BoidSettings::states.

Referenced by particle_settings_free_data().

◆ boid_get_current_state()

BoidState * boid_get_current_state ( BoidSettings * boids)

◆ boid_goal_signed_dist()

static float boid_goal_signed_dist ( float * boid_co,
float * goal_co,
float * goal_nor )
static

Definition at line 993 of file boids.cc.

References dot_v3v3(), and sub_v3_v3v3().

Referenced by boid_body().

◆ boid_new_rule()

◆ boid_new_state()

BoidState * boid_new_state ( BoidSettings * boids)

Definition at line 1652 of file boids.cc.

References BoidState::id, BoidSettings::last_state_id, MEM_callocN, SNPRINTF, state, and STRNCPY.

Referenced by state_add_exec(), and state_del_exec().

◆ boid_rule_applies()

static bool boid_rule_applies ( ParticleData * pa,
BoidSettings * ,
BoidRule * rule )
static

◆ boids_precalc_rules()

◆ get_boid_state()

static BoidState * get_boid_state ( BoidSettings * boids,
ParticleData * pa )
static

◆ len_squared_v3v3_with_normal_bias()

static float len_squared_v3v3_with_normal_bias ( const float co_search[3],
const float co_test[3],
const void * user_data )
static

Definition at line 37 of file boids.cc.

References dot_v3v3(), len_squared_v3(), and sub_v3_v3v3().

Referenced by rule_avoid_collision(), and rule_flock().

◆ rule_average_speed()

◆ rule_avoid_collision()

◆ rule_fight()

◆ rule_flock()

◆ rule_follow_leader()

◆ rule_goal_avoid()

static bool rule_goal_avoid ( BoidRule * rule,
BoidBrainData * bbd,
BoidValues * val,
ParticleData * pa )
static

◆ rule_none()

static bool rule_none ( BoidRule * ,
BoidBrainData * ,
BoidValues * ,
ParticleData *  )
static

Definition at line 64 of file boids.cc.

◆ rule_separate()

◆ set_boid_values()

Variable Documentation

◆ boid_rules

boid_rule_cb boid_rules[]
static
Initial value:
= {
}
static bool rule_flock(BoidRule *, BoidBrainData *bbd, BoidValues *, ParticleData *pa)
Definition boids.cc:444
static bool rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:623
static bool rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:481
static bool rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:72
static bool rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:208
static bool rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:678
static bool rule_separate(BoidRule *, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition boids.cc:400
static bool rule_none(BoidRule *, BoidBrainData *, BoidValues *, ParticleData *)
Definition boids.cc:64

Definition at line 788 of file boids.cc.

Referenced by apply_boid_rule().