头像昵称功能

This commit is contained in:
Fang 2023-06-14 18:31:09 +08:00
parent 29e2e33888
commit f3924368ce
18 changed files with 825 additions and 5 deletions

View File

@ -103,6 +103,9 @@ BIReport.ITEM_GET_TYPE = {
DUNGEON_SHARDS_CHALLENGE = "DungeonShardsChallenge", -- 碎片副本挑战
DUNGEON_SHARDS_END = "DungeonShardsEnd", -- 碎片副本结算
DUNGEON_SHARDS_SWEEP = "DungeonShardsSweep", -- 碎片副本扫荡
CHANGE_NAME = "ChangeName", -- 重命名
CHANGE_AVATAR = "ChangeAvatar", -- 修改头像
CHANGE_FRAME = "ChangeFrame", -- 修改头像框
}
BIReport.ADS_CLICK_TYPE = {

View File

@ -36,6 +36,9 @@ EventManager.CUSTOM_EVENT = {
CDKEY_FINISH = "CDKEY_FINISH", -- CDKEY
DUNGEON_CHALLENGE = "DUNGEON_CHALLENGE",-- 副本开始挑战
DUNGEON_SWEEP = "DUNGEON_SWEEP",-- 副本开始扫荡
PLAYER_INFO_CLICK_AVATAR = "PLAYER_INFO_CLICK_AVATAR",-- 个人信息选择头像
PLAYER_INFO_CLICK_FRAME = "PLAYER_INFO_CLICK_FRAME",-- 个人信息选择头像框
RENAME_SUCCESS = "RENAME_SUCCESS",-- 重命名成功
-- BORAD_TOUCH_BEGIN = "BORAD_TOUCH_BEGIN",
-- BORAD_TOUCH_OVER = "BORAD_TOUCH_OVER"
}

View File

@ -31,6 +31,7 @@ local LOCAL_DATA_KEY = {
GATE = "GATE",
BOUNTY_POP_TIME = "BOUNTY_POP_TIME",
CHALLENGE_TASK_POP_TIME = "CHALLENGE_TASK_POP_TIME",
NEW_AVATAR_AND_FRAME = "NEW_AVATAR_AND_FRAME",
SHOP_DISCOUNT_RED_POINT_TIME = "SHOP_DISCOUNT_RED_POINT_TIME",
}
@ -375,4 +376,21 @@ function LocalData:setShopDiscountRedPointTime(time)
self:setInt(LOCAL_DATA_KEY.SHOP_DISCOUNT_RED_POINT_TIME, time)
end
function LocalData:getNewAvatarAndFrame()
local info = json.decode(self:getString(LOCAL_DATA_KEY.NEW_AVATAR_AND_FRAME, "{}"))
-- Logger.logHighlight("获取新头像/头像框状态")
-- Logger.printTable(info)
return info
end
function LocalData:setNewAvatarAndFrame(info)
-- Logger.logHighlight("保存新头像/头像框状态")
-- Logger.printTable(info)
if not info then
return
end
local str = json.encode(info)
self:setString(LOCAL_DATA_KEY.NEW_AVATAR_AND_FRAME, str)
end
return LocalData

View File

@ -60,6 +60,8 @@ GConst.WAIT_NET_RSP_TIME = 8 -- 与服务器交互的等待回复时间
GConst.INVALID = -1
GConst.DEPTH_BUFFER = 24
GConst.NAME_MAX_LENTH = 12
GConst.EMPTY_STRING = ""
GConst.EMPTY_TABLE = {}
setmetatable(GConst.EMPTY_TABLE, {
@ -186,6 +188,7 @@ GConst.ATLAS_PATH = {
UI_LOGIN = "assets/arts/atlas/ui/login.asset",
ICON_SKILL = "assets/arts/atlas/icon/skill.asset",
ICON_SKILL_BIG = "assets/arts/atlas/icon/skill_big.asset",
ICON_AVATAR = "assets/arts/atlas/icon/avatar.asset",
ICON_HERO = "assets/arts/atlas/icon/hero.asset",
ICON_HERO_2 = "assets/arts/atlas/icon/hero_2.asset",
ICON_SKILL_ROGUE = "assets/arts/atlas/icon/skill_rogue.asset",
@ -592,6 +595,7 @@ end
GConst.ERROR_STR = {
SUCCESS = "SUCCESS",
NAME_HAS_EXISTED = "NAME_HAS_EXISTED",
}
return GConst

View File

@ -26,4 +26,53 @@ function PlayerManager:onLevelUpFinish(result)
end
end
-- 修改昵称
function PlayerManager:reqChangeNickname(changeName)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChangeNameReq, {name = changeName}, {}, self.respChangeNickname, BIReport.ITEM_GET_TYPE.CHANGE_NAME)
end
function PlayerManager:respChangeNickname(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.PlayerData:setNickname(result.reqData.name)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.RENAME_SUCCESS)
elseif result.err_code == GConst.ERROR_STR.NAME_HAS_EXISTED then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.CANNOT_RENAME_DESC_4))
end
end
-- 修改头像
function PlayerManager:reqChangeAvatar(changeId)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChangeAvatarReq, {id = changeId}, {}, self.respChangeAvatar, BIReport.ITEM_GET_TYPE.CHANGE_AVATAR)
end
function PlayerManager:respChangeAvatar(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.PlayerData:setAvatarUsing(result.reqData.id)
end
end
-- 修改头像框
function PlayerManager:reqChangeFrame(changeId)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChangeAvatarFrameReq, {id = changeId}, {}, self.respChangeFrame, BIReport.ITEM_GET_TYPE.CHANGE_FRAME)
end
function PlayerManager:respChangeFrame(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.PlayerData:setFrameUsing(result.reqData.id)
end
end
-- 检查解锁头像
function PlayerManager:checkUnlockAvatar(heroId)
local unlockIds = DataManager.PlayerData:getCanUnlockAvatarIds(heroId)
table.foreach(unlockIds, function (idx, id)
DataManager.PlayerData:setAvatarUnlock(id)
end)
end
-- 解锁头像框
function PlayerManager:unlockAvatarFrame(id)
-- 暂无解锁逻辑
end
return PlayerManager

View File

@ -1,10 +1,10 @@
local Component = require (GConst.TYPEOF_LUA_CLASS.LUA_COMPONENT)
local CurrencyBar = class("CurrencyBar", Component)
CurrencyBar.cellWidth = 174
CurrencyBar.cellWidth = 162
CurrencyBar.cellHeight = 40
local OFFSET_X = -27
local OFFSET_X = -20
local OFFSET_Y = -40
function CurrencyBar:init()

View File

@ -593,14 +593,34 @@ function MainCityUI:setSideBarVisible(visible)
end
function MainCityUI:initPlayerInfo()
self.playerSlider = self.uiMap["main_ui.player_node.slider"]
self.playerLvTx = self.uiMap["main_ui.player_node.lv"]
self.playerSlider = self.uiMap["main_ui.player_node.info.slider.img_prog"]
self.playerLvTx = self.uiMap["main_ui.player_node.info.slider.tx_lv"]
self.playerNameTx = self.uiMap["main_ui.player_node.info.tx_name"]
self.playerAvatarImg = self.uiMap["main_ui.player_node.avatar.img_avatar"]
self.playerFrameImg = self.uiMap["main_ui.player_node.avatar.img_frame"]
self.playerAvatar = self.uiMap["main_ui.player_node.avatar"]
self.uiMap["main_ui.player_node"]:addClickListener(function ()
UIManager:showUI("app/ui/player_info/player_info_ui")
end)
end
function MainCityUI:refreshPlayerInfo()
local lv = DataManager.PlayerData:getLv()
self.playerLvTx:setText(GConst.INT_TO_STRING[lv] or tostring(lv))
self.playerLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, lv))
self.playerSlider:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = DataManager.PlayerData:getExpPercent()
self.playerNameTx:setText(DataManager.PlayerData:getNickname())
self.playerAvatarImg:setSprite(GConst.ATLAS_PATH.ICON_HERO, DataManager.PlayerData:getAvatarIconId(DataManager.PlayerData:getUsingAvatarId()), function()
self.playerAvatarImg:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end)
self.playerFrameImg:setSprite(GConst.ATLAS_PATH.ICON_AVATAR, DataManager.PlayerData:getFrameIconId(DataManager.PlayerData:getUsingFrameId()), function()
self.playerFrameImg:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end)
if DataManager.PlayerData:hasNewAvatar() or DataManager.PlayerData:hasNewFrame() then
self.playerAvatar:addRedPoint(50, 50, 0.7)
else
self.playerAvatar:removeRedPoint()
end
end
function MainCityUI:initTopNode()

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f2be842a1b528e343b2ebc38a2c2ea26
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,35 @@
local AvatarCell = class("AvatarCell", BaseCell)
function AvatarCell:init()
self.uiMap = self:getUIMap()
self.imgAvatar = self.uiMap["avatar_cell.img_avatar"]
self.lock = self.uiMap["avatar_cell.lock"]
self.use = self.uiMap["avatar_cell.use"]
self.txUse = self.uiMap["avatar_cell.use.tx_use"]
self.select = self.uiMap["avatar_cell.select"]
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.ON_USING_DESC))
self:addClickListener(function()
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.PLAYER_INFO_CLICK_AVATAR, self.id)
end)
end
function AvatarCell:refresh(id, isSelect)
self.id = id
-- 红点
if DataManager.PlayerData:isNewAvatar(self.id) then
self.baseObject:addRedPoint(45, 45, 0.6)
else
self.baseObject:removeRedPoint()
end
self.select:setActive(isSelect)
self.imgAvatar:setSprite(GConst.ATLAS_PATH.ICON_HERO, DataManager.PlayerData:getAvatarIconId(self.id))
self.lock:setActive(not DataManager.PlayerData:isAvatarUnlock(self.id))
self.use:setActive(DataManager.PlayerData:getUsingAvatarId() == self.id)
end
return AvatarCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 54c0ca559bd35dd4793dae969f0cda92
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,35 @@
local FrameCell = class("FrameCell", BaseCell)
function FrameCell:init()
self.uiMap = self:getUIMap()
self.imgFrame = self.uiMap["frame_cell.img_frame"]
self.lock = self.uiMap["frame_cell.lock"]
self.use = self.uiMap["frame_cell.use"]
self.txUse = self.uiMap["frame_cell.use.tx_use"]
self.select = self.uiMap["frame_cell.select"]
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.ON_USING_DESC))
self:addClickListener(function()
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.PLAYER_INFO_CLICK_FRAME, self.id)
end)
end
function FrameCell:refresh(id, isSelect)
self.id = id
-- 红点
if DataManager.PlayerData:isNewFrame(self.id) then
self.baseObject:addRedPoint(45, 45, 0.6)
else
self.baseObject:removeRedPoint()
end
self.select:setActive(isSelect)
self.imgFrame:setSprite(GConst.ATLAS_PATH.ICON_AVATAR, DataManager.PlayerData:getFrameIconId(self.id))
self.lock:setActive(not DataManager.PlayerData:isFrameUnlock(self.id))
self.use:setActive(DataManager.PlayerData:getUsingFrameId() == self.id)
end
return FrameCell

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 9011185917b95e447b6962cc50a24452
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,238 @@
local PlayerInfoUI = class("PlayerInfoUI", BaseUI)
local TAG = {
AVATAR = 1,
FRAME = 2,
}
function PlayerInfoUI:isFullScreen()
return false
end
function PlayerInfoUI:getPrefabPath()
return "assets/prefabs/ui/player_info/player_info_ui.prefab"
end
function PlayerInfoUI:ctor()
self.selectAvatarId = DataManager.PlayerData:getUsingAvatarId()
self.selectFrameId = DataManager.PlayerData:getUsingFrameId()
end
function PlayerInfoUI:onCover()
end
function PlayerInfoUI:onReshow()
end
function PlayerInfoUI:onClose()
end
function PlayerInfoUI:onLoadRootComplete()
self.uiMap = self.root:genAllChildren()
self.txTitle = self.uiMap["player_info_ui.bg.title.tx_title"]
self.imgAvatar = self.uiMap["player_info_ui.bg.info.avatar.img_avatar"]
self.imgFrame = self.uiMap["player_info_ui.bg.info.avatar.img_frame"]
self.expProg = self.uiMap["player_info_ui.bg.info.exp.exp_prog"]
self.txLevel = self.uiMap["player_info_ui.bg.info.exp.level.tx_level"]
self.txName = self.uiMap["player_info_ui.bg.info.nickname.tx_name"]
self.btnRename = self.uiMap["player_info_ui.bg.info.nickname.btn_rename"]
self.tagAvatar = self.uiMap["player_info_ui.bg.list.tags.tag_avatar"]
self.selectAvatar = self.uiMap["player_info_ui.bg.list.tags.tag_avatar.select"]
self.txAvatar = self.uiMap["player_info_ui.bg.list.tags.tag_avatar.tx_avatar"]
self.txAvatarS = self.uiMap["player_info_ui.bg.list.tags.tag_avatar.select.tx_avatar_s"]
self.tagFrame = self.uiMap["player_info_ui.bg.list.tags.tag_frame"]
self.selectFrame = self.uiMap["player_info_ui.bg.list.tags.tag_frame.select"]
self.txFrame = self.uiMap["player_info_ui.bg.list.tags.tag_frame.tx_frame"]
self.txFrameS = self.uiMap["player_info_ui.bg.list.tags.tag_frame.select.tx_frame_s"]
self.scrollrectAvatar = self.uiMap["player_info_ui.bg.list.scrollrect_avatar"]
self.scrollrectFrame = self.uiMap["player_info_ui.bg.list.scrollrect_frame"]
self.txDesc = self.uiMap["player_info_ui.bg.tx_desc"]
self.btnUse = self.uiMap["player_info_ui.bg.btn_use"]
self.txUse = self.uiMap["player_info_ui.bg.btn_use.tx_use"]
self.btnClose = self.uiMap["player_info_ui.bg.btn_close"]
self.curTag = TAG.AVATAR
self.tagAvatar:addClickListener(function()
self:refreshScrollrect(TAG.AVATAR)
end)
self.tagFrame:addClickListener(function()
self:refreshScrollrect(TAG.FRAME)
end)
self.btnRename:addClickListener(function()
UIManager:showUI("app/ui/player_info/rename_ui")
self:closeUI()
end)
self.btnUse:addClickListener(function()
if self.curTag == TAG.AVATAR then
ModuleManager.PlayerManager:reqChangeAvatar(self.selectAvatarId)
elseif self.curTag == TAG.FRAME then
ModuleManager.PlayerManager:reqChangeFrame(self.selectFrameId)
end
end)
self.btnClose:addClickListener(function()
self:closeUI()
end)
self:addEventListener(EventManager.CUSTOM_EVENT.PLAYER_INFO_CLICK_AVATAR, function(id)
if self.selectAvatarId == id then
return
end
if DataManager.PlayerData:isNewAvatar(id) then
DataManager.PlayerData:setNewAvatarStatus(id, false)
end
self.selectAvatarId = id
self.scrollRectCompAvatar:updateAllCell()
self:refreshDesc()
end)
self:addEventListener(EventManager.CUSTOM_EVENT.PLAYER_INFO_CLICK_FRAME, function(id)
if self.selectFrameId == id then
return
end
if DataManager.PlayerData:isNewFrame(id) then
DataManager.PlayerData:setNewFrameStatus(id, false)
end
self.selectFrameId = id
self.scrollRectCompFrame:updateAllCell()
self:refreshDesc()
end)
self:bind(DataManager.PlayerData, "dirty", function()
self:onRefresh()
end)
end
function PlayerInfoUI:onRefresh()
self:refreshScrollrect()
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.PLAYER_INFO))
self.imgAvatar:setSprite(GConst.ATLAS_PATH.ICON_HERO, DataManager.PlayerData:getAvatarIconId(DataManager.PlayerData:getUsingAvatarId()))
self.imgFrame:setSprite(GConst.ATLAS_PATH.ICON_AVATAR, DataManager.PlayerData:getFrameIconId(DataManager.PlayerData:getUsingFrameId()))
local lv = DataManager.PlayerData:getLv()
local exp = DataManager.PlayerData:getExpPercent()
self.txLevel:setText(GConst.INT_TO_STRING[lv] or tostring(lv))
self.expProg:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = exp
self.txName:setText(DataManager.PlayerData:getNickname())
self.txAvatar:setText(I18N:getGlobalText(I18N.GlobalConst.AVATAR_HEAD_DESC))
self.txAvatarS:setText(I18N:getGlobalText(I18N.GlobalConst.AVATAR_HEAD_DESC))
self.txFrame:setText(I18N:getGlobalText(I18N.GlobalConst.AVATAR_HEAD_FRAME_DESC))
self.txFrameS:setText(I18N:getGlobalText(I18N.GlobalConst.AVATAR_HEAD_FRAME_DESC))
-- 红点
if DataManager.PlayerData:hasNewAvatar() then
self.tagAvatar:addRedPoint(120, 20, 0.6)
else
self.tagAvatar:removeRedPoint()
end
if DataManager.PlayerData:hasNewFrame() then
self.tagFrame:addRedPoint(120, 20, 0.6)
else
self.tagFrame:removeRedPoint()
end
end
function PlayerInfoUI:refreshScrollrect(selectTag)
if selectTag ~= nil then
self.curTag = selectTag
end
if self.curTag == TAG.AVATAR then
self:showAvatar()
elseif self.curTag == TAG.FRAME then
self:showFrame()
end
end
-- 显示头像列表
function PlayerInfoUI:showAvatar()
self.ids = DataManager.PlayerData:getShowAvatarIds()
self.selectAvatar:setActive(true)
self.scrollrectAvatar:setActive(true)
self.selectFrame:setActive(false)
self.scrollrectFrame:setActive(false)
if self.scrollRectCompAvatar == nil then
self.scrollRectCompAvatar = self.scrollrectAvatar:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRectCompAvatar:addInitCallback(function()
return "app/ui/player_info/avatar_cell"
end)
self.scrollRectCompAvatar:addRefreshCallback(function(index, cell)
cell:refresh(self.ids[index], self.ids[index] == self.selectAvatarId)
end)
self.scrollRectCompAvatar:clearCells()
self.scrollRectCompAvatar:refillCells(#self.ids)
else
self.scrollRectCompAvatar:updateAllCell()
end
self:refreshDesc()
end
-- 显示框列表
function PlayerInfoUI:showFrame()
self.ids = DataManager.PlayerData:getShowFrameIds()
self.selectAvatar:setActive(false)
self.scrollrectAvatar:setActive(false)
self.selectFrame:setActive(true)
self.scrollrectFrame:setActive(true)
if self.scrollRectCompFrame == nil then
self.scrollRectCompFrame = self.scrollrectFrame:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRectCompFrame:addInitCallback(function()
return "app/ui/player_info/frame_cell"
end)
self.scrollRectCompFrame:addRefreshCallback(function(index, cell)
cell:refresh(self.ids[index], self.ids[index] == self.selectFrameId)
end)
self.scrollRectCompFrame:clearCells()
self.scrollRectCompFrame:refillCells(#self.ids)
else
self.scrollRectCompFrame:updateAllCell()
end
self:refreshDesc()
end
-- 刷新描述
function PlayerInfoUI:refreshDesc()
if self.curTag == TAG.AVATAR then
self.txDesc:setText(DataManager.PlayerData:getAvatarDesc(self.selectAvatarId))
if DataManager.PlayerData:isAvatarUnlock(self.selectAvatarId) and DataManager.PlayerData:getUsingAvatarId() ~= self.selectAvatarId then
-- 已解锁,未使用
self.btnUse:setTouchEnable(true)
self.btnUse:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_green_1")
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_8))
else
self.btnUse:setTouchEnable(false)
self.btnUse:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_grey_1")
if DataManager.PlayerData:getUsingAvatarId() == self.selectAvatarId then
-- 已解锁,已使用
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.ON_USING_DESC))
else
-- 未解锁
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_7))
end
end
elseif self.curTag == TAG.FRAME then
self.txDesc:setText(DataManager.PlayerData:getFrameDesc(self.selectFrameId))
if DataManager.PlayerData:isAvatarUnlock(self.selectFrameId) and DataManager.PlayerData:getUsingFrameId() ~= self.selectFrameId then
-- 已解锁,未使用
self.btnUse:setTouchEnable(true)
self.btnUse:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_green_1")
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_8))
else
self.btnUse:setTouchEnable(false)
self.btnUse:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_grey_1")
if DataManager.PlayerData:getUsingFrameId() == self.selectFrameId then
-- 已解锁,已使用
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.ON_USING_DESC))
else
-- 未解锁
self.txUse:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_7))
end
end
end
end
return PlayerInfoUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 679d5350053753147927126ec528fd90
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -0,0 +1,109 @@
local RenameUI = class("RenameUI", BaseUI)
function RenameUI:isFullScreen()
return false
end
function RenameUI:getPrefabPath()
return "assets/prefabs/ui/player_info/rename_ui.prefab"
end
function RenameUI:ctor()
end
function RenameUI:onCover()
end
function RenameUI:onReshow()
end
function RenameUI:onClose()
end
function RenameUI:onLoadRootComplete()
self.uiMap = self.root:genAllChildren()
self.txTitle = self.uiMap["rename_ui.bg.title.tx_title"]
self.txDesc = self.uiMap["rename_ui.bg.tx_desc"]
self.input = self.uiMap["rename_ui.bg.input"]
self.txTips = self.uiMap["rename_ui.bg.group.tx_tips"]
self.btnOk = self.uiMap["rename_ui.bg.group.btn_ok"]
self.iconCost = self.uiMap["rename_ui.bg.group.btn_ok.icon"]
self.txConst = self.uiMap["rename_ui.bg.group.btn_ok.tx_const"]
self.txFree = self.uiMap["rename_ui.bg.group.btn_ok.tx_free"]
self.closeBtn = self.uiMap["rename_ui.bg.close_btn"]
self.inputField = self.input:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TMP_INPUT_FIELD)
self.inputField.text = ""
self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.RENAME_DESC))
self.txDesc:setText(I18N:getGlobalText(I18N.GlobalConst.ENTER_NAME_DESC))
if DataManager.PlayerData:isFreeRename() then
self.txTips:setActive(true)
self.txFree:setActive(true)
self.iconCost:setActive(false)
self.txConst:setActive(false)
self.txTips:setText(I18N:getGlobalText(I18N.GlobalConst.FREE_THIS_TIME_DESC))
self.txFree:setText(I18N:getGlobalText(I18N.GlobalConst.STR_FREE))
else
local const = DataManager.PlayerData:getRenameCost()
self.constId = GFunc.getRewardId(const)
self.constType = GFunc.getRewardType(const)
self.constNum = GFunc.getRewardNum(const)
self.txTips:setActive(false)
self.txFree:setActive(false)
self.iconCost:setActive(true)
self.txConst:setActive(true)
self.iconCost:setSprite(GFunc.getRewardIconRes(self.constType, self.constId))
if not GFunc.checkCost(self.constId, self.constNum) then
-- 不满足
self.btnOk:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_grey_1")
self.txConst:setText("<color=#ff3434>x" .. self.constNum .. "</color>")
else
self.btnOk:setSprite(GConst.ATLAS_PATH.COMMON, "common_btn_green_1")
self.txConst:setText("x" .. self.constNum)
end
GFunc.centerImgAndTx(self.iconCost, self.txConst)
end
self.btnOk:addClickListener(function ()
if self.constId ~= nil and self.constNum ~= nil and not GFunc.checkCost(self.constId, self.constNum, true) then
return
end
self:onRename()
end)
self.closeBtn:addClickListener(function ()
UIManager:showUI("app/ui/player_info/player_info_ui")
self:closeUI()
end)
self:addEventListener(EventManager.CUSTOM_EVENT.RENAME_SUCCESS, function()
UIManager:showUI("app/ui/player_info/player_info_ui")
self:closeUI()
end)
end
function RenameUI:onRefresh()
end
function RenameUI:onRename()
local input = self.inputField.text
if #input == 0 or GFunc.getIsAllSpaceStr(input) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.CANNOT_RENAME_DESC_1))
return
end
if GFunc.getTextLen2(input) > GConst.NAME_MAX_LENTH then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.CANNOT_RENAME_DESC_2))
return
end
if CS.XLua.Utils.IsSpecialChar(input) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.CANNOT_RENAME_DESC_3))
return
end
ModuleManager.PlayerManager:reqChangeNickname(input)
end
return RenameUI

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 91317e38be4ffd243aac5e8edc191395
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -116,6 +116,7 @@ function HeroData:setHeroLv(id, lv)
if not entity:isActived() then
self.data.activeCount = self.data.activeCount + 1
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_NEW_HERO_GOT)
ModuleManager.PlayerManager:checkUnlockAvatar(id)
activeBefore = false
end
entity:setLv(lv)

