| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- local Menu = {}
- local MENU_ANIM_TYPE = {
- ["FLICKER"] = "FLICKER", -- 闪动
- ["MAGNIFY"] = "MAGNIFY" -- 放大
- }
- local CURRENT_ITEM_SCALE = 1.2
- local DEFAULT_ITEM_COUNT = 3
- local nCurrentItemIndex = 0
- local currentAnimType = MENU_ANIM_TYPE.FLICKER
- local function StopCurrentItemAnim()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- currentItem.transform.localScale = CS.UnityEngine.Vector3.one
- currentItem.transform:DOKill()
- end
- local function RefreshCurrentItemAnim()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- if currentAnimType == MENU_ANIM_TYPE.FLICKER then
- currentItem.transform.localScale = CS.UnityEngine.Vector3.one
- currentItem.transform:DOScale(CURRENT_ITEM_SCALE, 1):SetLoops(-1, CS.DG.Tweening.LoopType.Yoyo)
- return
- end
- if currentAnimType == MENU_ANIM_TYPE.MAGNIFY then
- currentItem.transform.localScale = CS.UnityEngine.Vector3(CURRENT_ITEM_SCALE, CURRENT_ITEM_SCALE, 1)
- return
- end
- end
- local function RefreshBtnBoxUI()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local nBtnCount = panelBtnContent.transform.childCount
- local nShowBtnCount = GetCache("MENU_SHOW_ITEM_COUNT", DEFAULT_ITEM_COUNT)
- local nRefreshItemCount = (nBtnCount - nCurrentItemIndex) + math.floor((nShowBtnCount - DEFAULT_ITEM_COUNT) / 2)
- for i = 0, nRefreshItemCount, 1 do
- panelBtnContent.transform:GetChild(nBtnCount - 1):SetAsFirstSibling()
- end
- end
- local function RefreshCurrentItemUI()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- currentItem.transform.localScale = CS.UnityEngine.Vector3(CURRENT_ITEM_SCALE, CURRENT_ITEM_SCALE, 1)
- end
- local function SetPointClick()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- currentItem.transform:GetComponent("Selectable"):Select()
- end
- local function SelectPreItem()
- StopCurrentItemAnim()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local nBtnCount = panelBtnContent.transform.childCount
- panelBtnContent.transform:GetChild(nBtnCount - 1):SetAsFirstSibling()
- if nCurrentItemIndex == 0 then
- nCurrentItemIndex = nBtnCount - 1
- else
- nCurrentItemIndex = nCurrentItemIndex - 1
- end
- RefreshCurrentItemAnim()
- SetPointClick()
- end
- local function SelectNextItem()
- StopCurrentItemAnim()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local nBtnCount = panelBtnContent.transform.childCount
- panelBtnContent.transform:GetChild(0):SetAsLastSibling()
- if nCurrentItemIndex >= nBtnCount - 1 then
- nCurrentItemIndex = 0
- else
- nCurrentItemIndex = nCurrentItemIndex + 1
- end
- RefreshCurrentItemAnim()
- SetPointClick()
- end
- local function OnClickBtnItem(nClickItem, btnClickItem)
- if nClickItem == nCurrentItemIndex then
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:DispatchEvent(eventManager.EventType.COMMON_MENU_CLICK_BUTTON)
- return
- end
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- local nClickItemIndex = btnClickItem.transform:GetSiblingIndex()
- local nCurrentItemIndex = currentItem.transform:GetSiblingIndex()
- if nClickItemIndex < nCurrentItemIndex then
- SelectPreItem()
- return
- end
- if nClickItemIndex > nCurrentItemIndex then
- SelectNextItem()
- return
- end
- end
- local function RefreshBtnItem()
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local nBtnCount = panelBtnContent.transform.childCount
- local uiHelper = require('Base/UIHelper.lua')
- for i = 0, nBtnCount - 1, 1 do
- local btnItem = panelBtnContent.transform:GetChild(i).gameObject
- btnItem.name = "Btn_" .. i
- uiHelper:AddClickEvent(panelBtnContent, btnItem.name, function ()
- OnClickBtnItem(i, btnItem)
- end)
- end
- end
- local function CheckMouseScroll()
- local bMenuScroll = GetCache("MENU_SCROLL")
- if not bMenuScroll then return end
- local Input = CS.UnityEngine.Input
- if Input.mouseScrollDelta.y > 0 then
- SelectPreItem()
- return
- end
- if Input.mouseScrollDelta.y < 0 then
- SelectNextItem()
- return
- end
- end
- local function CheckGesture()
- if CS.GetCommonActionData.LeftSlipEnumType then
- CS.GetCommonActionData.LeftSlipEnumType = false
- SelectNextItem()
- return
- end
- if CS.GetCommonActionData.RightSlipEnumType then
- CS.GetCommonActionData.RightSlipEnumType = false
- SelectPreItem()
- return
- end
- end
- local function CheckKeyDown()
- local Input = CS.UnityEngine.Input
- local KeyCode = CS.UnityEngine.KeyCode
- if Input.GetKeyDown(KeyCode.LeftArrow) then
- SelectPreItem()
- return
- end
- if Input.GetKeyDown(KeyCode.RightArrow) then
- SelectNextItem()
- return
- end
- end
- local function OnSelectMenu(selected)
- local szCurrentItemName = "Btn_" .. nCurrentItemIndex
- if selected.transform.name ~= szCurrentItemName then
- SetPointClick()
- return
- end
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:DispatchEvent(eventManager.EventType.COMMON_UI_NAVIGATOR_ANIM, selected)
- end
- local function OnChangeSelectButton(lastSelectedObj, selected)
- if lastSelectedObj
- and not lastSelectedObj:Equals(nil)
- and lastSelectedObj.transform:CompareTag("CommonUtilsMenu")
- and lastSelectedObj.transform.name == "Btn_" .. nCurrentItemIndex
- then
- local rootPanel = Menu.rootPanel
- local panelBtnContent = rootPanel.transform:Find("Panel_BtnContent").gameObject
- local currentItem = panelBtnContent.transform:Find("Btn_" .. nCurrentItemIndex).gameObject
- currentItem.transform.localScale = CS.UnityEngine.Vector3(CURRENT_ITEM_SCALE, CURRENT_ITEM_SCALE, 1)
- return
- end
- if lastSelectedObj
- and not lastSelectedObj:Equals(nil)
- and lastSelectedObj.transform:CompareTag("CommonUtilsMenu")
- and selected and selected.transform:CompareTag("CommonUtilsMenu")
- then
- lastSelectedObj.transform.localScale = CS.UnityEngine.Vector3.one
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:DispatchEvent(eventManager.EventType.COMMON_UI_NAVIGATOR_ANIM, selected)
- return
- end
- if selected
- and not selected:Equals(nil)
- and selected.transform:CompareTag("CommonUtilsMenu")
- and selected.transform.name == "Btn_" .. nCurrentItemIndex then
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:DispatchEvent(eventManager.EventType.COMMON_UI_NAVIGATOR_ANIM, selected)
- return
- end
- end
- local function RefreshUI()
- RefreshBtnItem()
- RefreshBtnBoxUI()
- RefreshCurrentItemUI()
- end
- local function InitData()
- end
- local function UnInitData()
- SetCache("MENU_SHOW_ITEM_COUNT", nil)
- SetCache("MENU_SCROLL", nil)
- end
- local function RegisterEvent()
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:RegisterEvent(eventManager.EventType.COMMON_SELECT_BUTTON, OnChangeSelectButton)
- eventManager:RegisterEvent(eventManager.EventType.COMMON_UI_NAVIGATOR_SELECT_MENU, OnSelectMenu)
- end
- local function UnregisterEvent()
- local eventManager = require('Base/ZEventDispatchCenter.lua')
- eventManager:UnregisterEvent(eventManager.EventType.COMMON_UI_NAVIGATOR_SELECT_MENU, OnSelectMenu)
- eventManager:UnregisterEvent(eventManager.EventType.COMMON_SELECT_BUTTON, OnChangeSelectButton)
- end
- function Menu.SetShowItemData(nShowItemDemo)
- SetCache("MENU_SHOW_ITEM_COUNT", nShowItemDemo)
- end
- function Menu.SetMenuScroll()
- SetCache("MENU_SCROLL", true)
- end
- function Menu.Awake(luaRoot)
- Menu.luaRoot = luaRoot
- Menu.rootPanel = luaRoot
- end
- function Menu.Start()
- InitData()
- RefreshUI()
- RegisterEvent()
- end
- function Menu.Update()
- CheckKeyDown()
- CheckMouseScroll()
- CheckGesture()
- end
- function Menu.OnDestroy()
- UnInitData()
- UnregisterEvent()
- CS.UnityEngine.GameObject.Destroy(Menu.rootPanel)
- end
- return Menu
|