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