33 "Go to assigned object or loudest assigned signal source"},
38 "Get away from assigned object or loudest assigned signal source"},
43 "Maneuver to avoid collisions with other boids and deflector objects in "
50 "Move to center of neighbors and match their velocity"},
55 "Follow a boid or assigned object"},
60 "Maintain speed, flight level or wander"},
63 {eBoidRuleType_Protect,
67 "Go to enemy closest to target and attack when in range"},
72 "Find a deflector move to its other side from closest enemy"},
73 {eBoidRuleType_FollowPath,
77 "Move along a assigned curve or closest curve in a group"},
78 {eBoidRuleType_FollowWall,
82 "Move next to a deflector object's in direction of its tangent"},
84 {0,
nullptr, 0,
nullptr,
nullptr},
93 "Rules are gone through top to bottom (only the first rule which effect is above "
94 "fuzziness threshold is evaluated)"},
97 {0,
nullptr, 0,
nullptr,
nullptr},
103# include <fmt/format.h>
115 if (
ptr->
type == &RNA_ParticleSystem) {
130 if (
ptr->
type == &RNA_ParticleSystem) {
150 switch (rule->type) {
152 return &RNA_BoidRuleGoal;
154 return &RNA_BoidRuleAvoid;
156 return &RNA_BoidRuleAvoidCollision;
158 return &RNA_BoidRuleFollowLeader;
160 return &RNA_BoidRuleAverageSpeed;
162 return &RNA_BoidRuleFight;
164 return &RNA_BoidRule;
168static std::optional<std::string> rna_BoidRule_path(
const PointerRNA *
ptr)
171 char name_esc[
sizeof(rule->name) * 2];
173 return fmt::format(
"rules[\"{}\"]", name_esc);
181 for (; rule; rule = rule->
next) {
188static void rna_BoidState_active_boid_rule_index_range(
196static int rna_BoidState_active_boid_rule_index_get(
PointerRNA *
ptr)
202 for (; rule; rule = rule->
next, i++) {
210static void rna_BoidState_active_boid_rule_index_set(
PointerRNA *
ptr,
int value)
216 for (; rule; rule = rule->
next, i++) {
221 rule->
flag &= ~BOIDRULE_CURRENT;
230 return (
GS(id->name) ==
ID_PA);
233static std::optional<std::string> rna_BoidSettings_path(
const PointerRNA *
ptr)
237 if (particle_id_check(
ptr)) {
240 if (part->boids == boids) {
259static void rna_BoidSettings_active_boid_state_index_range(
267static int rna_BoidSettings_active_boid_state_index_get(
PointerRNA *
ptr)
281static void rna_BoidSettings_active_boid_state_index_set(
PointerRNA *
ptr,
int value)
292 state->flag &= ~BOIDSTATE_CURRENT;
343 prop,
"Fear Factor",
"Avoid object if danger from it is above this threshold");
352 srna =
RNA_def_struct(brna,
"BoidRuleAvoidCollision",
"BoidRule");
518 prop,
"rna_BoidState_active_boid_rule_get",
nullptr,
nullptr,
nullptr);
523 "rna_BoidState_active_boid_rule_index_get",
524 "rna_BoidState_active_boid_rule_index_set",
525 "rna_BoidState_active_boid_rule_index_range");
584 prop,
"rna_BoidSettings_active_boid_state_get",
nullptr,
nullptr,
nullptr);
589 "rna_BoidSettings_active_boid_state_index_get",
590 "rna_BoidSettings_active_boid_state_index_set",
591 "rna_BoidSettings_active_boid_state_index_range");
625 prop,
"Min Air Speed",
"Minimum speed in air (relative to maximum speed)");
638 prop,
"Max Air Acceleration",
"Maximum acceleration in air (relative to maximum speed)");
645 "Max Air Angular Velocity",
646 "Maximum angular velocity in air (relative to 180 degrees)");
652 prop,
"Air Personal Space",
"Radius of boids personal space in air (% of particle size)");
670 prop,
"Max Land Acceleration",
"Maximum acceleration on land (relative to maximum speed)");
677 "Max Land Angular Velocity",
678 "Maximum angular velocity on land (relative to 180 degrees)");
684 prop,
"Land Personal Space",
"Radius of boids personal space on land (% of particle size)");
690 prop,
"Land Stick Force",
"How strong a force must be to start effecting a boid on land");
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
#define BOIDSTATE_CURRENT
#define BRULE_LEADER_IN_LINE
@ eBoidRulesetType_Average
@ eBoidRulesetType_Random
@ BRULE_ACOLL_WITH_DEFLECTORS
@ eBoidRuleType_FollowLeader
@ eBoidRuleType_AvoidCollision
@ eBoidRuleType_AverageSpeed
@ BRULE_GOAL_AVOID_PREDICT
Object is a sort of wrapper for general info.
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
static const EnumPropertyItem boidruleset_type_items[]
void RNA_def_boid(BlenderRNA *brna)
static void rna_def_boidrule_average_speed(BlenderRNA *brna)
const EnumPropertyItem rna_enum_boidrule_type_items[]
static void rna_def_boidrule_avoid(BlenderRNA *brna)
static void rna_def_boidrule_avoid_collision(BlenderRNA *brna)
static void rna_def_boidrule(BlenderRNA *brna)
static void rna_def_boidrule_fight(BlenderRNA *brna)
static void rna_def_boidrule_goal(BlenderRNA *brna)
static void rna_def_boidrule_follow_leader(BlenderRNA *brna)
static void rna_def_boid_settings(BlenderRNA *brna)
static void rna_def_boidstate(BlenderRNA *brna)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void WM_main_add_notifier(uint type, void *reference)