698 lines
18 KiB
C
698 lines
18 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2007 by Janne Karhu. All rights reserved. */
|
|
|
|
/** \file
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_ID.h"
|
|
#include "DNA_boid_types.h"
|
|
#include "DNA_defs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct AnimData;
|
|
|
|
typedef struct HairKey {
|
|
/** Location of hair vertex. */
|
|
float co[3];
|
|
/** Time along hair, default 0-100. */
|
|
float time;
|
|
/** Softbody weight. */
|
|
float weight;
|
|
/** Saved particled edit mode flags. */
|
|
short editflag;
|
|
char _pad[2];
|
|
float world_co[3];
|
|
} HairKey;
|
|
|
|
typedef struct ParticleKey { /* when changed update size of struct to copy_particleKey()!! */
|
|
/** Location. */
|
|
float co[3];
|
|
/** Velocity. */
|
|
float vel[3];
|
|
/** Rotation quaternion. */
|
|
float rot[4];
|
|
/** Angular velocity. */
|
|
float ave[3];
|
|
/** When this key happens. */
|
|
float time;
|
|
} ParticleKey;
|
|
|
|
typedef struct BoidParticle {
|
|
struct Object *ground;
|
|
struct BoidData data;
|
|
float gravity[3];
|
|
float wander[3];
|
|
char _pad0[4];
|
|
} BoidParticle;
|
|
|
|
typedef struct ParticleSpring {
|
|
float rest_length;
|
|
unsigned int particle_index[2], delete_flag;
|
|
} ParticleSpring;
|
|
|
|
/** Child particles are created around or between parent particles. */
|
|
typedef struct ChildParticle {
|
|
/** Face index on the final derived mesh. */
|
|
int num;
|
|
int parent;
|
|
/** Nearest particles to the child, used for the interpolation. */
|
|
int pa[4];
|
|
/** Interpolation weights for the above particles. */
|
|
float w[4];
|
|
/** Face vertex weights and offset. */
|
|
float fuv[4], foffset;
|
|
char _pad0[4];
|
|
} ChildParticle;
|
|
|
|
typedef struct ParticleTarget {
|
|
struct ParticleTarget *next, *prev;
|
|
struct Object *ob;
|
|
int psys;
|
|
short flag, mode;
|
|
float time, duration;
|
|
} ParticleTarget;
|
|
|
|
typedef struct ParticleDupliWeight {
|
|
struct ParticleDupliWeight *next, *prev;
|
|
struct Object *ob;
|
|
short count;
|
|
short flag;
|
|
/** Only updated on file save and used on file load. */
|
|
short index;
|
|
char _pad0[2];
|
|
} ParticleDupliWeight;
|
|
|
|
typedef struct ParticleData {
|
|
/** Current global coordinates. */
|
|
ParticleKey state;
|
|
|
|
/** Previous state. */
|
|
ParticleKey prev_state;
|
|
|
|
/** Hair vertices. */
|
|
HairKey *hair;
|
|
|
|
/** Keyed keys. */
|
|
ParticleKey *keys;
|
|
|
|
/** Boids data. */
|
|
BoidParticle *boid;
|
|
|
|
/** Amount of hair or keyed keys. */
|
|
int totkey;
|
|
|
|
/** Die-time is not necessarily time+lifetime as. */
|
|
float time, lifetime;
|
|
/**
|
|
* Particles can die unnaturally (collision).
|
|
*
|
|
* \note Particles die on this frame, be sure to add 1 when clamping the lifetime of particles
|
|
* to inclusive ranges such as the scenes end frame. See: #68290.
|
|
*/
|
|
float dietime;
|
|
|
|
/**
|
|
* WARNING! Those two indices,
|
|
* when not affected to vertices, are for !!! TESSELLATED FACES !!!, not POLYGONS!
|
|
*/
|
|
/** Index to vert/edge/face. */
|
|
int num;
|
|
/**
|
|
* Index to derived mesh data (face) to avoid slow lookups. It can also have negative
|
|
* values DMCACHE_NOTFOUND and DMCACHE_ISCHILD.
|
|
*/
|
|
int num_dmcache;
|
|
|
|
/** Coordinates on face/edge number "num" and depth along. */
|
|
float fuv[4], foffset;
|
|
/* face normal for volume emission. */
|
|
|
|
/** Size and multiplier so that we can update size when ever. */
|
|
float size;
|
|
|
|
/** Density of sph particle. */
|
|
float sphdensity;
|
|
char _pad[4];
|
|
|
|
int hair_index;
|
|
short flag;
|
|
/** The life state of a particle. */
|
|
short alive;
|
|
} ParticleData;
|
|
|
|
typedef struct SPHFluidSettings {
|
|
/* Particle Fluid. */
|
|
float radius, spring_k, rest_length;
|
|
float plasticity_constant, yield_ratio;
|
|
float plasticity_balance, yield_balance;
|
|
float viscosity_omega, viscosity_beta;
|
|
float stiffness_k, stiffness_knear, rest_density;
|
|
float buoyancy;
|
|
int flag, spring_frames;
|
|
short solver;
|
|
char _pad[6];
|
|
} SPHFluidSettings;
|
|
|
|
/** #SPHFluidSettings.flag */
|
|
#define SPH_VISCOELASTIC_SPRINGS 1
|
|
#define SPH_CURRENT_REST_LENGTH 2
|
|
#define SPH_FAC_REPULSION 4
|
|
#define SPH_FAC_DENSITY 8
|
|
#define SPH_FAC_RADIUS 16
|
|
#define SPH_FAC_VISCOSITY 32
|
|
#define SPH_FAC_REST_LENGTH 64
|
|
|
|
/** #SPHFluidSettings.solver (numerical ID field, not bit-field). */
|
|
#define SPH_SOLVER_DDR 0
|
|
#define SPH_SOLVER_CLASSICAL 1
|
|
|
|
typedef struct ParticleSettings {
|
|
ID id;
|
|
struct AnimData *adt;
|
|
|
|
struct BoidSettings *boids;
|
|
struct SPHFluidSettings *fluid;
|
|
|
|
struct EffectorWeights *effector_weights;
|
|
struct Collection *collision_group;
|
|
|
|
int flag;
|
|
char _pad1[4];
|
|
short type, from, distr, texact;
|
|
/* physics modes */
|
|
short phystype, rotmode, avemode, reactevent;
|
|
int draw;
|
|
float draw_size;
|
|
short draw_as, childtype;
|
|
char _pad2[4];
|
|
short ren_as, subframes, draw_col;
|
|
/* number of path segments, power of 2 except */
|
|
short draw_step, ren_step;
|
|
short hair_step, keys_step;
|
|
|
|
/* adaptive path rendering */
|
|
short adapt_angle, adapt_pix;
|
|
|
|
short disp, omat, interpolation, integrator;
|
|
short rotfrom DNA_DEPRECATED;
|
|
short kink, kink_axis;
|
|
|
|
/* billboards */
|
|
short bb_align, bb_uv_split, bb_anim, bb_split_offset DNA_DEPRECATED;
|
|
float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail DNA_DEPRECATED;
|
|
|
|
/* draw color */
|
|
float color_vec_max;
|
|
|
|
/* time and emission */
|
|
float sta, end, lifetime, randlife;
|
|
float timetweak, courant_target;
|
|
float jitfac, eff_hair, grid_rand, ps_offset[1];
|
|
int totpart, userjit, grid_res, effector_amount;
|
|
short time_flag;
|
|
char _pad0[6];
|
|
|
|
/* initial velocity factors */
|
|
float normfac, obfac, randfac, partfac, tanfac, tanphase, reactfac;
|
|
float ob_vel[3];
|
|
float avefac, phasefac, randrotfac, randphasefac;
|
|
/* physical properties */
|
|
float mass, size, randsize;
|
|
/* global physical properties */
|
|
float acc[3], dragfac, brownfac, dampfac;
|
|
/* length */
|
|
float randlength;
|
|
/* children */
|
|
int child_flag;
|
|
char _pad3[4];
|
|
int child_percent, child_render_percent;
|
|
float parents, childsize, childrandsize;
|
|
float childrad, childflat;
|
|
/* clumping */
|
|
float clumpfac, clumppow;
|
|
/* kink */
|
|
float kink_amp, kink_freq, kink_shape, kink_flat;
|
|
float kink_amp_clump;
|
|
int kink_extra_steps;
|
|
char _pad4[4];
|
|
float kink_axis_random, kink_amp_random;
|
|
/* rough */
|
|
float rough1, rough1_size;
|
|
float rough2, rough2_size, rough2_thres;
|
|
float rough_end, rough_end_shape;
|
|
/* length */
|
|
float clength, clength_thres;
|
|
/* parting */
|
|
float parting_fac;
|
|
float parting_min, parting_max;
|
|
/* branching */
|
|
float branch_thres;
|
|
/* drawing stuff */
|
|
float draw_line[2];
|
|
float path_start, path_end;
|
|
int trail_count;
|
|
/* keyed particles */
|
|
int keyed_loops;
|
|
struct CurveMapping *clumpcurve;
|
|
struct CurveMapping *roughcurve;
|
|
float clump_noise_size;
|
|
|
|
/* hair dynamics */
|
|
float bending_random;
|
|
|
|
/** MAX_MTEX. */
|
|
struct MTex *mtex[18];
|
|
|
|
struct Collection *instance_collection;
|
|
struct ListBase instance_weights;
|
|
struct Collection *force_group DNA_DEPRECATED; /* deprecated */
|
|
struct Object *instance_object;
|
|
struct Object *bb_ob;
|
|
/** Old animation system, deprecated for 2.5. */
|
|
struct Ipo *ipo DNA_DEPRECATED;
|
|
struct PartDeflect *pd;
|
|
struct PartDeflect *pd2;
|
|
|
|
/* Evaluated mesh support. */
|
|
short use_modifier_stack;
|
|
char _pad5[2];
|
|
|
|
/* hair shape */
|
|
short shape_flag;
|
|
char _pad6[2];
|
|
|
|
float twist;
|
|
char _pad8[4];
|
|
|
|
/* hair thickness shape */
|
|
float shape;
|
|
float rad_root, rad_tip, rad_scale;
|
|
|
|
struct CurveMapping *twistcurve;
|
|
void *_pad7;
|
|
} ParticleSettings;
|
|
|
|
typedef struct ParticleSystem {
|
|
/* note1: make sure all (run-time) are NULL's in 'copy_particlesystem' XXX,
|
|
* this function is no more! - need to investigate. */
|
|
|
|
/* note2: make sure any uses of this struct in DNA are
|
|
* accounted for in 'BKE_object_copy_particlesystems'. */
|
|
|
|
struct ParticleSystem *next, *prev;
|
|
|
|
/** Particle settings. */
|
|
ParticleSettings *part;
|
|
|
|
/** (parent) particles. */
|
|
ParticleData *particles;
|
|
/** Child particles. */
|
|
ChildParticle *child;
|
|
|
|
/** Particle editmode (runtime). */
|
|
struct PTCacheEdit *edit;
|
|
/** Free callback. */
|
|
void (*free_edit)(struct PTCacheEdit *edit);
|
|
|
|
/** Path cache (runtime). */
|
|
struct ParticleCacheKey **pathcache;
|
|
/** Child cache (runtime). */
|
|
struct ParticleCacheKey **childcache;
|
|
/** Buffers for the above. */
|
|
ListBase pathcachebufs, childcachebufs;
|
|
|
|
/** Cloth simulation for hair. */
|
|
struct ClothModifierData *clmd;
|
|
/** Input/output for cloth simulation. */
|
|
struct Mesh *hair_in_mesh, *hair_out_mesh;
|
|
|
|
struct Object *target_ob;
|
|
|
|
/** Run-time only lattice deformation data. */
|
|
struct LatticeDeformData *lattice_deform_data;
|
|
|
|
/** Particles from global space -> parent space. */
|
|
struct Object *parent;
|
|
|
|
/** Used for keyed and boid physics. */
|
|
struct ListBase targets;
|
|
|
|
/** Particle system name, MAX_NAME. */
|
|
char name[64];
|
|
|
|
/** Used for instancing. */
|
|
float imat[4][4];
|
|
float cfra, tree_frame, bvhtree_frame;
|
|
int seed, child_seed;
|
|
int flag, totpart, totunexist, totchild, totcached, totchildcache;
|
|
/* NOTE: Recalc is one of ID_RECALC_PSYS_ALL flags.
|
|
*
|
|
* TODO(sergey): Use #ParticleSettings.id.recalc instead of this duplicated flag somehow. */
|
|
int recalc;
|
|
short target_psys, totkeyed, bakespace;
|
|
char _pad1[6];
|
|
|
|
/** Billboard uv name, MAX_CUSTOMDATA_LAYER_NAME. */
|
|
char bb_uvname[3][68] DNA_DEPRECATED;
|
|
|
|
char _pad2[4];
|
|
/* if you change these remember to update array lengths to PSYS_TOT_VG! */
|
|
/** Vertex groups, 0==disable, 1==starting index. */
|
|
short vgroup[13], vg_neg, rt3;
|
|
char _pad3[6];
|
|
|
|
/* point cache */
|
|
struct PointCache *pointcache;
|
|
struct ListBase ptcaches;
|
|
|
|
struct ListBase *effectors;
|
|
|
|
ParticleSpring *fluid_springs;
|
|
int tot_fluidsprings, alloc_fluidsprings;
|
|
|
|
/** Used for interactions with self and other systems. */
|
|
struct KDTree_3d *tree;
|
|
/** Used for interactions with self and other systems. */
|
|
struct BVHTree *bvhtree;
|
|
|
|
struct ParticleDrawData *pdd;
|
|
|
|
/** Current time step, as a fraction of a frame. */
|
|
float dt_frac;
|
|
/** Influence of the lattice modifier. */
|
|
float lattice_strength;
|
|
|
|
void *batch_cache;
|
|
|
|
/* Set by dependency graph's copy-on-write, allows to quickly go
|
|
* from evaluated particle system to original one.
|
|
*
|
|
* Original system will have this set to NULL.
|
|
*
|
|
* Use psys_orig_get() function to access,
|
|
*/
|
|
struct ParticleSystem *orig_psys;
|
|
} ParticleSystem;
|
|
|
|
typedef enum eParticleDrawFlag {
|
|
PART_DRAW_VEL = (1 << 0),
|
|
PART_DRAW_GLOBAL_OB = (1 << 1),
|
|
PART_DRAW_SIZE = (1 << 2),
|
|
#ifdef DNA_DEPRECATED_ALLOW
|
|
/** Render emitter as well. */
|
|
PART_DRAW_EMITTER = (1 << 3), /* DEPRECATED */
|
|
#endif
|
|
PART_DRAW_HEALTH = (1 << 4),
|
|
PART_ABS_PATH_TIME = (1 << 5),
|
|
PART_DRAW_COUNT_GR = (1 << 6),
|
|
/* PART_DRAW_BB_LOCK = (1 << 7), */ /* DEPRECATED */
|
|
/* used with billboards */ /* DEPRECATED */
|
|
PART_DRAW_ROTATE_OB = (1 << 7), /* used with instance object/collection */
|
|
PART_DRAW_PARENT = (1 << 8),
|
|
PART_DRAW_NUM = (1 << 9),
|
|
PART_DRAW_RAND_GR = (1 << 10),
|
|
PART_DRAW_REN_ADAPT = (1 << 11),
|
|
PART_DRAW_VEL_LENGTH = (1 << 12),
|
|
PART_DRAW_MAT_COL = (1 << 13), /* deprecated, but used in do_versions */
|
|
PART_DRAW_WHOLE_GR = (1 << 14),
|
|
PART_DRAW_REN_STRAND = (1 << 15),
|
|
PART_DRAW_NO_SCALE_OB = (1 << 16), /* used with instance object/collection */
|
|
PART_DRAW_GUIDE_HAIRS = (1 << 17),
|
|
PART_DRAW_HAIR_GRID = (1 << 18),
|
|
} eParticleDrawFlag;
|
|
|
|
/**
|
|
* #ParticleSettings.type
|
|
* Hair is always baked static in object/geometry space.
|
|
* Other types (normal particles) are in global space and not static baked.
|
|
*/
|
|
enum {
|
|
PART_EMITTER = 0,
|
|
/* REACTOR type currently unused */
|
|
/* PART_REACTOR = 1, */
|
|
PART_HAIR = 2,
|
|
PART_FLUID = 3, /* deprecated (belonged to elbeem) */
|
|
PART_FLUID_FLIP = 4,
|
|
PART_FLUID_SPRAY = 5,
|
|
PART_FLUID_BUBBLE = 6,
|
|
PART_FLUID_FOAM = 7,
|
|
PART_FLUID_TRACER = 8,
|
|
PART_FLUID_SPRAYFOAM = 9,
|
|
PART_FLUID_SPRAYBUBBLE = 10,
|
|
PART_FLUID_FOAMBUBBLE = 11,
|
|
PART_FLUID_SPRAYFOAMBUBBLE = 12,
|
|
};
|
|
|
|
/** Mirroring Mantaflow particle types from particle.h (Mantaflow header). */
|
|
enum {
|
|
/* PARTICLE_TYPE_NONE = (0 << 0), */ /* UNUSED */
|
|
/* PARTICLE_TYPE_NEW = (1 << 0), */ /* UNUSED */
|
|
PARTICLE_TYPE_SPRAY = (1 << 1),
|
|
PARTICLE_TYPE_BUBBLE = (1 << 2),
|
|
PARTICLE_TYPE_FOAM = (1 << 3),
|
|
PARTICLE_TYPE_TRACER = (1 << 4),
|
|
PARTICLE_TYPE_DELETE = (1 << 10),
|
|
/* PARTICLE_TYPE_INVALID = (1 << 30), */ /* UNUSED */
|
|
};
|
|
|
|
/** #ParticleSettings.flag */
|
|
#define PART_REACT_STA_END 1
|
|
#define PART_REACT_MULTIPLE 2
|
|
|
|
//#define PART_LOOP 4 /* not used anymore */
|
|
/* For dope-sheet. */
|
|
#define PART_DS_EXPAND 8
|
|
|
|
#define PART_HAIR_REGROW 16 /* regrow hair for each frame */
|
|
|
|
#define PART_UNBORN 32 /* Show unborn particles. */
|
|
#define PART_DIED 64 /* Show died particles. */
|
|
|
|
#define PART_TRAND 128
|
|
#define PART_EDISTR 256 /* particle/face from face areas */
|
|
|
|
#define PART_ROTATIONS 512 /* calculate particle rotations (and store them in pointcache) */
|
|
#define PART_DIE_ON_COL (1 << 12)
|
|
#define PART_SIZE_DEFL (1 << 13) /* swept sphere deflections */
|
|
#define PART_ROT_DYN (1 << 14) /* dynamic rotation */
|
|
#define PART_SIZEMASS (1 << 16)
|
|
|
|
#define PART_HIDE_ADVANCED_HAIR (1 << 15)
|
|
|
|
//#define PART_ABS_TIME (1 << 17)
|
|
//#define PART_GLOB_TIME (1 << 18)
|
|
|
|
#define PART_BOIDS_2D (1 << 19)
|
|
|
|
//#define PART_BRANCHING (1 << 20)
|
|
//#define PART_ANIM_BRANCHING (1 << 21)
|
|
|
|
#define PART_HAIR_BSPLINE 1024
|
|
|
|
#define PART_GRID_HEXAGONAL (1 << 24)
|
|
#define PART_GRID_INVERT (1 << 26)
|
|
|
|
#define PART_CHILD_EFFECT (1 << 27)
|
|
#define PART_CHILD_LONG_HAIR (1 << 28)
|
|
// #define PART_CHILD_RENDER (1 << 29) /* UNUSED */
|
|
#define PART_CHILD_GUIDE (1 << 30)
|
|
|
|
#define PART_SELF_EFFECT (1 << 22)
|
|
|
|
/** #ParticleSettings.from */
|
|
#define PART_FROM_VERT 0
|
|
#define PART_FROM_FACE 1
|
|
#define PART_FROM_VOLUME 2
|
|
/* #define PART_FROM_PARTICLE 3 deprecated! */
|
|
#define PART_FROM_CHILD 4
|
|
|
|
/** #ParticleSettings.distr */
|
|
#define PART_DISTR_JIT 0
|
|
#define PART_DISTR_RAND 1
|
|
#define PART_DISTR_GRID 2
|
|
|
|
/** #ParticleSettings.phystype */
|
|
#define PART_PHYS_NO 0
|
|
#define PART_PHYS_NEWTON 1
|
|
#define PART_PHYS_KEYED 2
|
|
#define PART_PHYS_BOIDS 3
|
|
#define PART_PHYS_FLUID 4
|
|
|
|
/** #ParticleSettings.kink */
|
|
typedef enum eParticleKink {
|
|
PART_KINK_NO = 0,
|
|
PART_KINK_CURL = 1,
|
|
PART_KINK_RADIAL = 2,
|
|
PART_KINK_WAVE = 3,
|
|
PART_KINK_BRAID = 4,
|
|
PART_KINK_SPIRAL = 5,
|
|
} eParticleKink;
|
|
|
|
/** #ParticleSettings.child_flag */
|
|
typedef enum eParticleChildFlag {
|
|
PART_CHILD_USE_CLUMP_NOISE = (1 << 0),
|
|
PART_CHILD_USE_CLUMP_CURVE = (1 << 1),
|
|
PART_CHILD_USE_ROUGH_CURVE = (1 << 2),
|
|
PART_CHILD_USE_TWIST_CURVE = (1 << 3),
|
|
} eParticleChildFlag;
|
|
|
|
/** #ParticleSettings.shape_flag */
|
|
typedef enum eParticleShapeFlag {
|
|
PART_SHAPE_CLOSE_TIP = (1 << 0),
|
|
} eParticleShapeFlag;
|
|
|
|
/* #ParticleSettings.draw_col */
|
|
#define PART_DRAW_COL_NONE 0
|
|
#define PART_DRAW_COL_MAT 1
|
|
#define PART_DRAW_COL_VEL 2
|
|
#define PART_DRAW_COL_ACC 3
|
|
|
|
/* #ParticleSettings.time_flag */
|
|
#define PART_TIME_AUTOSF 1 /* Automatic subframes */
|
|
|
|
/* #ParticleSettings.draw_as */
|
|
/* #ParticleSettings.ren_as */
|
|
#define PART_DRAW_NOT 0
|
|
#define PART_DRAW_DOT 1
|
|
#define PART_DRAW_HALO 1
|
|
#define PART_DRAW_CIRC 2
|
|
#define PART_DRAW_CROSS 3
|
|
#define PART_DRAW_AXIS 4
|
|
#define PART_DRAW_LINE 5
|
|
#define PART_DRAW_PATH 6
|
|
#define PART_DRAW_OB 7
|
|
#define PART_DRAW_GR 8
|
|
#define PART_DRAW_BB 9 /* deprecated */
|
|
#define PART_DRAW_REND 10
|
|
|
|
/* #ParticleSettings.integrator */
|
|
#define PART_INT_EULER 0
|
|
#define PART_INT_MIDPOINT 1
|
|
#define PART_INT_RK4 2
|
|
#define PART_INT_VERLET 3
|
|
|
|
/* #ParticleSettings.rotmode */
|
|
#define PART_ROT_NOR 1
|
|
#define PART_ROT_VEL 2
|
|
#define PART_ROT_GLOB_X 3
|
|
#define PART_ROT_GLOB_Y 4
|
|
#define PART_ROT_GLOB_Z 5
|
|
#define PART_ROT_OB_X 6
|
|
#define PART_ROT_OB_Y 7
|
|
#define PART_ROT_OB_Z 8
|
|
#define PART_ROT_NOR_TAN 9
|
|
|
|
/* #ParticleSettings.avemode */
|
|
#define PART_AVE_VELOCITY 1
|
|
#define PART_AVE_RAND 2
|
|
#define PART_AVE_HORIZONTAL 3
|
|
#define PART_AVE_VERTICAL 4
|
|
#define PART_AVE_GLOBAL_X 5
|
|
#define PART_AVE_GLOBAL_Y 6
|
|
#define PART_AVE_GLOBAL_Z 7
|
|
|
|
/* #ParticleSettings.reactevent */
|
|
#define PART_EVENT_DEATH 0
|
|
#define PART_EVENT_COLLIDE 1
|
|
#define PART_EVENT_NEAR 2
|
|
|
|
/* #ParticleSettings.childtype */
|
|
#define PART_CHILD_PARTICLES 1
|
|
#define PART_CHILD_FACES 2
|
|
|
|
/* psys->flag */
|
|
#define PSYS_CURRENT 1
|
|
#define PSYS_GLOBAL_HAIR 2
|
|
#define PSYS_HAIR_DYNAMICS 4
|
|
#define PSYS_KEYED_TIMING 8
|
|
//#define PSYS_ENABLED 16 /* deprecated */
|
|
#define PSYS_HAIR_UPDATED 32 /* signal for updating hair particle mode */
|
|
/* #define PSYS_DRAWING 64 */ /* deprecated */
|
|
/* #define PSYS_USE_IMAT 128 */ /* deprecated */
|
|
#define PSYS_DELETE 256 /* remove particlesystem as soon as possible */
|
|
#define PSYS_HAIR_DONE 512
|
|
#define PSYS_KEYED 1024
|
|
#define PSYS_EDITED 2048
|
|
//#define PSYS_PROTECT_CACHE 4096 /* deprecated */
|
|
#define PSYS_DISABLED 8192
|
|
#define PSYS_OB_ANIM_RESTORE 16384 /* runtime flag */
|
|
#define PSYS_SHARED_CACHES 32768
|
|
|
|
/* pars->flag */
|
|
#define PARS_UNEXIST 1
|
|
#define PARS_NO_DISP 2
|
|
//#define PARS_STICKY 4 /* deprecated */
|
|
#define PARS_REKEY 8
|
|
|
|
/* pars->alive */
|
|
//#define PARS_KILLED 0 /* deprecated */
|
|
#define PARS_DEAD 1
|
|
#define PARS_UNBORN 2
|
|
#define PARS_ALIVE 3
|
|
#define PARS_DYING 4
|
|
|
|
/* ParticleDupliWeight->flag */
|
|
#define PART_DUPLIW_CURRENT 1
|
|
|
|
/* psys->vg */
|
|
#define PSYS_TOT_VG 13
|
|
|
|
#define PSYS_VG_DENSITY 0
|
|
#define PSYS_VG_VEL 1
|
|
#define PSYS_VG_LENGTH 2
|
|
#define PSYS_VG_CLUMP 3
|
|
#define PSYS_VG_KINK 4
|
|
#define PSYS_VG_ROUGH1 5
|
|
#define PSYS_VG_ROUGH2 6
|
|
#define PSYS_VG_ROUGHE 7
|
|
#define PSYS_VG_SIZE 8
|
|
#define PSYS_VG_TAN 9
|
|
#define PSYS_VG_ROT 10
|
|
#define PSYS_VG_EFFECTOR 11
|
|
#define PSYS_VG_TWIST 12
|
|
|
|
/* ParticleTarget->flag */
|
|
#define PTARGET_CURRENT 1
|
|
#define PTARGET_VALID 2
|
|
|
|
/* ParticleTarget->mode */
|
|
#define PTARGET_MODE_NEUTRAL 0
|
|
#define PTARGET_MODE_FRIEND 1
|
|
#define PTARGET_MODE_ENEMY 2
|
|
|
|
/** #MTex.mapto */
|
|
typedef enum eParticleTextureInfluence {
|
|
/* init */
|
|
PAMAP_TIME = (1 << 0), /* emission time */
|
|
PAMAP_LIFE = (1 << 1), /* life time */
|
|
PAMAP_DENS = (1 << 2), /* density */
|
|
PAMAP_SIZE = (1 << 3), /* physical size */
|
|
PAMAP_INIT = (PAMAP_TIME | PAMAP_LIFE | PAMAP_DENS | PAMAP_SIZE),
|
|
/* reset */
|
|
PAMAP_IVEL = (1 << 5), /* initial velocity */
|
|
/* physics */
|
|
PAMAP_FIELD = (1 << 6), /* force fields */
|
|
PAMAP_GRAVITY = (1 << 10),
|
|
PAMAP_DAMP = (1 << 11),
|
|
PAMAP_PHYSICS = (PAMAP_FIELD | PAMAP_GRAVITY | PAMAP_DAMP),
|
|
/* children */
|
|
PAMAP_CLUMP = (1 << 7),
|
|
PAMAP_KINK_FREQ = (1 << 8),
|
|
PAMAP_KINK_AMP = (1 << 12),
|
|
PAMAP_ROUGH = (1 << 9),
|
|
PAMAP_LENGTH = (1 << 4),
|
|
PAMAP_TWIST = (1 << 13),
|
|
PAMAP_CHILD = (PAMAP_CLUMP | PAMAP_KINK_FREQ | PAMAP_KINK_AMP | PAMAP_ROUGH | PAMAP_LENGTH |
|
|
PAMAP_TWIST),
|
|
} eParticleTextureInfluence;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|