58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
|  | local InventoryArea = {} | ||
|  | local RoleUtils = require("GamePlay.Utils.RoleUtils") | ||
|  | local GameplayStatics = import("GameplayStatics") | ||
|  | local WidgetBlueprintLibrary = import("WidgetBlueprintLibrary") | ||
|  | local BusyActorManagerSubSystem = import("BusyActorManagerSubSystem") | ||
|  | 
 | ||
|  | 
 | ||
|  | function InventoryArea:ctor() | ||
|  |     self.widgets = {} | ||
|  | end | ||
|  | 
 | ||
|  | function InventoryArea:PreConstruct(bIsDesignTime) | ||
|  |     if not bIsDesignTime then return end | ||
|  | end | ||
|  | 
 | ||
|  | function InventoryArea:OnInitialized() | ||
|  |     self:InitInventoryLayout(self.RowGridCnt, self.ColGridCnt, self.GridClass) | ||
|  | end | ||
|  | 
 | ||
|  | function InventoryArea:InitInventoryLayout(row_cnt, col_cnt, cls) | ||
|  |     self.widgets = {} | ||
|  |     local pc = GameplayStatics.GetPlayerController(self, 0) | ||
|  |     for i=1, row_cnt do | ||
|  |         for j=1, col_cnt do | ||
|  |             local widget = WidgetBlueprintLibrary.Create(self, cls, pc) | ||
|  |             self.GridPanel:AddChildToGrid(widget, i-1, j-1) | ||
|  |             widget:SetData(nil) | ||
|  |             table.insert(self.widgets, widget) | ||
|  |         end | ||
|  |     end | ||
|  | end | ||
|  | 
 | ||
|  | function InventoryArea:OnSwitchIn(inventory_name) | ||
|  |     self:SetVisible(true) | ||
|  |     local inventory = nil | ||
|  |     if inventory_name == "BonfireInventory" then | ||
|  |         local sub_system = BusyActorManagerSubSystem.Get(self) | ||
|  |         local bonfire = sub_system:GetNearestBonfire() | ||
|  |         inventory = bonfire.Inventory | ||
|  |     elseif inventory_name == "RoleInventory" then | ||
|  |         local role = RoleUtils.GetRole(self) | ||
|  |         inventory = role.Inventory | ||
|  |     end | ||
|  | 
 | ||
|  |     if inventory == nil then return end | ||
|  | 
 | ||
|  |     inventory:ForEach(slua.createDelegate(function(idx, grid) | ||
|  |         local widget = self.widgets[idx+1] | ||
|  |         widget:SetData(grid) | ||
|  |         widget:SetInventoryInfo(inventory, idx) | ||
|  |     end)) | ||
|  | end | ||
|  | 
 | ||
|  | function InventoryArea:OnSwitchOut(inventory_name) | ||
|  |     self:SetVisible(false) | ||
|  | end | ||
|  | 
 | ||
|  | return Class(nil, nil, InventoryArea) |