130 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
								 | 
							
								local BagGridWidget = {}
							 | 
						||
| 
								 | 
							
								local UIUtils = require("UI.Utils")
							 | 
						||
| 
								 | 
							
								local GamePlayUtils = require("GamePlay.Utils")
							 | 
						||
| 
								 | 
							
								local RoleUtils = require("GamePlay.Utils.RoleUtils")
							 | 
						||
| 
								 | 
							
								local BuildUtils = require("GamePlay.Utils.BuildUtils")
							 | 
						||
| 
								 | 
							
								local ESlateVisibility = import("ESlateVisibility")
							 | 
						||
| 
								 | 
							
								local BlueprintGameplayTagLibrary = import("BlueprintGameplayTagLibrary")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local function SetIsSelected(check_box, is_selected)
							 | 
						||
| 
								 | 
							
								    if is_selected == nil then
							 | 
						||
| 
								 | 
							
								        check_box:SetVisibility(ESlateVisibility.Collapsed)
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        check_box:SetVisibility(ESlateVisibility.Visible)
							 | 
						||
| 
								 | 
							
								        check_box:SetIsChecked(is_selected)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local function SetItemAndCnt(entry, item_id, item_cnt)
							 | 
						||
| 
								 | 
							
								    if item_id ~= nil then
							 | 
						||
| 
								 | 
							
								        entry.Icon:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
							 | 
						||
| 
								 | 
							
								        local config = GamePlayUtils.GetItemDescConfig(item_id)
							 | 
						||
| 
								 | 
							
								        local x = slua.loadObject(config.IconResource:ToString())
							 | 
						||
| 
								 | 
							
								        entry.Icon:SetBrushResourceObject(x)
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        entry.Icon:SetVisibility(ESlateVisibility.Collapsed)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    item_cnt = item_cnt or 0
							 | 
						||
| 
								 | 
							
								    if item_cnt > 0 then
							 | 
						||
| 
								 | 
							
								        entry.Icon:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
							 | 
						||
| 
								 | 
							
								        if item_cnt > 1 then
							 | 
						||
| 
								 | 
							
								            entry.TxtCnt:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
							 | 
						||
| 
								 | 
							
								        else
							 | 
						||
| 
								 | 
							
								            entry.TxtCnt:SetVisibility(ESlateVisibility.Collapsed)
							 | 
						||
| 
								 | 
							
								        end
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        entry.TxtCnt:SetVisibility(ESlateVisibility.Collapsed)
							 | 
						||
| 
								 | 
							
								        entry.Icon:SetVisibility(ESlateVisibility.Collapsed)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    entry.item_id = item_id
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local function GetItemMenuContent(item, item_id)
							 | 
						||
| 
								 | 
							
								    local config = GamePlayUtils.GetItemConfigByID(item_id)
							 | 
						||
| 
								 | 
							
								    if config == nil then return {} end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    local contents = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    local consume_function = function()
							 | 
						||
| 
								 | 
							
								        local inventory = item.inventory
							 | 
						||
| 
								 | 
							
								        inventory:ConsumeItems(item.index, 1)
							 | 
						||
| 
								 | 
							
								        local grid = inventory:GetGridWithIndex(item.index)
							 | 
						||
| 
								 | 
							
								        item:SetData(grid)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    local is_food = BlueprintGameplayTagLibrary.HasTag(
							 | 
						||
| 
								 | 
							
								        config.TypeTagContainer,
							 | 
						||
| 
								 | 
							
								        GamePlayUtils.GetGameplayTag("GameItem.Food"),
							 | 
						||
| 
								 | 
							
								        false
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    local is_building = BlueprintGameplayTagLibrary.HasTag(
							 | 
						||
| 
								 | 
							
								        config.TypeTagContainer,
							 | 
						||
| 
								 | 
							
								        GamePlayUtils.GetGameplayTag("GameItem.Building"),
							 | 
						||
| 
								 | 
							
								        false
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    if is_food then
							 | 
						||
| 
								 | 
							
								        table.insert(contents, {"使用", function()
							 | 
						||
| 
								 | 
							
								            consume_function()
							 | 
						||
| 
								 | 
							
								            RoleUtils.EatFood(item, item_id)
							 | 
						||
| 
								 | 
							
								        end})
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    if is_building then
							 | 
						||
| 
								 | 
							
								        table.insert(contents, {"建造", function()
							 | 
						||
| 
								 | 
							
								            if BuildUtils.Build(item, item_id) == true then
							 | 
						||
| 
								 | 
							
								                consume_function()
							 | 
						||
| 
								 | 
							
								            end
							 | 
						||
| 
								 | 
							
								            -- RoleUtils.EatFood(item, item_id)
							 | 
						||
| 
								 | 
							
								        end})
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    table.insert(contents, {"丢弃", function()
							 | 
						||
| 
								 | 
							
								         consume_function()
							 | 
						||
| 
								 | 
							
								    end})
							 | 
						||
| 
								 | 
							
								    return contents
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function BagGridWidget:OnInitialized()
							 | 
						||
| 
								 | 
							
								    self.BtnMain.OnClicked:Add(function() self:OnGridClicked() end)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    self.CheckBox.OnCheckStateChanged:Add(function(is_selected)
							 | 
						||
| 
								 | 
							
								        if self.item == nil then return end
							 | 
						||
| 
								 | 
							
								        self.item.selected = is_selected
							 | 
						||
| 
								 | 
							
								    end)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function BagGridWidget:SetData(grid)
							 | 
						||
| 
								 | 
							
								    if grid == nil then grid = {} end
							 | 
						||
| 
								 | 
							
								    SetIsSelected(self.CheckBox, grid.selected)
							 | 
						||
| 
								 | 
							
								    SetItemAndCnt(self, grid.ItemID, grid.CurrentCount)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function BagGridWidget:SetInventoryInfo(inventory, index)
							 | 
						||
| 
								 | 
							
								    self.index = index
							 | 
						||
| 
								 | 
							
								    self.inventory = inventory
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function BagGridWidget:OnDestroy()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function BagGridWidget:OnGridClicked()
							 | 
						||
| 
								 | 
							
								    if not self.item_id then return end
							 | 
						||
| 
								 | 
							
								    local FVector2D = import("Vector2D")
							 | 
						||
| 
								 | 
							
								    local SlateBlueprintLibrary = import("SlateBlueprintLibrary")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    local geometry = self:GetCachedGeometry()
							 | 
						||
| 
								 | 
							
								    local size = SlateBlueprintLibrary.GetLocalSize(geometry)
							 | 
						||
| 
								 | 
							
								    local center = FVector2D()
							 | 
						||
| 
								 | 
							
								    center.X, center.Y = size.X * 0.5, size.Y * 0.5
							 | 
						||
| 
								 | 
							
								    local _, viewport_pos = SlateBlueprintLibrary.LocalToViewport(self, geometry, center, nil, nil)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    UIUtils.ShowWidget(self, "MenuPanel", {
							 | 
						||
| 
								 | 
							
								        viewport_pos,
							 | 
						||
| 
								 | 
							
								        GetItemMenuContent(self, self.item_id)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								return Class(nil, nil, BagGridWidget)
							 |