raSystem  1.0 bata
raParticleSystem.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
6  {
7  m_Position = 0.0f;
8  m_Velocity = 0.0f;
9  m_Acceleration = 0.0f;
10  m_age = 0.0f;
11  }
12  void raParticle::Update(float fTime)
13  {
14  m_age += fTime;
15  m_Position += m_Velocity * fTime * m_speed;
16  m_Velocity += m_Acceleration * fTime * m_speed;
17  }
19  {
20  }
21 
23  float radius, float gravity, float Speed, float max_age) : raEntity(dx, mat, true, bAdditive)
24  {
25  m_radius = radius;
26  m_gravity = gravity;
27  m_maxAge = max_age;
28  m_speed = Speed;
29 
30  m_DrawOder = 2;
31  m_bDepthDisable = true;
32  m_pSubsets[0].PrimitiveType = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST;
33  }
35  {
36  if(m_pVB == NULL)
37  {
39  }
40  else
41  m_nVertices = (DWORD)m_Particles.size();
42 
44 
46  std::list<raParticle>::iterator pParticle;
47 
48  for(pParticle=m_Particles.begin(); pParticle != m_Particles.end(); pParticle++)
49  {
50  pVertex->position = pParticle->m_Position;
51  pVertex->color[0] = 1;
52  pVertex->color[1] = 1;
53  pVertex->color[2] = 1;
54 
55  pVertex->radius = m_radius;
56  pParticle->m_speed = m_speed;
57 
58  pVertex++;
59  }
60  }
61  bool raParticleSystem::Update(float fTime, float fRunTime)
62  {
63  std::list<raParticle>::iterator pParticle;
64  for(pParticle = m_Particles.begin();
65  pParticle != m_Particles.end();)
66  {
67  pParticle->Update(fTime);
68  if((m_maxAge > 0) && (pParticle->m_age > m_maxAge))
69  {
70  pParticle->m_Acceleration = raVector3(0.0f);
71  pParticle->m_Position = raVector3(0.0f);
72  pParticle->m_age = 0.0f;
73  pParticle = m_Particles.erase(pParticle);
74  }
75  else
76  {
77  pParticle++;
78  }
79  }
80  delete[] m_pVertices;
81  m_pVertices = NULL;
82 
83  SetupVertices();
84  if(m_nVertices > 0)
85  {
86  D3D11_BOX updateBox;
87  memset(&updateBox, 0, sizeof(D3D11_BOX));
88  updateBox.right = updateBox.left + m_nVertices * sizeof(POINTSPRITEVERTEX);
89  updateBox.bottom = 1;
90  updateBox.back = 1;
91 
92  m_dx->GetImmediateContext()->UpdateSubresource(m_pVB, 0, &updateBox, m_pVertices,
93  sizeof(VERTEXPOSITIONCOLOR), sizeof(VERTEXPOSITIONCOLOR));
94  }
95  return true;
96  }
97  bool raParticleSystem::RenderMesh(LPCSTR techniqueName)
98  {
99  if(m_Particles.size() > 0)
100  {
101  raEntity::RenderMesh(techniqueName);
102  }
103  return true;
104  }
106  float x, float y, float z)
107  {
108  if(m_Particles.size() + n > MAXPARTICLES) return;
109 
110  for(int i = 0; i < n; i++)
111  {
112  raParticle p;
113  p.m_Position.x = x;
114  p.m_Position.y = y;
115  p.m_Position.z = z;
116 
117  p.m_Velocity.x = (((float)rand() / RAND_MAX) - 0.5f) * 0.1f;
118  p.m_Velocity.y = 0.1f;
119  p.m_Velocity.z = (((float)rand() / RAND_MAX) - 0.5f) * 0.1f;
120 
121  p.m_Acceleration.y = m_gravity;
122 
123  m_Particles.push_back(p);
124  }
125  }
126 
127  void raParticleSystem::AddParticle(float x, float y, float z,
128  float vx, float vy, float vz)
129  {
130  if(m_Particles.size() + 1 > MAXPARTICLES) return;
131 
132  raParticle p;
133  p.m_Position.x = x;
134  p.m_Position.y = y;
135  p.m_Position.z = z;
136 
137  p.m_Velocity.x = vx;
138  p.m_Velocity.y = vy;
139  p.m_Velocity.z = vz;
140 
141  p.m_Acceleration.y = m_gravity;
142 
143  m_Particles.push_back(p);
144  }
145 };
raFloat y
Definition: raVector3.h:13
raFloat x
Definition: raVector3.h:12
UINT m_DrawOder
Definition: raVisual.h:95
ID3D11DeviceContext * GetImmediateContext(void)
Definition: raDirectX.h:31
virtual bool RenderMesh(LPCSTR techniqueName="")
raVector3 m_Acceleration
POINTSPRITEVERTEX * m_pVertices
Definition: raEntity.h:39
raFloat z
Definition: raVector3.h:14
void Update(float fTime)
void AddParticle(float x=0, float y=0, float z=0, float vx=0, float vy=0, float vz=0)
SDKMESH_SUBSET * m_pSubsets
Definition: raVisual.h:121
raParticleSystem(raSmartPointer< raDirectX > dx, raTexturedMaterial *mat, bool bAdditive=false, float radius=1.0f, float gravity=1.0f, float Speed=2.0f, float max_age=0.0f)
static const int MAXPARTICLES
virtual bool Update(float fTime, float fRunTime)
raVector3 m_Position
bool m_bDepthDisable
Definition: raVisual.h:114
void AddParticles(int n, float x=0, float y=0, float z=0)
virtual ~raParticleSystem(void)
UINT PrimitiveType
Definition: raSDKmesh.h:140
virtual void SetupVertices()
raVector3 m_Velocity
raSmartPointer< raDirectX > m_dx
Definition: raVisual.h:99
virtual bool RenderMesh(LPCSTR techniqueName="")
Definition: raEntity.h:188
raVector3 position
Definition: raVectexType.h:134