-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathBulletHitManager.cpp
More file actions
94 lines (79 loc) · 2.7 KB
/
BulletHitManager.cpp
File metadata and controls
94 lines (79 loc) · 2.7 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
84
85
86
87
88
89
90
91
92
93
94
#include "BulletHitManager.h"
#include "global.h"
template <>
BulletHitManager *Ogre::Singleton<BulletHitManager>::ms_Singleton = 0;
BulletHit::BulletHit(Vector3 pos) {
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
bNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(pos);
bNode->setScale(0.1, 0.1, 0.1);
bSys = mSceneMgr->createParticleSystem(bNode->getName(), "bulletHit2");
bNode->attachObject(bSys);
}
BulletHit::BulletHit(Vector3 pos, Real m) {
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
bNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(pos);
bNode->setScale(0.1 * m, 0.1 * m, 0.1 * m);
bSys = mSceneMgr->createParticleSystem(bNode->getName(), "bulletHit2");
bNode->attachObject(bSys);
}
BulletHit::BulletHit(Vector3 pos, Real m, String f) {
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
bNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(pos);
bNode->setScale(0.1 * m, 0.1 * m, 0.1 * m);
bSys = mSceneMgr->createParticleSystem(bNode->getName(), f);
bNode->attachObject(bSys);
}
BulletHit::~BulletHit() {}
void BulletHit::start() { bSys->setVisible(true); }
void BulletHit::stopAndKill() {
bNode->detachAllObjects();
SceneManager *mSceneMgr = global::getSingleton().getSceneManager();
mSceneMgr->destroySceneNode(bNode);
mSceneMgr->destroyParticleSystem(bSys);
}
BulletHitManager::BulletHitManager() {}
BulletHitManager::~BulletHitManager() {}
void BulletHitManager::init() {}
void BulletHitManager::addBulletEffect(Vector3 pos, Real sec) {
if (bullethits.size() > 10)
return;
BulletHit *hit = new BulletHit(pos);
hit->start();
bullethits[hit] = sec;
}
void BulletHitManager::addBulletEffect(Vector3 pos, Real sec, Real m) {
if (bullethits.size() > 10)
return;
BulletHit *hit = new BulletHit(pos, m);
hit->start();
bullethits[hit] = sec;
}
void BulletHitManager::addBulletEffect(Vector3 pos, Real sec, Real m,
String f) {
if (bullethits.size() > 10)
return;
BulletHit *hit = new BulletHit(pos, m, f);
hit->start();
bullethits[hit] = sec;
}
void BulletHitManager::upd(const FrameEvent &evt) {
map<BulletHit *, Real>::iterator i;
for (i = bullethits.begin(); i != bullethits.end(); i++) {
(*i).second -= evt.timeSinceLastFrame * TIME_SHIFT;
if ((*i).second < 0) {
BulletHit *gib = (*i).first;
gib->stopAndKill();
delete gib;
bullethits.erase(i);
}
}
}
void BulletHitManager::cleanup() {
map<BulletHit *, Real>::iterator i;
for (i = bullethits.begin(); i != bullethits.end(); i++) {
BulletHit *gib = (*i).first;
bullethits.erase(i);
gib->stopAndKill();
delete gib;
}
}