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) |