Blender  V3.3
Classes | Typedefs | Functions | Variables
boids.c File Reference
#include <math.h>
#include <string.h>
#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.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 "BKE_modifier.h"
#include "RNA_enum_types.h"

Go to the source code of this file.

Classes

struct  BoidValues
 

Typedefs

typedef struct BoidValues BoidValues
 
typedef bool(* boid_rule_cb) (BoidRule *rule, BoidBrainData *data, BoidValues *val, ParticleData *pa)
 

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 *UNUSED(rule), BoidBrainData *UNUSED(data), BoidValues *UNUSED(val), ParticleData *UNUSED(pa))
 
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 *UNUSED(rule), BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
 
static bool rule_flock (BoidRule *UNUSED(rule), BoidBrainData *bbd, BoidValues *UNUSED(val), 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 *UNUSED(boids), 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

typedef bool(* boid_rule_cb) (BoidRule *rule, BoidBrainData *data, BoidValues *val, ParticleData *pa)

Definition at line 777 of file boids.c.

◆ BoidValues

typedef struct BoidValues BoidValues

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 1204 of file boids.c.

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(), blender::math::length(), madd_v3_v3fl(), madd_v3_v3v3fl(), ParticleSettings::mass, mat3_to_quat_is_ok(), MAX2, BoidValues::max_acc, BoidValues::max_ave, BoidValues::max_speed, MIN2, 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(), NULL, 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, saacos(), sasqrt(), 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()

void boid_brain ( BoidBrainData bbd,
int  p,
struct ParticleData pa 
)

◆ boid_climb()

static void boid_climb ( BoidSettings boids,
ParticleData pa,
float surface_co,
float surface_nor 
)
static

◆ boid_copy_settings()

BoidSettings* boid_copy_settings ( const BoidSettings boids)

◆ boid_default_settings()

void boid_default_settings ( BoidSettings boids)

◆ boid_duplicate_state()

BoidState* boid_duplicate_state ( BoidSettings boids,
BoidState state 
)

◆ boid_find_ground()

static Object* boid_find_ground ( BoidBrainData bbd,
ParticleData pa,
float  ground_co[3],
float  ground_nor[3] 
)
static

◆ boid_free_settings()

void boid_free_settings ( BoidSettings boids)

Definition at line 1671 of file boids.c.

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 990 of file boids.c.

References dot_v3v3(), and sub_v3_v3v3().

Referenced by boid_body().

◆ boid_new_rule()

BoidRule* boid_new_rule ( int  type)

◆ boid_new_state()

BoidState* boid_new_state ( BoidSettings boids)

Definition at line 1640 of file boids.c.

References BLI_snprintf(), BoidSettings::last_state_id, MEM_callocN, and state.

Referenced by state_add_exec(), and state_del_exec().

◆ boid_rule_applies()

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

◆ boids_precalc_rules()

void boids_precalc_rules ( ParticleSettings part,
float  cfra 
)

◆ 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 32 of file boids.c.

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

Referenced by rule_avoid_collision(), and rule_flock().

◆ rule_average_speed()

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

◆ rule_avoid_collision()

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

◆ rule_fight()

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

◆ rule_flock()

static bool rule_flock ( BoidRule UNUSEDrule,
BoidBrainData bbd,
BoidValues UNUSEDval,
ParticleData pa 
)
static

◆ rule_follow_leader()

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

◆ rule_goal_avoid()

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

Definition at line 67 of file boids.c.

References add_v3_v3(), ParticleData::boid, BOID_ALLOW_CLIMB, ParticleSettings::boids, BRULE_GOAL_AVOID_PREDICT, ParticleKey::co, copy_v3_v3(), BoidParticle::data, EffectorCache::depsgraph, ParticleSimulationData::depsgraph, EffectorData::distance, eBoidMode_Climbing, eBoidRuleType_Avoid, eBoidRuleType_Goal, effector_falloff(), ParticleSettings::effector_weights, ParticleSystem::effectors, PartDeflect::f_strength, BoidRuleGoalAvoid::fear_factor, ListBase::first, PartDeflect::forcefield, get_effector_data(), BoidBrainData::goal_co, BoidBrainData::goal_nor, BoidBrainData::goal_ob, BoidBrainData::goal_priority, BoidParticle::gravity, BoidParticle::ground, BoidSettings::height, EffectorData::index, BoidSettings::landing_smoothness, len, len_v3(), EffectorData::loc, BoidValues::max_speed, BoidData::mode, mul(), mul_v3_fl(), negate_v3_v3(), EffectorCache::next, EffectorData::nor, NULL, EffectorCache::ob, BoidRuleGoalAvoid::ob, BoidRuleGoalAvoid::options, BoidSettings::options, BoidBrainData::part, EffectorCache::pd, pd_point_from_particle(), PFIELD_BOID, PFIELD_SHAPE_SURFACE, powf, ParticleData::prev_state, ParticleSimulationData::psys, ret, EffectorCache::scene, ParticleSimulationData::scene, PartDeflect::shape, BoidBrainData::sim, ParticleData::size, ParticleData::state, sub_v3_v3v3(), surface, BoidBrainData::timestep, BoidRule::type, EffectorData::vec_to_point, EffectorData::vel, ParticleKey::vel, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.

◆ rule_none()

static bool rule_none ( BoidRule UNUSEDrule,
BoidBrainData UNUSEDdata,
BoidValues UNUSEDval,
ParticleData UNUSEDpa 
)
static

Definition at line 59 of file boids.c.

◆ rule_separate()

static bool rule_separate ( BoidRule UNUSEDrule,
BoidBrainData bbd,
BoidValues val,
ParticleData pa 
)
static

◆ set_boid_values()

static void set_boid_values ( BoidValues val,
BoidSettings boids,
ParticleData pa 
)
static

Variable Documentation

◆ boid_rules

boid_rule_cb boid_rules[]
static
Initial value:
= {
}
static bool rule_flock(BoidRule *UNUSED(rule), BoidBrainData *bbd, BoidValues *UNUSED(val), ParticleData *pa)
Definition: boids.c:440
static bool rule_average_speed(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:617
static bool rule_follow_leader(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:477
static bool rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:67
static bool rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:201
static bool rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:672
static bool rule_separate(BoidRule *UNUSED(rule), BoidBrainData *bbd, BoidValues *val, ParticleData *pa)
Definition: boids.c:395
static bool rule_none(BoidRule *UNUSED(rule), BoidBrainData *UNUSED(data), BoidValues *UNUSED(val), ParticleData *UNUSED(pa))
Definition: boids.c:59

Definition at line 782 of file boids.c.

Referenced by apply_boid_rule().