local Stratagem_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') function Stratagem_Controller.OnStartup() EventSystem.Regist(EventID.BagItem_Update, Stratagem_Controller.CheckRedPoint) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, Stratagem_Controller.CheckRedPoint) EventSystem.Regist(EventID.UI_RefreshCurrency, Stratagem_Controller.CheckRedPoint) end function Stratagem_Controller.CheckRedPoint() local isRed = false for _,data in DataSheetManager.StratagemData:GetEnumerator() do local info = MDL.Stratagem.GetStratagemInfo(data.ID) if info then isRed = MDL.Stratagem.IsCanLearnLv(data) else isRed = MDL.Stratagem.IsCanActive(data) end if isRed then break end end if isRed then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.Stratagem) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.Stratagem) end if MDL.Stratagem.IsCanEquip() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.Formation_Stratagem) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.Formation_Stratagem) end end function Stratagem_Controller.OpenInfoView(data) local param = {id = data.ID} local stratagemInfo = MDL.Stratagem.GetStratagemInfo(data.ID) if stratagemInfo then if MDL.Stratagem.IsCanLearnLv(data) then param.selectIndex = 1 elseif MDL.Stratagem.IsCanTalentLv(data) then param.selectIndex = 2 end end UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UIStratagemPanel, param) end function Stratagem_Controller.CalculateLearnLvGS(id) local info = MDL.Stratagem.GetStratagemInfo(id) local levelId = info.Learn.CurrLvID local pointId = info.Learn.CurrPointID local fight = 0 for i,v in DataSheetManager.StratagemLearn:GetDataByID_LevelID_PointId(info.StratagemID) do if v.LevelID < levelId or (v.LevelID == levelId and pointId>= v.PointId) then fight = fight + UTL.Attr.CalculateFight(v.Attr_Table) else break end end local data = DataSheetManager.StratagemData:GetDataByID(id) return fight + UTL.Attr.CalculateFight(data.Attr_Table) end function Stratagem_Controller.CalculateEquipGs(slots) local fight = 0 for k,v in pairs(slots) do local singleFight = 0 local info = MDL.Stratagem.GetStratagemInfo(v) if k == 1 then singleFight = singleFight + info.StratagemGS else local data = DataSheetManager.StratagemEquip:GetDataByID(k) local attrs = Stratagem_Controller.GetAttr(v) for k,v in pairs(attrs) do local attrData = DataSheetManager.AttrData:GetDataByID(k) singleFight = singleFight + v * attrData.GSParam * data.AttrRatio end singleFight = math.floor(math.floor(singleFight + 0.5)) * 6 end fight = fight + singleFight end ---这里为了跟服务器统一先除以6 取整再乘以6 return math.floor(math.floor(fight + 0.5) / 6) * 6 end function Stratagem_Controller.GetAttr(id) local info = MDL.Stratagem.GetStratagemInfo(id) local data = DataSheetManager.StratagemData:GetDataByID(id) local attrDict = {} for i,v in ipairs(data.Attr_Table) do attrDict[v.AttrType] = attrDict[v.AttrType] or 0 attrDict[v.AttrType] = attrDict[v.AttrType] + v.AttrNum end if info then local levelId = info.Learn.CurrLvID local pointId = info.Learn.CurrPointID for i,v in DataSheetManager.StratagemLearn:GetDataByID_LevelID_PointId(info.StratagemID) do if v.LevelID < levelId or (v.LevelID == levelId and pointId>= v.PointId) then for i,v in ipairs(v.Attr_Table) do attrDict[v.AttrType] = attrDict[v.AttrType] or 0 attrDict[v.AttrType] = attrDict[v.AttrType] + v.AttrNum end else break end end end return attrDict end function Stratagem_Controller.GetSlotAttr(slots) local attrDict = {} for k,v in pairs(slots) do local info = MDL.Stratagem.GetStratagemInfo(v) local data = DataSheetManager.StratagemEquip:GetDataByID(k) private.MergeAttrList(attrDict, Stratagem_Controller.GetAttr(v), data.AttrRatio) end return attrDict end function private.MergeAttrList(mainList, subList, attrRatio) for k,v in pairs(subList) do mainList[k] = mainList[k] or 0 mainList[k] = mainList[k] + v*attrRatio end end function Stratagem_Controller.OpenViewByItemId(id) local data = private.GetStrataDataByItemId(id) CTL.Stratagem.OpenInfoView(data) end function Stratagem_Controller.IsStratagemActive(id) local data = private.GetStrataDataByItemId(id) return MDL.Stratagem.GetStratagemInfo(data.ID) end function Stratagem_Controller.FrameIsActiveByItemId(id) local data = private.GetStrataDataByItemId(id) if MDL.Stratagem.GetStratagemInfo(data.ID) == nil then return MDL.Stratagem.IsCanActive(data) end return false end function Stratagem_Controller.Init2DShowScene(showModel,bgName) private.modelParentTrans = showModel:CreateRootObject() private.sceneTrans = showModel:CreateModelObject(ConstAssetPathConfig.Common2DScenePrefab,nil) private.sceneTrans:SetLocalPosition(0,10,0) local parentTrans = private.sceneTrans:Find("HeroParent") parentTrans:SetLocalPosition(0, 0, 0) private.modelParentTrans:SetParent(parentTrans, false); local cameraParent = private.sceneTrans:Find("CameraParent"); UIModelUtils.StartUIShowSystem(cameraParent, Vector3.New(0, 0, 0), Vector3.New(0, 0, 0), 35) showModel:SetSceneTexture(ConstAssetPathConfig.Path14..bgName, private.sceneTrans, "BlackPlane") UTL.UIRender.SceneBackgroundFitScreen(private.sceneTrans:Find("BlackPlane"), 0.6, -0.27) UIUtils.ChangLodSettingTypeToShow(10) end function Stratagem_Controller.RefreshModelShow(data,showModel,posX,posY,localScale) if private.modelTrans ~= nil then showModel:DisposeModelObject(private.modelTrans) end private.modelTrans = showModel:CreateModelObject(data.StratagemPicture, private.modelParentTrans) private.modelParentTrans:SetLocalPosition(posX, posY, 0) private.modelParentTrans:SetLocalScale(localScale,localScale,localScale) private.modelParentTrans:SetLocalEulerAngles(0, 0, 0) end function Stratagem_Controller.SetActiveModelShow(isActive) if private.modelTrans ~= nil then UIUtils.SetActive(private.modelTrans,isActive) end end function Stratagem_Controller.DisposeAll(showModel) showModel:DisposeAllModelObject() CameraController.Instance:EndUIShowSystem() private.modelTrans = nil private.sceneTrans = nil private.modelParentTrans = nil UIUtils.ChangLodSettingTypeToGame() end function Stratagem_Controller.GetStratagemMaxLevel(id) local maxLevel = 0 for i, v in DataSheetManager.StratagemLearn:GetDataByID_LevelID_PointId(id) do maxLevel = v.LevelID end return maxLevel end function private.GetStrataDataByItemId(id) for _,data in DataSheetManager.StratagemData:GetEnumerator() do for i,v in ipairs(data.Item_Table) do if v.ItemID == id then return data end end end end return Stratagem_Controller