源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

378 lines
12 KiB

StarMapView = StarMapView or BaseClass(BaseView)
function StarMapView:__init()
self.base_file = "starMap"
self.layout_file = "StarMapView"
self.layer_name = "UI"
self.close_mode = CloseMode.CloseDestroy
self.destroy_imm = true
self.use_background = true
self.append_to_ctl_queue = true
self.starMap_data = nil
self.star_point_list = {}
self.star_line_list = {}
self.prop_item_list = {}
self.select_index = 0
self.is_max = false
self.model = StarMapModel:getInstance()
self.load_callback = function()
self:LoadSuccess()
self:InitEvent()
end
self.open_callback = function()
self.model:Fire(StarMapModel.REQUEST_STAR_MAP_DATA)
local function load_end_func( )
self:SetGameObjectDepth(self.fight_con)
end
self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,4,0),0.8, true,nil,nil,nil,load_end_func)
end
self.close_callback = function( )
GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK)
GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW)
end
self.destroy_callback = function()
self:Remove()
end
end
function StarMapView:Remove()
if self.update_starmap_data_event_id then
self.model:UnBind(self.update_starmap_data_event_id)
self.update_starmap_data_event_id = nil
end
if self.click_point_item_event_id then
self.model:UnBind(self.click_point_item_event_id)
self.click_point_item_event_id = nil
end
if self.update_star_power_event_id then
self.model:UnBind(self.update_star_power_event_id)
self.update_star_power_event_id = nil
end
for k,v in pairs(self.star_point_list) do
v:DeleteMe()
v = nil
end
self.star_point_list = {}
for k,v in pairs(self.star_line_list) do
v:DeleteMe()
v = nil
end
self.star_line_list = {}
for k,v in pairs(self.prop_item_list) do
v:DeleteMe()
v = nil
end
self.prop_item_list = {}
end
function StarMapView:LoadSuccess()
self.close_btn = self:GetChild("windowCloseBtn").gameObject
self.level_btn = self:GetChild("item_con/levelBtn").gameObject
self.point_con = self:GetChild("item_con/point_con")
self.line_con = self:GetChild("item_con/line_con")
self.bg = self:GetChild("item_con/bg"):GetComponent("Image")
self.star_bg = self:GetChild("item_con/star_bg"):GetComponent("Image")
self.combat = self:GetChild("fight_con/value"):GetComponent("Text")
self.fight_effect = self:GetChild("fight_effect")
self.fight_con = self:GetChild("fight_con").gameObject
self.name = self:GetChild("item_con/name_bg/name"):GetComponent("Text")
self.prop_con = self:GetChild("prop/Group")
self.need_num = self:GetChild("upgrate/need/num/value"):GetComponent("Text")
self.have_num = self:GetChild("upgrate/have/num/value"):GetComponent("Text")
self.help_btn = self:GetChild("help_btn").gameObject
self.upgrate_btn = self:GetChild("upgrateBtn").gameObject
self.upgrate_img = self:GetChild("upgrateBtn"):GetComponent("ImageExtend")
self.upgrate_label = self:GetChild("upgrateBtn/Text"):GetComponent("Text")
self.red_point = self:GetChild("upgrateBtn/redpoint").gameObject
self.tip = self:GetChild("tip").gameObject
self.tip_bg = self:GetChild("tip/ac_bg").gameObject
self.effect = self:GetChild("effect")
self.point_tip = self:GetChild("item_con/tip").gameObject
self.point_tip_bg = self:GetChild("item_con/tip/bg")
self.point_tip_value = self:GetChild("item_con/tip/value"):GetComponent("Text")
lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bg_starMap.jpg"),false)
self.touch = self:GetChild("touch").gameObject
end
function StarMapView:InitEvent()
local function onClickHandler(target,x,y)
if target == help_btn or target == self.tip_bg or target == self.upgrate_btn or self.level_btn or self.touch then
if self.select_index > 0 then
self.star_point_list[self.select_index]:SetSelect(false)
self.select_index = 0
self:SetPointTip(false)
end
end
if target == self.close_btn then
self:Close()
elseif target == self.help_btn then
self.tip:SetActive(true)
elseif target == self.tip_bg then
self.tip:SetActive(false)
elseif target == self.upgrate_btn then
self:ToUpgrate()
elseif target == self.level_btn then
local id = self.starMap_data.star_map_id
self.model:Fire(StarMapModel.OPEN_STAGE_VIEW,id,x,y)
end
end
AddClickEvent(self.close_btn,onClickHandler)
AddClickEvent(self.help_btn,onClickHandler)
AddClickEvent(self.tip_bg,onClickHandler)
AddClickEvent(self.upgrate_btn,onClickHandler)
AddClickEvent(self.level_btn,onClickHandler)
AddClickEvent(self.touch,onClickHandler)
local function onUpdateData(data)
if data == nil then return end
self:UpdateJinjie(self.starMap_data,data)
self.starMap_data = data
self:UpdateView()
self:UpdateStarLine()
self:UpdateStarPoint()
self:UpdatePropData()
self:UpdateRedPoint()
end
self.update_starmap_data_event_id = self.model:Bind(StarMapModel.UPDATE_STAR_MAP_DATA,onUpdateData)
local function onClickPoint(index,id)
if index == self.select_index then
self.star_point_list[index]:SetSelect(false)
self.select_index = 0
self:SetPointTip(false)
else
if self.select_index > 0 then
self.star_point_list[self.select_index]:SetSelect(false)
end
self.select_index = index
self.star_point_list[self.select_index]:SetSelect(true)
self:SetPointTip(true,index,id)
end
end
self.click_point_item_event_id = self.model:Bind(StarMapModel.CLICK_POINT_ITEM,onClickPoint)
local function onUpdateStarPower()
self:SetStarPower()
self:UpdateRedPoint()
end
self.update_star_power_event_id = self.model:Bind(StarMapModel.UPDATE_RED_POINT,onUpdateStarPower)
end
-- 是否进阶,进阶则播放特效
function StarMapView:UpdateJinjie(old_data,new_data)
if old_data == nil or new_data == nil then return end
local old_cfg = Config.Starmap[old_data.star_map_id+1]
local new_cfg = Config.Starmap[new_data.star_map_id+1]
if old_cfg == nil or new_cfg == nil then return end
if new_cfg.class_id > old_cfg.class_id or new_cfg.cons_id > old_cfg.cons_id then
self:AddUIEffect("UI_jinjiechenggong", self.effect,self.layer_name, nil, nil, false)
end
end
-- 更新界面信息
function StarMapView:UpdateView()
local data = self.model:GetStarMapData(self.starMap_data.star_map_id)
if data == nil then return end
lua_resM:setOutsideImageSprite(self,self.star_bg,GameResPath.GetStarMapImage("starMap_"..data.cons_id),false)
self:SetStarPower()
end
-- 星力信息
function StarMapView:SetStarPower()
local data = self.model:GetStarMapData(self.starMap_data.star_map_id)
if data == nil then return end
local next_cosume = self.model:GetStarPointCosume(self.starMap_data.star_map_id + 1)
local colorStr = ColorUtil.WHITE
if next_cosume == nil then
self.need_num.text = "已满级"
self.upgrate_img.gray = true
self.upgrate_label.text = "已满级"
self.is_max = true
else
self.need_num.text = next_cosume
colorStr = self.starMap_data.star_power >= next_cosume and ColorUtil.WHITE or ColorUtil.RED
end
self.have_num.text = string.format("<color=%s>%s</color>",colorStr,self.starMap_data.star_power)
self.name.text = Trim(data.cons_name).."·"..Language.getChineseTxt(data.class_id)..""
end
-- 更新星点连线信息
function StarMapView:UpdateStarLine()
local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id)
if point_list == nil then return end
local len = #point_list -1 -- 线比点数量少1
local item
if #self.star_line_list < len then
local add_mount = len - #self.star_line_list
for i = 1,add_mount do
item = StarLineItem.New(self.line_con)
table.insert(self.star_line_list,item)
end
elseif #self.star_line_list > len then
local reduce_mount = #self.star_line_list - len
for i = #self.star_line_list - reduce_mount + 1,#self.star_line_list do
item = self.star_line_list[i]
item:SetVisible(false)
end
end
if len > 0 then
for i = 1,len do
item = self.star_line_list[i]
item:SetData(point_list[i])
if point_list[i].star_map_id < self.starMap_data.star_map_id then
item:SetLight(true)
else
item:SetLight(false)
end
end
end
end
-- 更新星点信息
function StarMapView:UpdateStarPoint()
local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id)
if point_list == nil then return end
local len = #point_list
local item
if #self.star_point_list < len then
local add_mount = len - #self.star_point_list
for i = 1,add_mount do
item = StarPointItem.New(self.point_con)
item:SetVisible(false)
table.insert(self.star_point_list,item)
end
elseif #self.star_point_list > len then
local reduce_mount = #self.star_point_list - len
for i = #self.star_point_list - reduce_mount + 1,#self.star_point_list do
item = self.star_point_list[i]
item:SetVisible(false)
end
end
if len > 0 then
for i = 1,len do
item = self.star_point_list[i]
item:SetData(point_list[i])
item:SetVisible(true)
if point_list[i].star_map_id <= self.starMap_data.star_map_id then
item:SetLight(true)
item:SetIsNext(false)
elseif point_list[i].star_map_id == self.starMap_data.star_map_id + 1 then
item:SetLight(false)
item:SetIsNext(true)
else
item:SetLight(false)
item:SetIsNext(false)
end
end
end
end
-- 更新属性信息
function StarMapView:UpdatePropData()
local prop_list = self.starMap_data.attr
table.sort(prop_list,function(a,b) return a.attr_type < b.attr_type end)
local next_list = self.model:GetStarPointProp(self.starMap_data.star_map_id + 1)
local len = #prop_list
if #self.prop_item_list < len then
local item = nil
local add_mount = len - #self.prop_item_list
for i = 1,add_mount do
item = StarMapPropItem.New(self.prop_con)
table.insert(self.prop_item_list,item)
end
elseif #self.prop_item_list > len then
local reduce_mount = #self.prop_item_list - len
for i = #self.prop_item_list - reduce_mount + 1,#self.prop_item_list do
item = self.prop_item_list[i]
item:SetVisible(false)
end
end
if len > 0 then
for i = 1,len do
local next_val = 0
item = self.prop_item_list[i]
-- 检查是否有需要显示增加值
if next_list ~= nil then
next_val = 0
for j = 1,#next_list do
if tonumber(next_list[j][1]) == prop_list[i].attr_type then
next_val = tonumber(next_list[j][2])
end
end
end
item:SetData(prop_list[i],next_val,i)
end
end
self.combat.text = self.model:GetCombat(prop_list)
end
-- 星点的属性tip
function StarMapView:SetPointTip(bool,index,id)
if bool == true then
local attr_list = self.model:GetStarPointProp(id)
local str = ""
local width = self.point_tip_bg.sizeDelta.x
if #attr_list >0 then
local endStr = ""
local attr_name = ""
local attr_value = ""
for i = 1,#attr_list do
if i == #attr_list then
endStr = ""
else
endStr = "\n"
end
attr_name = WordManager:GetProperties(tonumber(attr_list[i][1]))
attr_value = string.format("<color=%s> + %s</color>",ColorUtil.GREEN,WordManager:GetPropertyValue(tonumber(attr_list[i][1]),tonumber(attr_list[i][2])))
str = str .. attr_name..attr_value..endStr
end
end
self.point_tip_value.text = str
self.point_tip_bg.sizeDelta = Vector2(width,self.point_tip_value.preferredHeight + 30)
self.point_tip:SetActive(true)
local pos = self.star_point_list[index].transform.localPosition
self.point_tip.transform.localPosition = Vector3(pos.x+175,pos.y)
self.point_tip.transform:SetAsLastSibling()
else
self.point_tip:SetActive(false)
end
end
-- 星图升阶
function StarMapView:ToUpgrate()
if self.is_max == false then
local light_id = self.starMap_data.star_map_id + 1
self.model:Fire(StarMapModel.LIGHT_STAR_POINT,light_id)
self.point_tip:SetActive(false)
else
Message.show("星图已升阶到最高级!")
end
end
function StarMapView:UpdateRedPoint()
self.red_point:SetActive(self.model:HaveRedPoint())
end