1 #ifndef __INTERFACE_ITEMS_H
2 #define __INTERFACE_ITEMS_H
3 
4 #include "Button_System.h"
5 #include "Interface.h"
6 #include "MouseSystem.h"
7 #include "Soldier_Control.h"
8 
9 #include "UILayout.h"
10 
11 #include <string_theory/string>
12 
13 
14 struct ItemModel;
15 
16 
17 // DEFINES FOR ITEM SLOT SIZES IN PIXELS
18 #define BIG_INV_SLOT_WIDTH	61
19 #define BIG_INV_SLOT_HEIGHT	22
20 #define SM_INV_SLOT_WIDTH	30
21 #define SM_INV_SLOT_HEIGHT	23
22 #define VEST_INV_SLOT_WIDTH	43
23 #define VEST_INV_SLOT_HEIGHT	24
24 #define LEGS_INV_SLOT_WIDTH	43
25 #define LEGS_INV_SLOT_HEIGHT	24
26 #define HEAD_INV_SLOT_WIDTH	43
27 #define HEAD_INV_SLOT_HEIGHT	24
28 
29 
30 // Itempickup stuff
31 void InitializeItemPickupMenu(SOLDIERTYPE* pSoldier, INT16 sGridNo, ITEM_POOL* pItemPool, INT8 bZLevel);
32 void RenderItemPickupMenu(void);
33 void RemoveItemPickupMenu(void);
34 void SetItemPickupMenuDirty( BOOLEAN fDirtyLevel );
35 BOOLEAN HandleItemPickupMenu(void);
36 
37 
38 // FUNCTIONS FOR INTERFACEING WITH ITEM PANEL STUFF
39 void InitInvSlotInterface(INV_REGION_DESC const* pRegionDesc, INV_REGION_DESC const* pCamoRegion, MOUSE_CALLBACK INVMoveCallback, MOUSE_CALLBACK INVClickCallback, MOUSE_CALLBACK INVMoveCamoCallback, MOUSE_CALLBACK INVClickCamoCallback);
40 void ShutdownInvSlotInterface();
41 void HandleRenderInvSlots(SOLDIERTYPE const&, DirtyLevel);
42 void HandleNewlyAddedItems(SOLDIERTYPE&, DirtyLevel*);
43 void RenderInvBodyPanel(const SOLDIERTYPE* pSoldier, INT16 sX, INT16 sY);
44 void DisableInvRegions( BOOLEAN fDisable );
45 
46 void DegradeNewlyAddedItems(void);
47 void CheckForAnyNewlyAddedItems( SOLDIERTYPE *pSoldier );
48 
49 
50 BOOLEAN HandleCompatibleAmmoUI(const SOLDIERTYPE* pSoldier, INT8 bInvPos, BOOLEAN fOn);
51 
52 
53 // THIS FUNCTION IS CALLED TO RENDER AN ITEM.
54 // uiBuffer - The Dest Video Surface - can only be FRAME_BUFFER or guiSAVEBUFFER
55 // pSoldier - used for determining whether burst mode needs display
56 // pObject  - Usually taken from pSoldier->inv[HANDPOS]
57 // sX, sY, Width, Height, - Will Center it in the Width
58 // fDirtyLevel  if == DIRTYLEVEL2 will render everything
59 //              if == DIRTYLEVEL1 will render bullets and status only
60 //
61 //  Last parameter used mainly for when mouse is over item
62 void INVRenderItem(SGPVSurface* uiBuffer, SOLDIERTYPE const* pSoldier, OBJECTTYPE const&, INT16 sX, INT16 sY, INT16 sWidth, INT16 sHeight, DirtyLevel, UINT8 ubStatusIndex, INT16 sOutlineColor);
63 
64 
65 extern BOOLEAN gfInItemDescBox;
66 
67 BOOLEAN InItemDescriptionBox(void);
68 void InitItemDescriptionBox(SOLDIERTYPE* pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex);
69 void InternalInitItemDescriptionBox(OBJECTTYPE* pObject, INT16 sX, INT16 sY, UINT8 ubStatusIndex, SOLDIERTYPE* pSoldier);
70 void InitKeyItemDescriptionBox(SOLDIERTYPE* pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY);
71 void RenderItemDescriptionBox(void);
72 void HandleItemDescriptionBox(DirtyLevel*);
73 void DeleteItemDescriptionBox(void);
74 
75 
76 BOOLEAN InItemStackPopup(void);
77 void    InitItemStackPopup(SOLDIERTYPE* pSoldier, UINT8 ubPosition, INT16 sInvX, INT16 sInvY, INT16 sInvWidth, INT16 sInvHeight);
78 void RenderItemStackPopup( BOOLEAN fFullRender );
79 
80 
81 // keyring handlers
82 void InitKeyRingPopup(SOLDIERTYPE* pSoldier, INT16 sInvX, INT16 sInvY, INT16 sInvWidth, INT16 sInvHeight);
83 void RenderKeyRingPopup( BOOLEAN fFullRender );
84 void InitKeyRingInterface( MOUSE_CALLBACK KeyRingClickCallback );
85 void InitMapKeyRingInterface( MOUSE_CALLBACK KeyRingClickCallback );
86 void DeleteKeyRingPopup(void);
87 
88 
89 void ShutdownKeyRingInterface( void );
90 BOOLEAN InKeyRingPopup( void );
91 void BeginKeyRingItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubKeyRingPosition );
92 
93 
94 extern OBJECTTYPE*  gpItemPointer;
95 extern OBJECTTYPE   gItemPointer;
96 extern SOLDIERTYPE* gpItemPointerSoldier;
97 extern BOOLEAN      gfItemPointerDifferentThanDefault;
98 
99 
100 void BeginItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubHandPos );
101 void InternalBeginItemPointer( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject, INT8 bHandPos );
102 void EndItemPointer(void);
103 void DrawItemFreeCursor(void);
104 void DrawItemTileCursor(void);
105 BOOLEAN HandleItemPointerClick( UINT16 usMapPos );
106 UINT8 GetAttachmentHintColor(const OBJECTTYPE* pObj);
107 SGPVObject const& GetInterfaceGraphicForItem(const ItemModel *item);
108 UINT16            GetTileGraphicForItem(const ItemModel *item);
109 SGPVObject*       LoadTileGraphicForItem(const ItemModel *item);
110 
111 ST::string GetHelpTextForItem(const OBJECTTYPE& obj);
112 
113 void CancelItemPointer(void);
114 
115 void LoadItemCursorFromSavedGame(HWFILE);
116 void SaveItemCursorToSavedGame(HWFILE);
117 
118 // handle compatable items for merc and map inventory
119 BOOLEAN HandleCompatibleAmmoUIForMapScreen(const SOLDIERTYPE* pSoldier, INT32 bInvPos, BOOLEAN fOn, BOOLEAN fFromMerc);
120 BOOLEAN HandleCompatibleAmmoUIForMapInventory( SOLDIERTYPE *pSoldier, INT32 bInvPos, INT32 iStartSlotNumber, BOOLEAN fOn, BOOLEAN fFromMerc  );
121 void ResetCompatibleItemArray();
122 
123 void CycleItemDescriptionItem(void);
124 
125 void UpdateItemHatches(void);
126 
127 extern BOOLEAN      gfInKeyRingPopup;
128 extern BOOLEAN      gfInItemPickupMenu;
129 extern SOLDIERTYPE* gpItemPopupSoldier;
130 extern INT8         gbCompatibleApplyItem;
131 extern INT8         gbInvalidPlacementSlot[NUM_INV_SLOTS];
132 extern MOUSE_REGION gInvDesc;
133 extern BOOLEAN      gfAddingMoneyToMercFromPlayersAccount;
134 extern MOUSE_REGION gItemDescAttachmentRegions[MAX_ATTACHMENTS];
135 extern INT8         gbItemPointerSrcSlot;
136 extern BOOLEAN      gfDontChargeAPsToPickup;
137 extern GUIButtonRef giMapInvDescButton;
138 
139 void    HandleAnyMercInSquadHasCompatibleStuff(const OBJECTTYPE* pObject);
140 BOOLEAN InternalHandleCompatibleAmmoUI(const SOLDIERTYPE* pSoldier, const OBJECTTYPE* pTestObject, BOOLEAN fOn);
141 
142 void SetMouseCursorFromItem(UINT16 item_idx);
143 void SetMouseCursorFromCurrentItem();
144 
145 void SetItemPointer(OBJECTTYPE*, SOLDIERTYPE*);
146 
147 void LoadInterfaceItemsGraphics();
148 void DeleteInterfaceItemsGraphics();
149 
150 #endif
151