aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h
blob: 03a58378c99084204a5fe9fa15322a34c49865ab (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
#pragma once
#include "..\..\..\Minecraft.World\Recipy.h"
#include "..\..\..\Minecraft.World\Item.h"

class LocalPlayer;

// 4J Stu - Crafting menu code that's shared across Iggy and XUI
class IUIScene_CraftingMenu
{
protected:
#define DISPLAY_INVENTORY 0
#define DISPLAY_DESCRIPTION 1
#define DISPLAY_INGREDIENTS 2
#define DISPLAY_MAX 3

	enum _eGroupTab
	{
		eGroupTab_Left,
		eGroupTab_Middle,
		eGroupTab_Right
	};

	static const int m_iMaxHSlotC = 12;
	static const int m_iMaxHCraftingSlotC = 10;
	static const int m_iMaxVSlotC = 17; 
	static const int m_iMaxDisplayedVSlotC = 3;
	static const int m_iIngredients3x3SlotC = 9;
	static const int m_iIngredients2x2SlotC = 4;

	static const int m_iMaxHSlot3x3C = 12;
	static const int m_iMaxHSlot2x2C = 10;

	static const int m_iMaxGroup3x3 = 7;
	static const int m_iMaxGroup2x2 = 6;

	static int m_iBaseTypeMapA[Item::eBaseItemType_MAXTYPES];

	typedef struct  
	{
		int iCount;
		int iItemBaseType;
		int iRecipeA[m_iMaxVSlotC]; // tiers of item that can be made
	}
	CANBEMADE;

	CANBEMADE CanBeMadeA[m_iMaxHSlotC];

	int m_iCurrentSlotHIndex;
	int m_iCurrentSlotVIndex;
	int m_iRecipeC;
	int m_iContainerType; // 2x2 or 3x3
	shared_ptr<LocalPlayer> m_pPlayer;
	int m_iGroupIndex;

	int iVSlotIndexA[3]; // index of the v slots currently displayed

	static LPCWSTR m_GroupIconNameA[m_iMaxGroup3x3];
	static Recipy::_eGroupType m_GroupTypeMapping4GridA[m_iMaxGroup2x2];
	static Recipy::_eGroupType m_GroupTypeMapping9GridA[m_iMaxGroup3x3];
	Recipy::_eGroupType *m_pGroupA;

	static LPCWSTR m_GroupTabNameA[3];	
	static _eGroupTab m_GroupTabBkgMapping2x2A[m_iMaxGroup2x2];
	static _eGroupTab m_GroupTabBkgMapping3x3A[m_iMaxGroup3x3];
	_eGroupTab *m_pGroupTabA;
	int m_iCraftablesMaxHSlotC;
	int m_iIngredientsMaxSlotC;
	int m_iDisplayDescription;
	int m_iIngredientsC;
	bool m_bIgnoreKeyPresses;
	bool m_bSplitscreen;

	eTutorial_State m_previousTutorialState;

	bool handleKeyDown(int iPad, int iAction, bool bRepeat);

public:
	IUIScene_CraftingMenu();

protected:
	LPCWSTR GetGroupNameText(int iGroupType);

	void CheckRecipesAvailable();
	void UpdateHighlight();
	void UpdateVerticalSlots();
	void DisplayIngredients();
	void UpdateTooltips();
	void UpdateDescriptionText(bool);
	void HandleInventoryUpdated();

public:
	Recipy::_eGroupType getCurrentGroup() { return m_pGroupA[m_iGroupIndex]; }
	bool isItemSelected(int itemId);

protected:
	virtual int getPad() = 0;
	virtual void hideAllHSlots() = 0;
	virtual void hideAllVSlots() = 0;
	virtual void hideAllIngredientsSlots() = 0;
	virtual void setCraftHSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha) = 0;
	virtual void setCraftVSlotItem(int iPad, int iIndex, shared_ptr<ItemInstance> item, unsigned int uiAlpha) = 0;
	virtual void setCraftingOutputSlotItem(int iPad, shared_ptr<ItemInstance> item) = 0;
	virtual void setCraftingOutputSlotRedBox(bool show) = 0;
	virtual void setIngredientSlotItem(int iPad, int index, shared_ptr<ItemInstance> item) = 0;
	virtual void setIngredientSlotRedBox(int index, bool show) = 0;
	virtual void setIngredientDescriptionItem(int iPad, int index, shared_ptr<ItemInstance> item) = 0;
	virtual void setIngredientDescriptionRedBox(int index, bool show) = 0;
	virtual void setIngredientDescriptionText(int index, LPCWSTR text) = 0;
	virtual void setShowCraftHSlot(int iIndex, bool show) = 0;
	virtual void showTabHighlight(int iIndex, bool show) = 0;
	virtual void setGroupText(LPCWSTR text) = 0;
	virtual void setDescriptionText(LPCWSTR text) = 0;
	virtual void setItemText(LPCWSTR text) = 0;
	virtual void scrollDescriptionUp() = 0;
	virtual void scrollDescriptionDown() = 0;
	virtual void updateHighlightAndScrollPositions() = 0;
	virtual void updateVSlotPositions(int iSlots, int i) = 0;

	virtual void UpdateMultiPanel() = 0;
};