-
Notifications
You must be signed in to change notification settings - Fork 1
/
Inventory.cpp
109 lines (97 loc) · 2.58 KB
/
Inventory.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "Inventory.h"
#include "Gameshell.h"
#include <iostream>
Node::Node() {}
Node::~Node() {}
Inventory::Inventory(){
cursor = head = NULL;
}
void Inventory::insert (Item* val) {
if (head == NULL)
{
head = new Node();
head->val = val;
head->next = head->prev = NULL;
cursor = head;
}
else
{
Node* temp = new Node();
temp->val = val;
temp->next = head;
temp->prev = NULL;
head->prev = temp;
head = temp;
cursor = head;
}
}
void Inventory::draw(std::map<int, SDL_Rect>& bkgtiles, SDL_Surface*& tileset, SDL_Surface*& screen, int type)
{
SDL_Rect dest;
dest.x = 13 * TILE_WIDTH;
dest.y = 0;
SDL_BlitSurface(tileset, &bkgtiles[6], screen, &dest);
dest.x += 2 * TILE_WIDTH;
SDL_BlitSurface(tileset, &bkgtiles[7], screen, &dest);
dest.x -= TILE_WIDTH;
SDL_BlitSurface(tileset, &bkgtiles[2], screen, &dest); // redraw the background tile of the item
if (cursor != NULL)
SDL_BlitSurface(tileset, &bkgtiles[type], screen, &dest);
else
SDL_BlitSurface(tileset, &bkgtiles[9], screen, &dest);
std::cout<<"Drew type = " <<type<<"\n";
}
void Inventory::Delete () {
Node* temp = cursor;
if (temp == NULL)
return;
else if (temp == head && head->next == NULL)
cursor = head = NULL;
else if (temp->next == NULL) {
cursor = cursor->prev;
temp->prev->next = NULL;
}
else if (temp == head) {
cursor = cursor->next;
head->next->prev = NULL;
head = head->next;
}
else {
cursor = cursor->next;
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
}
delete temp;
}
void Inventory::Print() {}
void Inventory::moveLeft(std::map<int, SDL_Rect>& bkgtiles, SDL_Surface*& tileset, SDL_Surface*& screen) {
if(cursor != NULL)
{
if (cursor->prev != NULL)
{
cursor = cursor->prev;
std::cout << cursor->val->type << "\n";
draw(bkgtiles, tileset, screen, cursor->val->type);
}
}
}
void Inventory::moveRight(std::map<int, SDL_Rect>& bkgtiles, SDL_Surface*& tileset, SDL_Surface*& screen) {
if(cursor != NULL)
{
if (cursor->next != NULL)
{
cursor = cursor->next;
std::cout << cursor->val->type << "\n";
draw(bkgtiles, tileset, screen, cursor->val->type);
}
}
}
Inventory::~Inventory() {
Node* prev;
while (head) {
prev = head;
head = head->next;
delete prev;
}
delete cursor;
}