DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
InventoryQuickbar.c
Go to the documentation of this file.
1class InventoryQuickbar extends InventoryGridController
2{
3
4 protected ref TItemsMap m_Items;
5 protected InventoryGrid m_Grid;
6 protected int m_DraggingIndex;
7
8 void InventoryQuickbar(Widget quickbarGridWidget)
9 {
10 m_DraggingIndex = INDEX_NOT_FOUND;
11 m_Items = new TItemsMap;
12 UpdateItems( quickbarGridWidget );
13 }
14
16 {
17 }
18
19 void UpdateItems( Widget quickbarGridWidget )
20 {
21 if( !quickbarGridWidget )
22 {
23 return;
24 }
25
26 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
27 if ( !player )
28 return;
29
30 int i;
31
32 // create grid and align it to center
33 if( !m_Grid )
34 {
35 quickbarGridWidget.GetScript( m_Grid );
36 m_Grid.SetController( this );
37 m_Grid.GenerateQuickBarBackgroundTiles( 10 );
38 }
39
40 m_Items.Clear();
41 InventoryItem item;
42
43 if( m_Grid )
44 {
45 if( m_Grid.GetGridSize() != player.GetQuickBarSize() )
46 {
47 m_Grid.SetGridSize( player.GetQuickBarSize() );
48 }
49 }
50
51 for( i = 0; i < m_Grid.GetGridSize(); i++)
52 {
53 item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
54 if( item )
55 {
56 m_Items.Set( item, Vector(i, 1, 1) );
57 }
58 }
59
60 if( m_Grid )
61 {
62 m_Grid.UpdateQuickbarItems( m_Items );
63 }
64 }
65
66 void Remove(InventoryItem itemToRemove)
67 {
68 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
69
70 for ( int i = 0; i < m_Grid.GetGridSize(); i++ )
71 {
72 InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(i) );
73 if(item == itemToRemove)
74 {
75 player.RemoveQuickBarEntityShortcut( item );
76 }
77 }
78 }
79
80 // InventoryGridController override
81 override void OnItemEnter(InventoryGrid grid, Widget w, int row, int col)
82 {
83 Widget quickbar = grid.GetRoot();
84 if( quickbar )
85 {
86 // quickbar.SetColor( 0xFFFFFFFF );
87 }
88 }
89
90 override void OnItemLeave(InventoryGrid grid, Widget w)
91 {
92 Widget quickbar = grid.GetRoot();
93 if( quickbar )
94 {
95 // quickbar.SetColor( 0x7FFFFFFF );
96 }
97 }
98
99 override void OnItemDraggingOver(InventoryGrid grid, Widget w, int row, int col)
100 {
102 InventoryItem dragged_item;
103 iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
104 if( !iw )
105 {
106 string name = w.GetName();
107 name.Replace( "PanelWidget", "Render" );
108 iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
109 }
110
111 if( !iw || !iw.GetItem() )
112 {
113 return;
114 }
115
116 if(!dragged_item && iw)
117 dragged_item = InventoryItem.Cast( iw.GetItem() );
118
119 if ( dragged_item == NULL)
120 return;
121
122 if (dragged_item && dragged_item.GetInventory().CanRemoveEntity() == false)
123 {
124 int color;
125
126 color = ARGB( 150, 255, 1, 1 );
127
128 if( w.FindAnyWidget("Selected") )
129 {
130 w.FindAnyWidget("Selected").SetColor( color );
131 }
132 else
133 {
134 name = w.GetName();
135 name.Replace( "PanelWidget", "Cursor" );
136 if( w.FindAnyWidget( name ) )
137 {
138 w.FindAnyWidget( name ).SetColor( color );
139 }
140 }
141 }
142 else
143 {
144 color = ARGB( 150, 1, 255, 1 );
145
146 if( w.FindAnyWidget("Selected") )
147 {
148 w.FindAnyWidget("Selected").SetColor( color );
149 }
150 else
151 {
152 name = w.GetName();
153 name.Replace( "PanelWidget", "Cursor" );
154 if( w.FindAnyWidget( name ) )
155 {
156 w.FindAnyWidget( name ).SetColor( color );
157 }
158 }
159 }
160 }
161
162 override void OnItemDropReceived(InventoryGrid grid, Widget w, int row, int col)
163 {
164 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
165
166 ItemBase dragged_item = ItemBase.Cast( ItemManager.GetInstance().GetDraggedItem() );
167
168 ItemPreviewWidget iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
169 if( !iw )
170 {
171 string name = w.GetName();
172 name.Replace( "PanelWidget", "Render" );
173 iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
174 }
175
176 if(!dragged_item && iw)
177 dragged_item = ItemBase.Cast( iw.GetItem() );
178
179 if(dragged_item && dragged_item.GetHierarchyRootPlayer()!= GetGame().GetPlayer())
180 return;
181
182 ItemBase quickbar_item = ItemBase.Cast( player.GetQuickBarEntity(col) );
183
184 if (m_DraggingIndex != INDEX_NOT_FOUND)
185 {
186 dragged_item = ItemBase.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
187 }
188
189 if (dragged_item && dragged_item.GetInventory().CanRemoveEntity())
190 {
191 player.SetQuickBarEntityShortcut(dragged_item, col);
192
193 if (quickbar_item && quickbar_item != dragged_item && m_DraggingIndex != INDEX_NOT_FOUND)
194 {
195 player.SetQuickBarEntityShortcut(quickbar_item, m_DraggingIndex);
196 }
197 }
198 m_DraggingIndex = INDEX_NOT_FOUND;
199 InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu(MENU_INVENTORY) );
200 if ( menu )
201 {
202 menu.RefreshQuickbar();
203 }
204 }
205
206 override void OnItemDrop(InventoryGrid grid, Widget w, int row, int col)
207 {
208 if (m_DraggingIndex != INDEX_NOT_FOUND)
209 {
210 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
211 InventoryItem dragged_item = InventoryItem.Cast( player.GetQuickBarEntity(m_DraggingIndex) );
212 Remove(dragged_item);
213 m_DraggingIndex = INDEX_NOT_FOUND;
214 }
215
216 InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu(MENU_INVENTORY) );
217 if ( menu )
218 {
219 menu.RefreshQuickbar();
220 }
222 }
223
224 override void OnItemDrag(InventoryGrid grid, Widget w, int row, int col)
225 {
226 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
227 InventoryItem item = InventoryItem.Cast( player.GetQuickBarEntity(col) );
228 if (item)
229 {
230 m_DraggingIndex = col;
231 m_Grid.SetItemColor(item, InventoryGrid.ITEM_COLOR_DRAG);
232 }
233 }
234
235 override int GetQuickbarItemColor( InventoryGrid grid, InventoryItem item )
236 {
237 int color = 0x0AFFFFFF;
238 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
239 EntityAI itemInHand = player.GetHumanInventory().GetEntityInHands();
240 if ( player && itemInHand == item )
241 {
242 if ( player.GetHumanInventory().FindUserReservedLocationIndex(item) != -1 || grid.CanAddItemInHandToInventory() )
243 color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_GOOD;
244 else
245 color = InventoryGrid.ITEM_COLOR_QUICKBAR_H_BAD;
246 }
247 else if ( itemInHand )
248 {
249 if ( !grid.CanAddItemInHandToInventory() && !GameInventory.CanSwapEntitiesEx(item, itemInHand) )
250 color = InventoryGrid.ITEM_COLOR_QUICKBAR_I_BAD;
251 }
252 return color;
253 }
254
255
256 override int HasItemQuantity( InventoryItem item )
257 {
259 }
260
261 override string GetItemQuantityText( InventoryItem item )
262 {
264 }
265
266 override float GetItemQuantity( InventoryItem item )
267 {
269 }
270
272 {
273 ItemBase ib = ItemBase.Cast(item);
274 return ib.m_VarQuantityMax;
275 }
276
277 override int GetItemCount( InventoryItem item )
278 {
279 ItemBase ib = ItemBase.Cast(item);
280 return ib.m_Count;
281 }
282
284 {
285 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
286 EntityAI itemInHand = player.GetHumanInventory().GetEntityInHands();
287 return itemInHand && player.GetInventory().CanAddEntityToInventory(itemInHand);
288 }
289}
void InventoryMenu()
PlayerBase GetPlayer()
string name
script counterpart to engine's class Inventory
Definition Inventory.c:77
static bool CanSwapEntitiesEx(notnull EntityAI item1, notnull EntityAI item2)
Definition Inventory.c:601
override void OnItemDropReceived(InventoryGrid grid, Widget w, int row, int col)
override bool CanAddItemInHandToInventory()
override int GetItemQuantityMax(InventoryItem item)
override void OnItemEnter(InventoryGrid grid, Widget w, int row, int col)
void InventoryQuickbar(Widget quickbarGridWidget)
override string GetItemQuantityText(InventoryItem item)
void UpdateItems(Widget quickbarGridWidget)
void Remove(InventoryItem itemToRemove)
override float GetItemQuantity(InventoryItem item)
override void OnItemDrag(InventoryGrid grid, Widget w, int row, int col)
override void OnItemDrop(InventoryGrid grid, Widget w, int row, int col)
override void OnItemDraggingOver(InventoryGrid grid, Widget w, int row, int col)
protected InventoryGrid m_Grid
override int GetQuickbarItemColor(InventoryGrid grid, InventoryItem item)
override void OnItemLeave(InventoryGrid grid, Widget w)
override int HasItemQuantity(InventoryItem item)
override int GetItemCount(InventoryItem item)
protected ref TItemsMap m_Items
void HideDropzones()
static ItemManager GetInstance()
EntityAI GetDraggedItem()
proto native EntityAI GetItem()
static string GetItemQuantityText(EntityAI item, bool showMax=false)
static int HasItemQuantity(notnull EntityAI item)
static float GetItemQuantity(InventoryItem item)
const int INDEX_NOT_FOUND
Definition gameplay.c:13
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int MENU_INVENTORY
Definition constants.c:158
proto int Replace(string sample, string replace)
Replace all occurrances of 'sample' in 'str' by 'replace'.
proto native void Clear()
int ARGB(int a, int r, int g, int b)
Definition proto.c:322