# coding=utf-8 from ...BlueFoxTools.ScreenTools import ScreenTools from ...BlueFoxTools.ScreenTools import ButtonTouchTypeEnum as btte from ...BlueFoxTools.SystemTools import SystemTools from ...BlueFoxTools.ToolsConfig import * allCookRecipe = [ { 'publicResult': 'rtdd:oilpan', # 共有步骤产生的结果 'publicStep': [ {'itemName': 'rtdd:spatula', 'count': 1}, {'itemName': 'rtdd:oilcan', 'count': 1}, {}, ], # 共有步骤 'splitStep': [ { 'result': 'rtdd:plate_24', # 分步骤产生的结果 'items': [{}, {}, {}], # 分步骤的物品 } ], # 分步骤,一页最多8个分步骤 }, # 这是一页显示的数据 { 'publicResult': 'rtdd:oilpan', 'publicStep': [ {'itemName': 'rtdd:spatula', 'count': 1}, {'itemName': 'rtdd:oilcan', 'count': 1}, {}, ], 'splitStep': [] } ] @ScreenTools.AutoRegister('rtdd_caipu.RecipeScreen') class CookRecipe(baseScreen): screenTools = ScreenTools.GetTools('CookRecipe') buttonBinder = screenTools.ButtonCallFuncBackBinder def __init__(self, *args): super(CookRecipe, self).__init__(*args) self.page = 0 self.pageData = allCookRecipe[self.page] def Create(self): self.screenTools.Binding(self) lastButton = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel1/last').asButton() nextButton = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel1/next').asButton() lastButton.AddTouchEventParams() nextButton.AddTouchEventParams() lastButton.SetButtonTouchUpCallback(self.LastPage) nextButton.SetButtonTouchUpCallback(self.NextPage) self.anyStepControlRoot = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel') self.anyStemControlItemCells = [] for i in range(1, 5): self.anyStemControlItemCells.append( self.anyStepControlRoot.GetChildByName('item_cell{}'.format(i)).GetChildByName( 'item_renderer' ).asItemRenderer() ) self.splitStepControlRoot = self.GetBaseUIControl(RootScreenPathHead + '/image/recipe3') self.splitStepControl = [] for i in range(1, 5): self.splitStepControl.append( self.splitStepControlRoot.GetChildByName('recipe_list{}'.format(i)) ) self.Build() def RenderItem(self, itemRender, itemInfo): if not itemInfo: itemRender.SetUiItem('minecraft:air', 0) return itemName = itemInfo['itemName'] count = itemInfo['count'] itemRender.SetUiItem(itemName, 0) if count <= 1: itemRender.GetChildByName('label').SetVisible(False, False) else: itemRender.GetChildByName('label').SetVisible(True, False) itemRender.GetChildByName('label').asLabel().SetText(str(count), False) def Build(self): self.RenderItem( self.anyStemControlItemCells[0], {'itemName': self.pageData.get('publicResult', ''), 'count': 1} ) for _ in range(1, 4): self.RenderItem( self.anyStemControlItemCells[_], self.pageData.get('publicStep', [{}, {}, {}, ])[_ - 1] ) splitStep = self.pageData.get('splitStep', []) for index in range(4): control = self.splitStepControl[index] control.SetVisible(True, False) for j in range(1, 3): infoIndex = index * 2 + j - 1 control_j = control.GetChildByName('recipe{}'.format(j)).GetChildByName('recipe') if infoIndex >= len(splitStep): control_j.SetVisible(False, False) continue control_j.SetVisible(True, False) splitStepInfo = splitStep[infoIndex] for k in range(1, 4): itemCell = control_j.GetChildByName('item{}'.format(k)).asItemRenderer() self.RenderItem(itemCell, splitStepInfo.get('items', [{}, {}, {}])[k - 1]) itemCell = control_j.GetChildByName('item4').asItemRenderer() self.RenderItem(itemCell, {'itemName': splitStepInfo.get('result', ''), 'count': 1}) def LastPage(self, args): if self.page <= 0: return self.page -= 1 self.pageData = allCookRecipe[self.page] self.Build() def NextPage(self, args): if self.page >= len(allCookRecipe) - 1: return self.page += 1 self.pageData = allCookRecipe[self.page] self.Build() @buttonBinder(btte.TouchUp, RootScreenPathHead + '/close') def Close(self, args): clientApi.PopScreen()