-
Notifications
You must be signed in to change notification settings - Fork 0
/
itemmanager.cc
102 lines (87 loc) · 1.91 KB
/
itemmanager.cc
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
95
96
97
98
99
100
101
102
#include "itemmanager.hh"
#include <time.h>
#include <cmath>
#include "player.hh"
// creating the singleton object.
ItemManager ItemManager::object = ItemManager();
ItemManager::ItemManager()
{}
ItemManager& ItemManager::instance ()
{
return object;
}
void ItemManager::init(Player* newplayer, CL_ResourceManager& newrm, CL_GraphicContext newgc)
{
// player = newplayer;
rm = newrm;
gc = newgc;
}
ItemManager::~ItemManager()
{
for(std::list<Item*>::iterator iter = items.begin(); iter != items.end();)
{
delete *iter;
iter = items.erase(iter);
}
}
void ItemManager::drawItems(CL_GraphicContext gc, CL_Pointf player)
{
for(std::list<Item*>::iterator iter = items.begin(); iter != items.end(); iter++)
(*iter)->draw(gc, player);
}
void ItemManager::addItem(float x, float y)
{
size_t nr = size_t(rand()) % 100;
ItemClass type;
if(nr < 50)
type = HP;
else
{
if(nr < 90)
type = BOMBS;
else
type = NUKE;
}
switch(type) //Giving Items abilities depending on their type
{
case HP:
{
Item* item = new HealthItem(rm, gc, x, y);
items.push_back(item);
break;
}
case NUKE:
{
Item* item = new NukeItem(rm, gc, x, y);
items.push_back(item);
break;
}
case BOMBS:
{
Item* item = new BombsItem(rm, gc, x, y);
items.push_back(item);
break;
}
default:
Item* item = new HealthItem(rm, gc, x, y);
items.push_back(item);
}
}
void ItemManager::pickupItems(Player& player)
{
for(std::list<Item*>::iterator iter = items.begin(); iter != items.end(); iter++)
{
float distance = sqrt((((*iter)->x - player.x) * ((*iter)->x - player.x)) + (((*iter)->y - player.y) * ((*iter)->y - player.y)));
if(distance < (*iter)->getRadius())
{
(*iter)->pickup(player);
removeItem(iter);
return;
}
}
}
std::list<Item*>::iterator ItemManager::removeItem(std::list<Item*>::iterator item)
{
delete *item;
return items.erase(item);
}