View File

@ -27,6 +27,16 @@ function PlayerData:init(data)
end
end
if self.data.playInfo == nil then
self.data.playInfo = {}
end
self.data.playInfo.nickName = basicInfo.name
self.data.playInfo.nameChanged = basicInfo.name_changed
self.data.playInfo.usingAvatarId = basicInfo.avatar
self.data.playInfo.usingFrameId = basicInfo.avatar_frame
self.data.playInfo.unlockAvatar = data.bag.avatars
self.data.playInfo.unlockFrame = data.bag.avatar_frames
local energyLimit = data.energy_limit or GConst.EMPTY_TABLE
self.data.vitGemCount = energyLimit.diamond_count or 0
self.data.vitADCount = energyLimit.ad_count or 0
@ -215,4 +225,251 @@ function PlayerData:checkIfCanShowModuleUnlock(chapterId)
self.showModuleUnlockChapter = chapterId
end
-- 头像------------------------------------------------------------------------------------
-- 获取玩家昵称
function PlayerData:getNickname()
if self.data.playInfo.nickName == nil or #self.data.playInfo.nickName == 0 then
self.data.playInfo.nickName = I18N:getGlobalText(I18N.GlobalConst.NEW_PLAYER)
end
return self.data.playInfo.nickName
end
-- 设置玩家昵称
function PlayerData:setNickname(name)
self.data.playInfo.nickName = name
self:markDirty()
end
-- 是否可以免费修改昵称
function PlayerData:isFreeRename()
return not self.data.playInfo.nameChanged
end
-- 获取修改昵称的花费
function PlayerData:getRenameCost()
return GFunc.getConstReward("change_name_cost")
end
-- 头像------------------------------------------------------------------------------------
-- 获取玩家当前使用的头像
function PlayerData:getUsingAvatarId()
return self.data.playInfo.usingAvatarId
end
-- 设置玩家使用的头像
function PlayerData:setAvatarUsing(id)
self.data.playInfo.usingAvatarId = id
self.data.playInfo.nameChanged = true
self:markDirty()
end
-- 获取头像icon id
function PlayerData:getAvatarIconId(id)
return ConfigManager:getConfig("avatar")[id].iconId
end
-- 头像是否解锁
function PlayerData:isAvatarUnlock(id)
if self.data.playInfo.unlockAvatar == nil then
return false
end
return self.data.playInfo.unlockAvatar[id] ~= nil
end
-- 设置头像解锁
function PlayerData:setAvatarUnlock(id)
Logger.logHighlight("解锁头像:"..id)
if self.data.playInfo.unlockAvatar == nil then
self.data.playInfo.unlockAvatar = {}
end
self.data.playInfo.unlockAvatar[id] = Time:getServerTime()
self:setNewAvatarStatus(id, true)
end
-- 获取头像描述
function PlayerData:getAvatarDesc(id)
return I18N:getText("avatar", id, "desc")
end
-- 是否有新头像
function PlayerData:hasNewAvatar()
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.avatar == nil or #newIds.avatar == 0 then
return false
end
return true
end
-- 是否是新头像
function PlayerData:isNewAvatar(id)
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.avatar ~= nil then
return table.containValue(newIds.avatar, id)
end
return false
end
-- 设置新头像状态
function PlayerData:setNewAvatarStatus(id, isNew)
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.avatar == nil then
newIds.avatar = {}
end
if isNew then
table.insert(newIds.avatar, id)
else
table.removebyvalue(newIds.avatar, id, true)
end
LocalData:setNewAvatarAndFrame(newIds)
self:markDirty()
end
-- 是否显示头像(已解锁+未解锁可显示)
function PlayerData:isShowAvatar(id)
if self:isAvatarUnlock(id) then
return true
end
-- 判断未解锁时是否显示
return not ConfigManager:getConfig("avatar")[id].unlock_show
end
-- 获取可以显示的所有头像id
function PlayerData:getShowAvatarIds()
local unlockIds = table.keys(self.data.playInfo.unlockAvatar)
local lockIds = {}
for id, data in pairs(ConfigManager:getConfig("avatar")) do
if (not self:isAvatarUnlock(id)) and self:isShowAvatar(id) then
table.insert(lockIds, id)
end
end
table.sort(unlockIds, function(a, b)
return a < b
end)
table.sort(lockIds, function(a, b)
return a < b
end)
return table.addArray(unlockIds, lockIds)
end
-- 获取可解锁的头像id列表
function PlayerData:getCanUnlockAvatarIds(heroId)
local ids = {}
for id, data in pairs(ConfigManager:getConfig("avatar")) do
if not self:isAvatarUnlock(id) and data.hero == heroId then
table.insert(ids, id)
end
end
return ids
end
-- 头像框-----------------------------------------------------------------------------------
-- 获取玩家当前使用的头像框
function PlayerData:getUsingFrameId()
return self.data.playInfo.usingFrameId
end
-- 设置玩家使用的头像框
function PlayerData:setFrameUsing(id)
self.data.playInfo.usingFrameId = id
self:markDirty()
end
-- 获取框icon id
function PlayerData:getFrameIconId(id)
return ConfigManager:getConfig("avatar_frame")[id].iconId
end
-- 头像框是否解锁
function PlayerData:isFrameUnlock(id)
if self.data.playInfo.unlockFrame == nil then
return false
end
return self.data.playInfo.unlockFrame[id] ~= nil
end
-- 设置头像框解锁
function PlayerData:setFrameUnlock(id)
Logger.logHighlight("解锁头像框:"..id)
if self.data.playInfo.unlockFrame == nil then
self.data.playInfo.unlockFrame = {}
end
self.data.playInfo.unlockFrame[id] = Time:getServerTime()
self:setNewFrameStatus(id, true)
end
-- 获取头像框描述
function PlayerData:getFrameDesc(id)
return I18N:getText("avatar_frame", id, "desc")
end
-- 是否有新头像框
function PlayerData:hasNewFrame()
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.frame == nil or #newIds.frame == 0 then
return false
end
return true
end
-- 是否是新头像框
function PlayerData:isNewFrame(id)
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.frame ~= nil then
return table.containValue(newIds.frame, id)
end
return false
end
-- 设置新头像框状态
function PlayerData:setNewFrameStatus(id, isNew)
local newIds = LocalData:getNewAvatarAndFrame()
if newIds.frame == nil then
newIds.frame = {}
end
if isNew then
table.insert(newIds.frame, id)
else
table.removebyvalue(newIds.frame, id, true)
end
LocalData:setNewAvatarAndFrame(newIds)
self:markDirty()
end
-- 是否显示头像框(已解锁+未解锁可显示)
function PlayerData:isShowFrame(id)
if self:isFrameUnlock(id) then
return true
end
-- 判断未解锁时是否显示
local lock_show = ConfigManager:getConfig("avatar_frame")[id].unlock_show
if lock_show ~= nil then
return not lock_show
else
return true
end
end
-- 获取可以显示的所有头像框id(已解锁小id>已解锁大id>未解锁小id>未解锁大id)
function PlayerData:getShowFrameIds()
local unlockIds = table.keys(self.data.playInfo.unlockFrame)
local lockIds = {}
for id, data in pairs(ConfigManager:getConfig("avatar_frame")) do
if (not self:isFrameUnlock(id)) and self:isShowFrame(id) then
table.insert(lockIds, id)
end
end
table.sort(unlockIds, function(a, b)
return a < b
end)
table.sort(lockIds, function(a, b)
return a < b
end)
return table.addArray(unlockIds, lockIds)
end
return PlayerData