aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/inventory.h
blob: 2c08c8a9acc36aed77ce6baa39b060cf0098445f (plain)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef FULLPIPE_INVENTORY_H
#define FULLPIPE_INVENTORY_H

namespace Fullpipe {

class Scene;
class BigPicture;

struct InventoryPoolItem {
	int16 id;
	int16 pictureObjectNormal;
	int16 pictureObjectId1;
	int16 pictureObjectHover;
	int16 pictureObjectSelected;
	int16 field_A;
	int field_C;
	int obj;
	int flags;
};

typedef Common::Array<InventoryPoolItem *> InventoryPoolItems;

class Inventory : public CObject {
 protected:
	int16 _sceneId;
	InventoryPoolItems _itemsPool;

 public:
	Inventory() { _sceneId = 0; }
	virtual ~Inventory();

	virtual bool load(MfcArchive &file);

	int getInventoryPoolItemIndexById(int itemId);
	uint getItemsPoolCount() { return _itemsPool.size(); }
	bool setItemFlags(int itemId, int flags);
};

struct InventoryItem {
	int16 itemId;
	int16 count;

	InventoryItem() { itemId = count = 0; }
	InventoryItem(int id, int cnt) : itemId(id), count(cnt) {}
};

class PictureObject;

struct InventoryIcon {
	PictureObject *pictureObjectNormal;
	PictureObject *pictureObjectHover;
	PictureObject *pictureObjectSelected;
	int x1;
	int y1;
	int x2;
	int y2;
	int16 inventoryItemId;
	bool isSelected;
	bool isMouseHover;
};

class Inventory2 : public Inventory {
	Common::Array<InventoryItem> _inventoryItems;
	Common::Array<InventoryIcon> _inventoryIcons;
	int _selectedId;
	int _field_48;
	bool _isInventoryOut;
	bool _isLocked;
	int _topOffset;
	Scene *_scene;
	BigPicture *_picture;

 public:
	Inventory2();
	virtual ~Inventory2();

	bool loadPartial(MfcArchive &file);
	bool savePartial(MfcArchive &file);
	void addItem(int itemId, int count);
	void addItem2(StaticANIObject *obj);
	void removeItem(int itemId, int count);
	void removeItem2(Scene *sceneObj, int itemId, int x, int y, int priority);

	int getInventoryItemIndexById(int itemId);
	int getInventoryPoolItemIdAtIndex(int itemId);
	int getInventoryPoolItemFieldCById(int itemId);
	int getCountItemsWithId(int itemId);
	int getItemFlags(int itemId);

	void rebuildItemRects();

	Scene *getScene() { return _scene; }
	bool getIsLocked() { return _isLocked; }
	void setIsLocked(bool val) { _isLocked = val; }
	bool getIsInventoryOut() { return _isInventoryOut; }

	int getSelectedItemId() { return _selectedId < 0 ? 0 : _selectedId; }
	int getHoveredItem(Common::Point *point);
	void slideIn();
	void slideOut();

	bool handleLeftClick(ExCommand *cmd);
	int selectItem(int itemId);
	bool unselectItem(bool flag);

	void draw();

	void clear();
};

} // End of namespace Fullpipe

#endif /* FULLPIPE_INVENTORY_H */