Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanne Karhu <jhkarh@gmail.com>2009-07-21 04:31:33 +0400
committerJanne Karhu <jhkarh@gmail.com>2009-07-21 04:31:33 +0400
commit5fd16476d990a59098f924d401dc9de9ef40a58a (patch)
tree132a1e0b1b39168b349046eb30c042b6f40835e5 /source/blender/makesdna/DNA_boid_types.h
parentae10731eb9b2397b34cf21d349f022e78fdab180 (diff)
Forgotten file from boids commit.
Diffstat (limited to 'source/blender/makesdna/DNA_boid_types.h')
-rw-r--r--source/blender/makesdna/DNA_boid_types.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/source/blender/makesdna/DNA_boid_types.h b/source/blender/makesdna/DNA_boid_types.h
new file mode 100644
index 00000000000..3e5b0829c70
--- /dev/null
+++ b/source/blender/makesdna/DNA_boid_types.h
@@ -0,0 +1,223 @@
+/* DNA_particle_types.h
+ *
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 by Janne Karhu.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef DNA_BOID_TYPES_H
+#define DNA_BOID_TYPES_H
+
+#include "DNA_listBase.h"
+
+typedef enum BoidRuleType {
+ eBoidRuleType_None = 0,
+ eBoidRuleType_Goal, /* go to goal assigned object or loudest assigned signal source */
+ eBoidRuleType_Avoid, /* get away from assigned object or loudest assigned signal source */
+ eBoidRuleType_AvoidCollision, /* manoeuver to avoid collisions with other boids and deflector object in near future */
+ eBoidRuleType_Separate, /* keep from going through other boids */
+ eBoidRuleType_Flock, /* move to center of neighbors and match their velocity */
+ eBoidRuleType_FollowLeader, /* follow a boid or assigned object */
+ eBoidRuleType_AverageSpeed, /* maintain speed, flight level or wander*/
+ eBoidRuleType_Fight, /* go to closest enemy and attack when in range */
+ //eBoidRuleType_Protect, /* go to enemy closest to target and attack when in range */
+ //eBoidRuleType_Hide, /* find a deflector move to it's other side from closest enemy */
+ //eBoidRuleType_FollowPath, /* move along a assigned curve or closest curve in a group */
+ //eBoidRuleType_FollowWall, /* move next to a deflector object's in direction of it's tangent */
+ NUM_BOID_RULE_TYPES
+} BoidRuleType;
+
+/* boidrule->flag */
+#define BOIDRULE_CURRENT 1
+#define BOIDRULE_IN_AIR 4
+#define BOIDRULE_ON_LAND 8
+typedef struct BoidRule {
+ struct BoidRule *next, *prev;
+ int type, flag;
+ char name[32];
+} BoidRule;
+#define BRULE_GOAL_AVOID_PREDICT 1
+#define BRULE_GOAL_AVOID_ARRIVE 2
+#define BRULE_GOAL_AVOID_SIGNAL 4
+typedef struct BoidRuleGoalAvoid {
+ BoidRule rule;
+ struct Object *ob;
+ int options;
+ float fear_factor;
+
+ /* signals */
+ int signal_id, channels;
+} BoidRuleGoalAvoid;
+#define BRULE_ACOLL_WITH_BOIDS 1
+#define BRULE_ACOLL_WITH_DEFLECTORS 2
+typedef struct BoidRuleAvoidCollision {
+ BoidRule rule;
+ int options;
+ float look_ahead;
+} BoidRuleAvoidCollision;
+#define BRULE_LEADER_IN_LINE 1
+typedef struct BoidRuleFollowLeader {
+ BoidRule rule;
+ struct Object *ob;
+ float loc[3], oloc[3];
+ float cfra, distance;
+ int options, queue_size;
+} BoidRuleFollowLeader;
+typedef struct BoidRuleAverageSpeed {
+ BoidRule rule;
+ float wander, level, speed, rt;
+} BoidRuleAverageSpeed;
+typedef struct BoidRuleFight {
+ BoidRule rule;
+ float distance, flee_distance;
+} BoidRuleFight;
+
+typedef enum BoidMode {
+ eBoidMode_InAir = 0,
+ eBoidMode_OnLand,
+ eBoidMode_Climbing,
+ eBoidMode_Falling,
+ eBoidMode_Liftoff,
+ NUM_BOID_MODES
+} BoidMode;
+typedef struct BoidData {
+ float health, acc[3];
+ short state_id, mode;
+} BoidData;
+
+// planned for near future
+//typedef enum BoidConditionMode {
+// eBoidConditionType_Then = 0,
+// eBoidConditionType_And,
+// eBoidConditionType_Or,
+// NUM_BOID_CONDITION_MODES
+//} BoidConditionMode;
+//typedef enum BoidConditionType {
+// eBoidConditionType_None = 0,
+// eBoidConditionType_Signal,
+// eBoidConditionType_NoSignal,
+// eBoidConditionType_HealthBelow,
+// eBoidConditionType_HealthAbove,
+// eBoidConditionType_See,
+// eBoidConditionType_NotSee,
+// eBoidConditionType_StateTime,
+// eBoidConditionType_Touching,
+// NUM_BOID_CONDITION_TYPES
+//} BoidConditionType;
+//typedef struct BoidCondition {
+// struct BoidCondition *next, *prev;
+// int state_id;
+// short type, mode;
+// float threshold, probability;
+//
+// /* signals */
+// int signal_id, channels;
+//} BoidCondition;
+
+typedef enum BoidRulesetType {
+ eBoidRulesetType_Fuzzy = 0,
+ eBoidRulesetType_Random,
+ eBoidRulesetType_Average,
+ NUM_BOID_RULESET_TYPES
+} BoidRulesetType;
+#define BOIDSTATE_CURRENT 1
+typedef struct BoidState {
+ struct BoidState *next, *prev;
+ ListBase rules;
+ ListBase conditions;
+ ListBase actions;
+ char name[32];
+ int id, flag;
+
+ /* rules */
+ int ruleset_type;
+ float rule_fuzziness;
+
+ /* signal */
+ int signal_id, channels;
+ float volume, falloff;
+} BoidState;
+
+// planned for near future
+//typedef struct BoidSignal {
+// struct BoidSignal *next, *prev;
+// float loc[3];
+// float volume, falloff;
+// int id;
+//} BoidSignal;
+//typedef struct BoidSignalDefine {
+// struct BoidSignalDefine *next, *prev;
+// int id, rt;
+// char name[32];
+//} BoidSignalDefine;
+
+//typedef struct BoidSimulationData {
+// ListBase signal_defines;/* list of defined signals */
+// ListBase signals[20]; /* gathers signals from all channels */
+// struct KDTree *signaltrees[20];
+// char channel_names[20][32];
+// int last_signal_id; /* used for incrementing signal ids */
+// int flag; /* switches for drawing stuff */
+//} BoidSimulationData;
+
+typedef struct BoidSettings {
+ int options, last_state_id;
+
+ float landing_smoothness, rt;
+ float banking, height;
+
+ float health, aggression;
+ float strength, accuracy, range;
+
+ /* flying related */
+ float air_min_speed, air_max_speed;
+ float air_max_acc, air_max_ave;
+ float air_personal_space;
+
+ /* walk/run related */
+ float land_jump_speed, land_max_speed;
+ float land_max_acc, land_max_ave;
+ float land_personal_space;
+ float land_stick_force;
+
+ struct ListBase states;
+} BoidSettings;
+
+/* boidsettings->options */
+#define BOID_ALLOW_FLIGHT 1
+#define BOID_ALLOW_LAND 2
+#define BOID_ALLOW_CLIMB 4
+
+/* boidrule->options */
+//#define BOID_RULE_FOLLOW_LINE 1 /* follow leader */
+//#define BOID_RULE_PREDICT 2 /* goal/avoid */
+//#define BOID_RULE_ARRIVAL 4 /* goal */
+//#define BOID_RULE_LAND 8 /* goal */
+//#define BOID_RULE_WITH_BOIDS 16 /* avoid collision */
+//#define BOID_RULE_WITH_DEFLECTORS 32 /* avoid collision */
+
+#endif