Blender
V3.3
|
#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) |
Variables | |
static boid_rule_cb | boid_rules [] |
typedef bool(* boid_rule_cb) (BoidRule *rule, BoidBrainData *data, BoidValues *val, ParticleData *pa) |
typedef struct BoidValues BoidValues |
|
static |
Definition at line 999 of file boids.c.
References boid_rule_applies(), boid_rules, ParticleSettings::boids, compare_len_v3v3(), len_v3(), NULL, BoidBrainData::part, ParticleData::prev_state, BoidRule::type, ParticleKey::vel, and BoidBrainData::wanted_co.
Referenced by boid_brain().
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().
void boid_brain | ( | BoidBrainData * | bbd, |
int | p, | ||
struct ParticleData * | pa | ||
) |
Determines the velocity the boid wants to have.
Definition at line 1048 of file boids.c.
References add_v2_v2v2(), add_v3_v3(), ParticleData::alive, apply_boid_rule(), ParticleKey::ave, BLI_findlink(), BLI_listbase_count(), ParticleData::boid, BOID_ALLOW_FLIGHT, ParticleSettings::boids, BoidBrainData::cfra, copy_v3_v3(), BoidParticle::data, ParticleData::dietime, dot_v2v2(), eBoidMode_Falling, eBoidMode_Liftoff, eBoidMode_OnLand, eBoidRulesetType_Average, eBoidRulesetType_Fuzzy, eBoidRulesetType_Random, float(), get_boid_state(), PhysicsSettings::gravity, BoidData::health, jump(), BoidValues::jump_speed, len, len_v2(), BoidValues::max_speed, MIN2, BoidData::mode, mul(), mul_v3_fl(), BoidRule::next, normalize_v2(), normalize_v3(), BoidSettings::options, PARS_DYING, BoidBrainData::part, Scene::physics_settings, ParticleData::prev_state, ParticleSimulationData::psys, psys_frand(), sasqrt(), ParticleSimulationData::scene, ParticleSystem::seed, set_boid_values(), BoidBrainData::sim, state, ParticleKey::vel, BoidBrainData::wanted_co, BoidBrainData::wanted_speed, and zero_v3().
Referenced by dynamics_step().
|
static |
Definition at line 969 of file boids.c.
References add_v3_v3v3(), ParticleData::boid, ParticleKey::co, copy_v3_v3(), BoidParticle::gravity, BoidSettings::height, madd_v3_v3fl(), mul_v3_fl(), nor, normalize_v3(), project_v3_v3v3(), ParticleData::size, ParticleData::state, sub_v3_v3v3(), and ParticleKey::vel.
Referenced by boid_body().
BoidSettings* boid_copy_settings | ( | const BoidSettings * | boids | ) |
Definition at line 1687 of file boids.c.
References BoidState::actions, BLI_duplicatelist(), BoidState::conditions, ListBase::first, MEM_dupallocN, BoidState::next, NULL, BoidState::rules, state, and BoidSettings::states.
void boid_default_settings | ( | BoidSettings * | boids | ) |
Definition at line 1614 of file boids.c.
References BoidSettings::accuracy, BoidSettings::aggression, BoidSettings::air_max_acc, BoidSettings::air_max_ave, BoidSettings::air_max_speed, BoidSettings::air_personal_space, BoidSettings::banking, BOID_ALLOW_FLIGHT, BoidSettings::health, BoidSettings::height, BoidSettings::land_max_acc, BoidSettings::land_max_ave, BoidSettings::land_max_speed, BoidSettings::land_personal_space, BoidSettings::landing_smoothness, BoidSettings::options, BoidSettings::pitch, BoidSettings::range, and BoidSettings::strength.
BoidState* boid_duplicate_state | ( | BoidSettings * | boids, |
BoidState * | state | ||
) |
Definition at line 1659 of file boids.c.
References BoidState::actions, BLI_duplicatelist(), BoidState::conditions, BoidState::id, BoidSettings::last_state_id, MEM_dupallocN, BoidState::rules, and state.
|
static |
Definition at line 823 of file boids.c.
References add_v3_v3(), add_v3_v3v3(), BKE_modifiers_findby_type(), BKE_psys_collision_neartest_cb(), BLI_bvhtree_ray_cast_ex(), ParticleData::boid, BVH_RAYCAST_DEFAULT, BVH_RAYCAST_WATERTIGHT, closest_point_on_surface(), ParticleKey::co, col, ParticleSimulationData::colliders, ColliderCache::collmd, copy_v3_v3(), BoidParticle::data, BVHTreeRayHit::dist, eBoidMode_Climbing, eModifierType_Surface, ListBase::first, BoidParticle::ground, BVHTreeRayHit::index, interp_v3_v3v3(), BoidData::mode, ColliderCache::next, normalize_v3(), normalize_v3_v3(), NULL, ColliderCache::ob, BoidBrainData::sim, ParticleData::state, sub_v3_v3(), sub_v3_v3v3(), t, v, and x.
Referenced by boid_body().
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().
BoidState* boid_get_current_state | ( | BoidSettings * | boids | ) |
Definition at line 1710 of file boids.c.
References BOIDSTATE_CURRENT, ListBase::first, state, and BoidSettings::states.
Referenced by rule_add_exec(), rule_del_exec(), rule_move_down_exec(), and rule_move_up_exec().
Definition at line 990 of file boids.c.
References dot_v3v3(), and sub_v3_v3v3().
Referenced by boid_body().
BoidRule* boid_new_rule | ( | int | type | ) |
Definition at line 1574 of file boids.c.
References BLI_strncpy(), BOIDRULE_IN_AIR, BOIDRULE_ON_LAND, eBoidRuleType_AverageSpeed, eBoidRuleType_Avoid, eBoidRuleType_AvoidCollision, eBoidRuleType_Fight, eBoidRuleType_FollowLeader, eBoidRuleType_Goal, BoidRule::flag, MEM_callocN, BoidRule::name, EnumPropertyItem::name, NULL, rna_enum_boidrule_type_items, type, and BoidRule::type.
Referenced by rule_add_exec().
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().
|
static |
Definition at line 931 of file boids.c.
References ParticleData::boid, BOIDRULE_IN_AIR, BOIDRULE_ON_LAND, BoidParticle::data, eBoidMode_Climbing, eBoidMode_InAir, eBoidMode_OnLand, ELEM, BoidRule::flag, BoidData::mode, and NULL.
Referenced by apply_boid_rule().
void boids_precalc_rules | ( | ParticleSettings * | part, |
float | cfra | ||
) |
Definition at line 950 of file boids.c.
References ParticleSettings::boids, BoidRuleFollowLeader::cfra, copy_v3_v3(), eBoidRuleType_FollowLeader, ListBase::first, BoidRuleFollowLeader::loc, BoidRule::next, BoidRuleFollowLeader::ob, Object::obmat, BoidRuleFollowLeader::oloc, state, BoidSettings::states, and BoidRule::type.
Referenced by dynamics_step().
|
static |
Definition at line 1021 of file boids.c.
References ParticleData::boid, BoidParticle::data, ListBase::first, state, BoidData::state_id, and BoidSettings::states.
Referenced by boid_brain().
|
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().
|
static |
Definition at line 617 of file boids.c.
References add_v3_v3(), ParticleKey::ave, BLI_rng_get_float(), ParticleData::boid, copy_v3_v3(), dot_v2v2(), PhysicsSettings::gravity, BoidRuleAverageSpeed::level, BoidValues::max_speed, mul_qt_v3(), mul_v3_fl(), normalize_v3(), Scene::physics_settings, ParticleData::prev_state, project_v3_v3v3(), psys_uses_gravity(), BoidBrainData::rng, ParticleKey::rot, ParticleSimulationData::scene, BoidBrainData::sim, BoidRuleAverageSpeed::speed, sub_v3_v3(), BoidRuleAverageSpeed::wander, BoidParticle::wander, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
static |
Definition at line 201 of file boids.c.
References add_v3_v3v3(), ParticleKey::ave, BKE_psys_collision_neartest_cb(), BLI_assert, BLI_bvhtree_ray_cast_ex(), BLI_rng_get_float(), ParticleData::boid, BRULE_ACOLL_WITH_BOIDS, BRULE_ACOLL_WITH_DEFLECTORS, BVH_RAYCAST_DEFAULT, BVH_RAYCAST_WATERTIGHT, ParticleKey::co, col, ParticleSimulationData::colliders, ColliderCache::collmd, copy_v3_v3(), BVHTreeRayHit::dist, dot_v3v3(), ListBase::first, BoidParticle::ground, BVHTreeRayHit::index, len, len_squared_v3v3_with_normal_bias(), len_v3(), BoidRuleAvoidCollision::look_ahead, madd_v3_v3fl(), MAX2, MEM_freeN, MEM_SAFE_FREE, BoidValues::min_speed, mul_v3_fl(), ColliderCache::next, ParticleTarget::next, normalize_v3(), NULL, ColliderCache::ob, ParticleSimulationData::ob, BoidRuleAvoidCollision::options, ParticleSystem::particles, BoidValues::personal_space, ParticleData::prev_state, ParticleSimulationData::psys, psys_get_target_system(), ret, BoidBrainData::rng, BoidBrainData::sim, ParticleData::size, sqrtf, sub_v3_v3v3(), t, ParticleSystem::targets, ParticleSystem::tree, ParticleKey::vel, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
static |
Definition at line 672 of file boids.c.
References BoidSettings::accuracy, BoidSettings::aggression, ParticleKey::ave, BLI_rng_get_float(), ParticleData::boid, ParticleSettings::boids, ParticleKey::co, copy_v3_v3(), BoidParticle::data, BoidRuleFight::distance, dot_v3v3(), ListBase::first, BoidData::health, BoidSettings::health, BoidValues::max_speed, MEM_SAFE_FREE, ParticleTarget::mode, negate_v3(), ParticleTarget::next, normalize_v3_v3(), NULL, ParticleSimulationData::ob, BoidBrainData::part, ParticleSystem::part, ParticleSystem::particles, ParticleData::prev_state, ParticleSimulationData::psys, psys_get_target_system(), PTARGET_MODE_ENEMY, PTARGET_MODE_FRIEND, ret, BoidBrainData::rng, BoidBrainData::sim, ParticleData::size, BoidSettings::strength, sub_v3_v3v3(), ParticleSystem::targets, BoidBrainData::timestep, ParticleSystem::tree, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
static |
Definition at line 440 of file boids.c.
References add_v3_v3(), ARRAY_SIZE, ParticleKey::ave, ParticleKey::co, len_squared_v3v3_with_normal_bias(), len_v3(), mul_v3_fl(), ParticleSystem::particles, ParticleData::prev_state, ParticleSimulationData::psys, ret, BoidBrainData::sim, ParticleData::state, sub_v3_v3(), ParticleSystem::tree, ParticleKey::vel, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
static |
Definition at line 477 of file boids.c.
References BRULE_LEADER_IN_LINE, ParticleKey::co, copy_v3_v3(), BoidRuleFollowLeader::distance, dot_v3v3(), if(), len, len_v3(), BoidRuleFollowLeader::loc, madd_v3_v3fl(), BoidValues::max_speed, mul(), mul_v3_fl(), BoidRuleFollowLeader::ob, BoidRuleFollowLeader::oloc, BoidRuleFollowLeader::options, ParticleSystem::particles, ParticleData::prev_state, ParticleSimulationData::psys, BoidRuleFollowLeader::queue_size, ret, BoidBrainData::sim, ParticleData::size, sub_v3_v3v3(), t, BoidBrainData::timestep, ParticleSystem::totpart, ParticleKey::vel, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
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.
|
static |
|
static |
Definition at line 395 of file boids.c.
References add_v3_v3(), ParticleKey::co, ListBase::first, len, BoidValues::max_speed, MEM_SAFE_FREE, mul_v3_fl(), ParticleTarget::next, NULL, ParticleSimulationData::ob, ParticleSystem::particles, BoidValues::personal_space, ParticleData::prev_state, ParticleSimulationData::psys, psys_get_target_system(), ret, BoidBrainData::sim, ParticleData::size, ParticleData::state, sub_v3_v3v3(), ParticleSystem::targets, ParticleSystem::tree, BoidBrainData::wanted_co, and BoidBrainData::wanted_speed.
|
static |
Definition at line 801 of file boids.c.
References BoidSettings::air_max_acc, BoidSettings::air_max_ave, BoidSettings::air_max_speed, BoidSettings::air_min_speed, BoidSettings::air_personal_space, ParticleData::boid, BoidParticle::data, eBoidMode_Climbing, eBoidMode_OnLand, ELEM, float(), BoidData::health, BoidSettings::health, BoidValues::jump_speed, BoidSettings::land_jump_speed, BoidSettings::land_max_acc, BoidSettings::land_max_ave, BoidSettings::land_max_speed, BoidSettings::land_personal_space, M_PI, BoidValues::max_acc, BoidValues::max_ave, BoidValues::max_speed, BoidValues::min_speed, BoidData::mode, and BoidValues::personal_space.
Referenced by boid_body(), and boid_brain().
|
static |
Definition at line 782 of file boids.c.
Referenced by apply_boid_rule().