aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 18:54:10 +1000
committerDavid Walter Seikel2013-01-13 18:54:10 +1000
commit959831f4ef5a3e797f576c3de08cd65032c997ad (patch)
treee7351908be5995f0b325b2ebeaa02d5a34b82583 /libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp
parentAdd info about changes to Irrlicht. (diff)
downloadSledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.zip
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.gz
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.bz2
SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.xz
Remove damned ancient DOS line endings from Irrlicht. Hopefully I did not go overboard.
Diffstat (limited to '')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp376
1 files changed, 188 insertions, 188 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp b/libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp
index 9728f6f..6191305 100644
--- a/libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp
+++ b/libraries/irrlicht-1.8/source/Irrlicht/CParticleBoxEmitter.cpp
@@ -1,188 +1,188 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt 1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine". 2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h 3// For conditions of distribution and use, see copyright notice in irrlicht.h
4 4
5#include "CParticleBoxEmitter.h" 5#include "CParticleBoxEmitter.h"
6#include "os.h" 6#include "os.h"
7#include "IAttributes.h" 7#include "IAttributes.h"
8#include "irrMath.h" 8#include "irrMath.h"
9 9
10namespace irr 10namespace irr
11{ 11{
12namespace scene 12namespace scene
13{ 13{
14 14
15//! constructor 15//! constructor
16CParticleBoxEmitter::CParticleBoxEmitter( 16CParticleBoxEmitter::CParticleBoxEmitter(
17 const core::aabbox3df& box, const core::vector3df& direction, 17 const core::aabbox3df& box, const core::vector3df& direction,
18 u32 minParticlesPerSecond, u32 maxParticlesPerSecond, 18 u32 minParticlesPerSecond, u32 maxParticlesPerSecond,
19 video::SColor minStartColor, video::SColor maxStartColor, 19 video::SColor minStartColor, video::SColor maxStartColor,
20 u32 lifeTimeMin, u32 lifeTimeMax, s32 maxAngleDegrees, 20 u32 lifeTimeMin, u32 lifeTimeMax, s32 maxAngleDegrees,
21 const core::dimension2df& minStartSize, const core::dimension2df& maxStartSize) 21 const core::dimension2df& minStartSize, const core::dimension2df& maxStartSize)
22 : Box(box), Direction(direction), 22 : Box(box), Direction(direction),
23 MaxStartSize(maxStartSize), MinStartSize(minStartSize), 23 MaxStartSize(maxStartSize), MinStartSize(minStartSize),
24 MinParticlesPerSecond(minParticlesPerSecond), 24 MinParticlesPerSecond(minParticlesPerSecond),
25 MaxParticlesPerSecond(maxParticlesPerSecond), 25 MaxParticlesPerSecond(maxParticlesPerSecond),
26 MinStartColor(minStartColor), MaxStartColor(maxStartColor), 26 MinStartColor(minStartColor), MaxStartColor(maxStartColor),
27 MinLifeTime(lifeTimeMin), MaxLifeTime(lifeTimeMax), 27 MinLifeTime(lifeTimeMin), MaxLifeTime(lifeTimeMax),
28 Time(0), Emitted(0), MaxAngleDegrees(maxAngleDegrees) 28 Time(0), Emitted(0), MaxAngleDegrees(maxAngleDegrees)
29{ 29{
30 #ifdef _DEBUG 30 #ifdef _DEBUG
31 setDebugName("CParticleBoxEmitter"); 31 setDebugName("CParticleBoxEmitter");
32 #endif 32 #endif
33} 33}
34 34
35 35
36//! Prepares an array with new particles to emitt into the system 36//! Prepares an array with new particles to emitt into the system
37//! and returns how much new particles there are. 37//! and returns how much new particles there are.
38s32 CParticleBoxEmitter::emitt(u32 now, u32 timeSinceLastCall, SParticle*& outArray) 38s32 CParticleBoxEmitter::emitt(u32 now, u32 timeSinceLastCall, SParticle*& outArray)
39{ 39{
40 Time += timeSinceLastCall; 40 Time += timeSinceLastCall;
41 41
42 const u32 pps = (MaxParticlesPerSecond - MinParticlesPerSecond); 42 const u32 pps = (MaxParticlesPerSecond - MinParticlesPerSecond);
43 const f32 perSecond = pps ? ((f32)MinParticlesPerSecond + os::Randomizer::frand() * pps) : MinParticlesPerSecond; 43 const f32 perSecond = pps ? ((f32)MinParticlesPerSecond + os::Randomizer::frand() * pps) : MinParticlesPerSecond;
44 const f32 everyWhatMillisecond = 1000.0f / perSecond; 44 const f32 everyWhatMillisecond = 1000.0f / perSecond;
45 45
46 if (Time > everyWhatMillisecond) 46 if (Time > everyWhatMillisecond)
47 { 47 {
48 Particles.set_used(0); 48 Particles.set_used(0);
49 u32 amount = (u32)((Time / everyWhatMillisecond) + 0.5f); 49 u32 amount = (u32)((Time / everyWhatMillisecond) + 0.5f);
50 Time = 0; 50 Time = 0;
51 SParticle p; 51 SParticle p;
52 const core::vector3df& extent = Box.getExtent(); 52 const core::vector3df& extent = Box.getExtent();
53 53
54 if (amount > MaxParticlesPerSecond*2) 54 if (amount > MaxParticlesPerSecond*2)
55 amount = MaxParticlesPerSecond * 2; 55 amount = MaxParticlesPerSecond * 2;
56 56
57 for (u32 i=0; i<amount; ++i) 57 for (u32 i=0; i<amount; ++i)
58 { 58 {
59 p.pos.X = Box.MinEdge.X + os::Randomizer::frand() * extent.X; 59 p.pos.X = Box.MinEdge.X + os::Randomizer::frand() * extent.X;
60 p.pos.Y = Box.MinEdge.Y + os::Randomizer::frand() * extent.Y; 60 p.pos.Y = Box.MinEdge.Y + os::Randomizer::frand() * extent.Y;
61 p.pos.Z = Box.MinEdge.Z + os::Randomizer::frand() * extent.Z; 61 p.pos.Z = Box.MinEdge.Z + os::Randomizer::frand() * extent.Z;
62 62
63 p.startTime = now; 63 p.startTime = now;
64 p.vector = Direction; 64 p.vector = Direction;
65 65
66 if (MaxAngleDegrees) 66 if (MaxAngleDegrees)
67 { 67 {
68 core::vector3df tgt = Direction; 68 core::vector3df tgt = Direction;
69 tgt.rotateXYBy(os::Randomizer::frand() * MaxAngleDegrees); 69 tgt.rotateXYBy(os::Randomizer::frand() * MaxAngleDegrees);
70 tgt.rotateYZBy(os::Randomizer::frand() * MaxAngleDegrees); 70 tgt.rotateYZBy(os::Randomizer::frand() * MaxAngleDegrees);
71 tgt.rotateXZBy(os::Randomizer::frand() * MaxAngleDegrees); 71 tgt.rotateXZBy(os::Randomizer::frand() * MaxAngleDegrees);
72 p.vector = tgt; 72 p.vector = tgt;
73 } 73 }
74 74
75 p.endTime = now + MinLifeTime; 75 p.endTime = now + MinLifeTime;
76 if (MaxLifeTime != MinLifeTime) 76 if (MaxLifeTime != MinLifeTime)
77 p.endTime += os::Randomizer::rand() % (MaxLifeTime - MinLifeTime); 77 p.endTime += os::Randomizer::rand() % (MaxLifeTime - MinLifeTime);
78 78
79 if (MinStartColor==MaxStartColor) 79 if (MinStartColor==MaxStartColor)
80 p.color=MinStartColor; 80 p.color=MinStartColor;
81 else 81 else
82 p.color = MinStartColor.getInterpolated(MaxStartColor, os::Randomizer::frand()); 82 p.color = MinStartColor.getInterpolated(MaxStartColor, os::Randomizer::frand());
83 83
84 p.startColor = p.color; 84 p.startColor = p.color;
85 p.startVector = p.vector; 85 p.startVector = p.vector;
86 86
87 if (MinStartSize==MaxStartSize) 87 if (MinStartSize==MaxStartSize)
88 p.startSize = MinStartSize; 88 p.startSize = MinStartSize;
89 else 89 else
90 p.startSize = MinStartSize.getInterpolated(MaxStartSize, os::Randomizer::frand()); 90 p.startSize = MinStartSize.getInterpolated(MaxStartSize, os::Randomizer::frand());
91 p.size = p.startSize; 91 p.size = p.startSize;
92 92
93 Particles.push_back(p); 93 Particles.push_back(p);
94 } 94 }
95 95
96 outArray = Particles.pointer(); 96 outArray = Particles.pointer();
97 97
98 return Particles.size(); 98 return Particles.size();
99 } 99 }
100 100
101 return 0; 101 return 0;
102} 102}
103 103
104 104
105//! Writes attributes of the object. 105//! Writes attributes of the object.
106void CParticleBoxEmitter::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const 106void CParticleBoxEmitter::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
107{ 107{
108 core::vector3df b = Box.getExtent(); 108 core::vector3df b = Box.getExtent();
109 b *= 0.5f; 109 b *= 0.5f;
110 out->addVector3d("Box", b); 110 out->addVector3d("Box", b);
111 out->addVector3d("Direction", Direction); 111 out->addVector3d("Direction", Direction);
112 out->addFloat("MinStartSizeWidth", MinStartSize.Width); 112 out->addFloat("MinStartSizeWidth", MinStartSize.Width);
113 out->addFloat("MinStartSizeHeight", MinStartSize.Height); 113 out->addFloat("MinStartSizeHeight", MinStartSize.Height);
114 out->addFloat("MaxStartSizeWidth", MaxStartSize.Width); 114 out->addFloat("MaxStartSizeWidth", MaxStartSize.Width);
115 out->addFloat("MaxStartSizeHeight", MaxStartSize.Height); 115 out->addFloat("MaxStartSizeHeight", MaxStartSize.Height);
116 out->addInt("MinParticlesPerSecond", MinParticlesPerSecond); 116 out->addInt("MinParticlesPerSecond", MinParticlesPerSecond);
117 out->addInt("MaxParticlesPerSecond", MaxParticlesPerSecond); 117 out->addInt("MaxParticlesPerSecond", MaxParticlesPerSecond);
118 out->addColor("MinStartColor", MinStartColor); 118 out->addColor("MinStartColor", MinStartColor);
119 out->addColor("MaxStartColor", MaxStartColor); 119 out->addColor("MaxStartColor", MaxStartColor);
120 out->addInt("MinLifeTime", MinLifeTime); 120 out->addInt("MinLifeTime", MinLifeTime);
121 out->addInt("MaxLifeTime", MaxLifeTime); 121 out->addInt("MaxLifeTime", MaxLifeTime);
122 out->addInt("MaxAngleDegrees", MaxAngleDegrees); 122 out->addInt("MaxAngleDegrees", MaxAngleDegrees);
123} 123}
124 124
125 125
126//! Reads attributes of the object. 126//! Reads attributes of the object.
127void CParticleBoxEmitter::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) 127void CParticleBoxEmitter::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
128{ 128{
129 // read data and correct input values here 129 // read data and correct input values here
130 130
131 core::vector3df b = in->getAttributeAsVector3d("Box"); 131 core::vector3df b = in->getAttributeAsVector3d("Box");
132 132
133 if (b.X <= 0) 133 if (b.X <= 0)
134 b.X = 1.0f; 134 b.X = 1.0f;
135 if (b.Y <= 0) 135 if (b.Y <= 0)
136 b.Y = 1.0f; 136 b.Y = 1.0f;
137 if (b.Z <= 0) 137 if (b.Z <= 0)
138 b.Z = 1.0f; 138 b.Z = 1.0f;
139 139
140 Box.MinEdge.X = -b.X; 140 Box.MinEdge.X = -b.X;
141 Box.MinEdge.Y = -b.Y; 141 Box.MinEdge.Y = -b.Y;
142 Box.MinEdge.Z = -b.Z; 142 Box.MinEdge.Z = -b.Z;
143 Box.MaxEdge.X = b.X; 143 Box.MaxEdge.X = b.X;
144 Box.MaxEdge.Y = b.Y; 144 Box.MaxEdge.Y = b.Y;
145 Box.MaxEdge.Z = b.Z; 145 Box.MaxEdge.Z = b.Z;
146 146
147 Direction = in->getAttributeAsVector3d("Direction"); 147 Direction = in->getAttributeAsVector3d("Direction");
148 if (Direction.getLength() == 0) 148 if (Direction.getLength() == 0)
149 Direction.set(0,0.01f,0); 149 Direction.set(0,0.01f,0);
150 150
151 int idx = -1; 151 int idx = -1;
152 idx = in->findAttribute("MinStartSizeWidth"); 152 idx = in->findAttribute("MinStartSizeWidth");
153 if ( idx >= 0 ) 153 if ( idx >= 0 )
154 MinStartSize.Width = in->getAttributeAsFloat(idx); 154 MinStartSize.Width = in->getAttributeAsFloat(idx);
155 idx = in->findAttribute("MinStartSizeHeight"); 155 idx = in->findAttribute("MinStartSizeHeight");
156 if ( idx >= 0 ) 156 if ( idx >= 0 )
157 MinStartSize.Height = in->getAttributeAsFloat(idx); 157 MinStartSize.Height = in->getAttributeAsFloat(idx);
158 idx = in->findAttribute("MaxStartSizeWidth"); 158 idx = in->findAttribute("MaxStartSizeWidth");
159 if ( idx >= 0 ) 159 if ( idx >= 0 )
160 MaxStartSize.Width = in->getAttributeAsFloat(idx); 160 MaxStartSize.Width = in->getAttributeAsFloat(idx);
161 idx = in->findAttribute("MaxStartSizeHeight"); 161 idx = in->findAttribute("MaxStartSizeHeight");
162 if ( idx >= 0 ) 162 if ( idx >= 0 )
163 MaxStartSize.Height = in->getAttributeAsFloat(idx); 163 MaxStartSize.Height = in->getAttributeAsFloat(idx);
164 164
165 MinParticlesPerSecond = in->getAttributeAsInt("MinParticlesPerSecond"); 165 MinParticlesPerSecond = in->getAttributeAsInt("MinParticlesPerSecond");
166 MaxParticlesPerSecond = in->getAttributeAsInt("MaxParticlesPerSecond"); 166 MaxParticlesPerSecond = in->getAttributeAsInt("MaxParticlesPerSecond");
167 167
168 MinParticlesPerSecond = core::max_(1u, MinParticlesPerSecond); 168 MinParticlesPerSecond = core::max_(1u, MinParticlesPerSecond);
169 MaxParticlesPerSecond = core::max_(MaxParticlesPerSecond, 1u); 169 MaxParticlesPerSecond = core::max_(MaxParticlesPerSecond, 1u);
170 MaxParticlesPerSecond = core::min_(MaxParticlesPerSecond, 200u); 170 MaxParticlesPerSecond = core::min_(MaxParticlesPerSecond, 200u);
171 MinParticlesPerSecond = core::min_(MinParticlesPerSecond, MaxParticlesPerSecond); 171 MinParticlesPerSecond = core::min_(MinParticlesPerSecond, MaxParticlesPerSecond);
172 172
173 MinStartColor = in->getAttributeAsColor("MinStartColor"); 173 MinStartColor = in->getAttributeAsColor("MinStartColor");
174 MaxStartColor = in->getAttributeAsColor("MaxStartColor"); 174 MaxStartColor = in->getAttributeAsColor("MaxStartColor");
175 MinLifeTime = in->getAttributeAsInt("MinLifeTime"); 175 MinLifeTime = in->getAttributeAsInt("MinLifeTime");
176 MaxLifeTime = in->getAttributeAsInt("MaxLifeTime"); 176 MaxLifeTime = in->getAttributeAsInt("MaxLifeTime");
177 MaxAngleDegrees = in->getAttributeAsInt("MaxAngleDegrees"); 177 MaxAngleDegrees = in->getAttributeAsInt("MaxAngleDegrees");
178 178
179 MinLifeTime = core::max_(0u, MinLifeTime); 179 MinLifeTime = core::max_(0u, MinLifeTime);
180 MaxLifeTime = core::max_(MaxLifeTime, MinLifeTime); 180 MaxLifeTime = core::max_(MaxLifeTime, MinLifeTime);
181 MinLifeTime = core::min_(MinLifeTime, MaxLifeTime); 181 MinLifeTime = core::min_(MinLifeTime, MaxLifeTime);
182 182
183} 183}
184 184
185 185
186} // end namespace scene 186} // end namespace scene
187} // end namespace irr 187} // end namespace irr
188 188