-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathExplosionEmitter.cpp
More file actions
83 lines (76 loc) · 3.16 KB
/
ExplosionEmitter.cpp
File metadata and controls
83 lines (76 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "ExplosionEmitter.h"
#include "Run3SoundRuntime.h"
ExplosionEmitter::ExplosionEmitter() {
startemit = false;
mDispose = false;
}
ExplosionEmitter::~ExplosionEmitter() {}
void ExplosionEmitter::init() {
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
// bSys=mSceneMgr->createParticleSystem("ExplosionEmit", "explosion01");
bNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
bSys = mSceneMgr->createParticleSystem(bNode->getName(), "explosion01");
bNode->attachObject(bSys);
bSys->setVisible(false);
}
void ExplosionEmitter::emitExplosion(Vector3 pos, Vector3 size) {
bNode->setPosition(pos);
bNode->setScale(size);
bSys->setVisible(true);
startemit = true;
timePos = bSys->getEmitter(0)->getMaxDuration() +
bSys->getEmitter(0)->getMaxTimeToLive();
Run3SoundRuntime::getSingleton().emitSound(
"run3/sounds/exp1.wav", timePos, false, pos, size.x * 100, size.x * 100);
global::getSingleton().mBw->blast(pos, size * 100, size.x * 40);
}
void ExplosionEmitter::emitExplosion(Vector3 pos, Vector3 size,
String explosionSound) {
bNode->setPosition(pos);
bNode->setScale(size);
bSys->setVisible(true);
startemit = true;
timePos = bSys->getEmitter(0)->getMaxDuration() +
bSys->getEmitter(0)->getMaxTimeToLive();
Run3SoundRuntime::getSingleton().emitSound(explosionSound, timePos, false,
pos, size.x * 100, size.x * 100);
global::getSingleton().mBw->blast(pos, size * 100, size.x * 40);
}
void ExplosionEmitter::init(String particle_file) {
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
// bSys=mSceneMgr->createParticleSystem("ExplosionEmit", "explosion01");
bNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
bSys = mSceneMgr->createParticleSystem(bNode->getName(), particle_file);
bNode->attachObject(bSys);
bSys->setVisible(false);
}
void ExplosionEmitter::upd(const Ogre::FrameEvent &evt) {
if (startemit) {
Real tShift = TIME_SHIFT;
timePos -= evt.timeSinceLastFrame * tShift;
if (tShift < 1.0f) {
bSys->getEmitter(0)->setEmissionRate(
bSys->getEmitter(0)->getEmissionRate() * tShift);
bSys->getEmitter(0)->setTimeToLive(bSys->getEmitter(0)->getTimeToLive() *
(2 - tShift));
bSys->getEmitter(0)->setParticleVelocity(
bSys->getEmitter(0)->getParticleVelocity() * tShift);
bSys->getEmitter(0)->setDuration(bSys->getEmitter(0)->getDuration() *
(2 - tShift));
}
if (tShift > 1.0f) {
bSys->getEmitter(0)->setEmissionRate(
bSys->getEmitter(0)->getEmissionRate() * tShift);
bSys->getEmitter(0)->setTimeToLive(bSys->getEmitter(0)->getTimeToLive() /
tShift);
bSys->getEmitter(0)->setParticleVelocity(
bSys->getEmitter(0)->getParticleVelocity() * tShift);
bSys->getEmitter(0)->setDuration(bSys->getEmitter(0)->getDuration() /
tShift);
}
if (timePos < 0) {
bSys->setVisible(false);
destroyEmitter();
}
}
}