-
Notifications
You must be signed in to change notification settings - Fork 0
/
loot.cpp
90 lines (82 loc) · 2.44 KB
/
loot.cpp
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
#pragma once
#include "loot.h"
void InitializeLoot(vector<Loot> & lootList, vector<Object> & objects, Sprite & sprite)
{
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 5, DRINK, sprite);
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 3, PISTOL, sprite);
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 2, AMMO, sprite);
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 1, RIFLE, sprite);
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 1, MIXTURE, sprite);
GenerateLoot(lootList, objects, { WIDTH_MAP,HEIGHT_MAP }, 2, GRENADE, sprite);
}
void DrawLoot(RenderWindow & window, vector<Loot> & lootList)
{
for (Loot & item:lootList)
{
if (item.isDrawn == true)
window.draw(item.sprite);
}
};
int GetSlotIndexOfItem(Loot & out, vector<Inventory> & inventoryList)
{
int index = 0;
for (Inventory & in : inventoryList)
{
if (in.name == out.name)
{
return index;
}
index++;
}
return -1;
}
Loot GetNewLootItem(NameItem & item, Sprite & sprite, float & x, float & y)
{
Loot loot;
loot.name = item;
loot.quantity = GetMaxQuantity(loot.name);
loot.pos = {x,y};
loot.sprite = sprite;
loot.sprite.setPosition(loot.pos);
loot.sprite.setTextureRect(sf::IntRect(item * 32, 0, 32, 32));
loot.isDrawn = true;
return loot;
}
void GenerateLoot(vector<Loot> & lootList, vector<Object> & objects,const Vector2i & mapSize, int ItemsRemaining, NameItem item, Sprite & texture_items)
{
//TODO: MAKE FUNCTION MORE READABLE
do
{
bool needNewBlock = false;
Vector2f newPos = { float((rand() % int(mapSize.x)) * STEP_TILE), float((rand() % int(mapSize.y)) * STEP_TILE) };
FloatRect lootRect = { newPos.x,newPos.y,texture_items.getGlobalBounds().height,texture_items.getGlobalBounds().height };
bool isIntersected = false;
for (size_t i = 0; i < objects.size() && needNewBlock == false; ++i)
{
if (lootRect.intersects(objects[i].rect))
{
needNewBlock = true;
}
}
if (needNewBlock)
{
continue;
}
for (Loot & item : lootList)
if (abs(item.pos.x - newPos.x) < 100 && abs(item.pos.y - newPos.y) < 100)
{
needNewBlock = true;
break;
}
if (needNewBlock == false)
{
Loot loot = GetNewLootItem(item, texture_items, newPos.x, newPos.y);
lootList.push_back(loot);
ItemsRemaining -= 1;
}
} while (ItemsRemaining > 0);
}
void DeleteLoot(vector<Loot> & loots)
{
loots.clear();
}