1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include "Particle/pAPI.h"
19#include "Particle/pActionImpls.h"
20
22
23#ifdef _DEBUG
24#define P_CHECK_ERR
25 PASSERT(!PSh.get_in_new_list(), "Can't call inline action while making action list");
26 PASSERT(PSh.get_in_particle_loop(), "Can only call inline action while inside ParticleLoop")
27#else
29#endif
30
32{
35 case PDDisc_e: PAAvoidDisc_Impl(m,
PSh.get_dt(), *
dynamic_cast<
const PDDisc*>(&dom), look_ahead, magnitude, epsilon);
return;
36 case PDPlane_e: PAAvoidPlane_Impl(m,
PSh.get_dt(), *
dynamic_cast<
const PDPlane*>(&dom), look_ahead, magnitude, epsilon);
return;
37 case PDRectangle_e: PAAvoidRectangle_Impl(m,
PSh.get_dt(), *
dynamic_cast<
const PDRectangle*>(&dom), look_ahead, magnitude, epsilon);
return;
38 case PDSphere_e: PAAvoidSphere_Impl(m,
PSh.get_dt(), *
dynamic_cast<
const PDSphere*>(&dom), look_ahead, magnitude, epsilon);
return;
39 case PDTriangle_e: PAAvoidTriangle_Impl(m,
PSh.get_dt(), *
dynamic_cast<
const PDTriangle*>(&dom), look_ahead, magnitude, epsilon);
return;
40 default: return;
41 }
42}
43
45{
48 case PDBox_e: PABounceBox_Impl(m,
PSh.get_dt(), *
static_cast<
const PDBox*>(&dom), friction, resilience, fric_min_vel);
return;
49 case PDDisc_e: PABounceDisc_Impl(m,
PSh.get_dt(), *
static_cast<
const PDDisc*>(&dom), friction, resilience, fric_min_vel);
return;
50 case PDPlane_e: PABouncePlane_Impl(m,
PSh.get_dt(), *
static_cast<
const PDPlane*>(&dom), friction, resilience, fric_min_vel);
return;
51 case PDRectangle_e: PABounceRectangle_Impl(m,
PSh.get_dt(), *
static_cast<
const PDRectangle*>(&dom), friction, resilience, fric_min_vel);
return;
52 case PDSphere_e: PABounceSphere_Impl(m,
PSh.get_dt(), *
static_cast<
const PDSphere*>(&dom), friction, resilience, fric_min_vel);
return;
53 case PDTriangle_e: PABounceTriangle_Impl(m,
PSh.get_dt(), *
static_cast<
const PDTriangle*>(&dom), friction, resilience, fric_min_vel);
return;
54 default: return;
55 }
56}
57
59{
61 PACopyVertexB_Impl(m,
PSh.get_dt(), copy_pos, copy_vel);
62}
63
65{
67 PADamping_Impl(m,
PSh.get_dt(), damping, min_vel, max_vel);
68}
69
71{
73 PARotDamping_Impl(m,
PSh.get_dt(), damping, min_vel, max_vel);
74}
75
77{
79 PAExplosion_Impl(m,
PSh.get_dt(), center, radius, magnitude, stdev, epsilon);
80}
81
83{
85 PAGravity_Impl(m,
PSh.get_dt(), dir);
86}
87
89{
91 PAJet_Impl(m,
PSh.get_dt(), dom, accel);
92}
93
95{
97 PAMove_Impl(m,
PSh.get_dt(), move_velocity, move_rotational_velocity);
98}
99
101{
103 PAOrbitLine_Impl(m,
PSh.get_dt(), p, axis, magnitude, epsilon, max_radius);
104}
105
107{
109 PAOrbitPoint_Impl(m,
PSh.get_dt(), center, magnitude, epsilon, max_radius);
110}
111
113{
115 PARandomAccel_Impl(m,
PSh.get_dt(), gen_acc);
116}
117
119{
121 PARandomDisplace_Impl(m,
PSh.get_dt(), gen_disp);
122}
123
125{
127 PARandomVelocity_Impl(m,
PSh.get_dt(), gen_vel);
128}
129
131{
133 PARandomRotVelocity_Impl(m,
PSh.get_dt(), gen_vel);
134}
135
137{
139 PARestore_Impl(m,
PSh.get_dt(), time_left, vel, rvel);
140}
141
143{
145 PASpeedClamp_Impl(m,
PSh.get_dt(), min_speed, max_speed);
146}
147
149{
151 PATargetColor_Impl(m,
PSh.get_dt(), color, alpha, scale);
152}
153
155{
157 PATargetSize_Impl(m,
PSh.get_dt(), size, scale);
158}
159
161{
163 PATargetVelocity_Impl(m,
PSh.get_dt(), vel, scale);
164}
165
167{
169 PATargetRotVelocity_Impl(m,
PSh.get_dt(), rot_velocity, scale);
170}
171
173 const float inSpeed, const float upSpeed, const float aroundSpeed)
174{
176 PAVortex_Impl(m,
PSh.get_dt(), tip, axis, tightnessExponent, max_radius, inSpeed, upSpeed, aroundSpeed);
177}
178
179
180
181
183{
185 PAFollow_Impl(m,
PSh.get_dt(), magnitude, epsilon, max_radius,
PSh.get_const_pgroup_begin(),
PSh.get_const_pgroup_end());
186}
187
189{
191 PAGravitate_Impl(m,
PSh.get_dt(), magnitude, epsilon, max_radius,
PSh.get_const_pgroup_begin(),
PSh.get_const_pgroup_end());
192}
193
195{
197 PAMatchVelocity_Impl(m,
PSh.get_dt(), magnitude, epsilon, max_radius,
PSh.get_const_pgroup_begin(),
PSh.get_const_pgroup_end());
198}
199
201{
203 PAMatchRotVelocity_Impl(m,
PSh.get_dt(), magnitude, epsilon, max_radius,
PSh.get_const_pgroup_begin(),
PSh.get_const_pgroup_end());
204}
205
206
207
208
210{
212 (*callbackFunc)(m, call_data,
PSh.get_dt());
213}
214
216{
218 PAKillOld_Impl(m,
PSh.get_dt(), age_limit, kill_less_than);
219}
220
222{
224 PASink_Impl(m,
PSh.get_dt(), kill_inside, kill_pos_dom);
225}
226
228{
230 PASinkVelocity_Impl(m,
PSh.get_dt(), kill_inside, kill_vel_dom);
231}
232
233#undef P_CHECK_ERR
234};
This class contains the Action API.
Definition: pAPIContext.h:332
void RandomDisplace(Particle_t &m, const pDomain &dom)
Immediately displace position by a random amount.
Definition: pInlineActionsAPI.h:118
void TargetRotVelocity(Particle_t &m, const pVec &rvel, const float scale)
Change rotational velocity of all particles toward the specified rotational velocity.
Definition: pInlineActionsAPI.h:166
void RandomAccel(Particle_t &m, const pDomain &dom)
Accelerate particles in random directions.
Definition: pInlineActionsAPI.h:112
void SinkVelocity(Particle_t &m, const bool kill_inside, const pDomain &kill_vel_dom)
Kill particles that have velocities on wrong side of the specified domain.
Definition: pInlineActionsAPI.h:227
void MatchVelocity(Particle_t &m, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Modify each particle's velocity to be similar to that of its neighbors.
Definition: pInlineActionsAPI.h:194
void Restore(Particle_t &m, const float time, const bool vel=true, const bool rvel=true)
Over time, restore particles to their target positionB and upB.
Definition: pInlineActionsAPI.h:136
void Callback(Particle_t &m, P_PARTICLE_CALLBACK_ACTION callbackFunc, const pdata_t call_data=0)
Call an arbitrary user-provided function on each particle in the group.
Definition: pInlineActionsAPI.h:209
void Move(Particle_t &m, const bool move_velocity=true, const bool move_rotational_velocity=true)
Apply the particles' velocities to their positions, and age the particles.
Definition: pInlineActionsAPI.h:94
void Jet(Particle_t &m, const pDomain &dom, const pDomain &acc)
For particles in the domain of influence, accelerate them with a domain.
Definition: pInlineActionsAPI.h:88
void OrbitLine(Particle_t &m, const pVec &p, const pVec &axis, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Accelerate particles toward the closest point on the given line.
Definition: pInlineActionsAPI.h:100
void KillOld(Particle_t &m, const float age_limit, const bool kill_less_than=false)
Get rid of older particles.
Definition: pInlineActionsAPI.h:215
void Bounce(Particle_t &m, const float friction, const float resilience, const float fric_min_vel, const pDomain &dom)
Bounce particles off an object defined by a domain.
Definition: pInlineActionsAPI.h:44
void Damping(Particle_t &m, const pVec &damping, const float min_vel=0.0f, const float max_vel=P_MAXFLOAT)
Simulate air by dampening particle velocities.
Definition: pInlineActionsAPI.h:64
void TargetVelocity(Particle_t &m, const pVec &vel, const float scale)
Change velocity of all particles toward the specified velocity.
Definition: pInlineActionsAPI.h:160
void Explosion(Particle_t &m, const pVec ¢er, const float radius, const float magnitude, const float sigma, const float epsilon=P_EPS)
Exert force on each particle away from explosion center.
Definition: pInlineActionsAPI.h:76
void Gravity(Particle_t &m, const pVec &dir)
Accelerate particles in the given direction.
Definition: pInlineActionsAPI.h:82
void Gravitate(Particle_t &m, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Accelerate each particle toward each other particle.
Definition: pInlineActionsAPI.h:188
PInternalShadow_t PSh
Definition: pAPIContext.h:1097
void Follow(Particle_t &m, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Accelerate toward the next particle in the list.
Definition: pInlineActionsAPI.h:182
void Avoid(Particle_t &m, const float magnitude, const float epsilon, const float look_ahead, const pDomain &dom)
Steer particles away from a domain of space.
Definition: pInlineActionsAPI.h:31
void Vortex(Particle_t &m, const pVec &tip, const pVec &axis, const float tightnessExponent, const float max_radius, const float inSpeed, const float upSpeed, const float aroundSpeed)
Accelerate particles in a vortex-like way.
Definition: pInlineActionsAPI.h:172
void OrbitPoint(Particle_t &m, const pVec ¢er, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Accelerate particles toward the given center point.
Definition: pInlineActionsAPI.h:106
void Sink(Particle_t &m, const bool kill_inside, const pDomain &kill_pos_dom)
Kill particles that have positions on wrong side of the specified domain.
Definition: pInlineActionsAPI.h:221
void SpeedClamp(Particle_t &m, const float min_speed, const float max_speed)
Clamp particle velocities to the given range.
Definition: pInlineActionsAPI.h:142
void MatchRotVelocity(Particle_t &m, const float magnitude=1.0f, const float epsilon=P_EPS, const float max_radius=P_MAXFLOAT)
Modify each particle's rotational velocity to be similar to that of its neighbors.
Definition: pInlineActionsAPI.h:200
void CopyVertexB(Particle_t &m, const bool copy_pos=true, const bool copy_vel=false)
Set the secondary position and velocity from current.
Definition: pInlineActionsAPI.h:58
void TargetSize(Particle_t &m, const pVec &size, const pVec &scale)
Change sizes of all particles toward the specified size.
Definition: pInlineActionsAPI.h:154
void RotDamping(Particle_t &m, const pVec &damping, const float min_vel=0.0f, const float max_vel=P_MAXFLOAT)
Simulate air by dampening rotational velocities.
Definition: pInlineActionsAPI.h:70
void RandomRotVelocity(Particle_t &m, const pDomain &dom)
Immediately assign a random rotational velocity.
Definition: pInlineActionsAPI.h:130
void RandomVelocity(Particle_t &m, const pDomain &dom)
Replace particle velocity with a random velocity.
Definition: pInlineActionsAPI.h:124
void TargetColor(Particle_t &m, const pVec &color, const float alpha, const float scale)
Change color of all particles toward the specified color.
Definition: pInlineActionsAPI.h:148
A representation of a region of space.
Definition: pDomain.h:55
pDomainType_E Which
Definition: pDomain.h:58
A single-precision floating point three-vector.
Definition: pVec.h:63
PAPIClasses.h.
Definition: pAPIContext.h:16
@ PDPlane_e
Definition: pDomain.h:29
@ PDTriangle_e
Definition: pDomain.h:26
@ PDDisc_e
Definition: pDomain.h:28
@ PDSphere_e
Definition: pDomain.h:33
@ PDRectangle_e
Definition: pDomain.h:27
@ PDBox_e
Definition: pDomain.h:30
void(* P_PARTICLE_CALLBACK_ACTION)(struct Particle_t &particle, const pdata_t data, const float dt)
This is the type of the callback functions that you can register for the Callback() action.
Definition: pDeclarations.h:28
unsigned int pdata_t
Definition: pDeclarations.h:16
#define P_CHECK_ERR
Definition: pInlineActionsAPI.h:28
#define PINLINE
Definition: pVec.h:20
Axis-aligned bounding box (AABB)
Definition: pDomain.h:523
Arbitrarily-oriented disc.
Definition: pDomain.h:392
Arbitrarily-oriented plane.
Definition: pDomain.h:478
Rhombus-shaped planar region.
Definition: pDomain.h:325
Sphere.
Definition: pDomain.h:808
A Triangle.
Definition: pDomain.h:252
Definition: pParticle.h:18