源战役客户端
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.
 
 
 
 
 

1068 lines
39 KiB

EmpowerGridWalkView = EmpowerGridWalkView or BaseClass(BaseView)
local EmpowerGridWalkView = EmpowerGridWalkView
local FloatAnimType = {
UP = 1,
DOWN = 2,
DOWN_AND_UP = 3,
}
function EmpowerGridWalkView:__init()
self.base_file = "empower"
self.layout_file = "EmpowerGridWalkView"
self.layer_name = "UI"
self.use_background = true
self.hide_maincancas = true
--self.close_mode = CloseMode.CloseDestroy
--self.destroy_imm = true
--self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
self.is_set_zdepth = false
self.append_to_ctl_queue = true --是否要添加进界面堆栈
--self.model = EmpowerModel:GetInstance()
--self.goods_model = GoodsModel:getInstance()
--self.mainVo = RoleManager.Instance.mainRoleInfo
self.model = EmpowerModel:GetInstance()
self.max_grid_num = Config.Latticekv["max_lattice_step"].val
self.coupon_id = Config.Latticekv["coupon_id"].val
self.reward_items = {}
self.model:SetIsShowingGameView(true)
self.item_pool = {} -- 双倍特效缓存池
self.box_list = {} -- 奖励池
self.box_float_anim_state = {} -- 地板浮动动画状态
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function EmpowerGridWalkView:Open( )
BaseView.Open(self)
end
function EmpowerGridWalkView:AddEvent( )
local on_click = function ( click_obj )
if self.throw_die_obj == click_obj or self.dice_obj == click_obj then
self:StartThrowDie()
-- elseif self.shop_obj == click_obj then
-- self.model:Fire(EmpowerConst.OPEN_SHOP_BASE_VIEW,true,1)
elseif self.equip_obj == click_obj then
--local new_pos = self.fly_con:InverseTransformPoint(Vector3(0,0,0))
--self:FlyAwardItemToBag(270013, new_pos)
self:Close()
OpenFun.Open(152, 5)
elseif self.treasure_obj == click_obj then
self.model:Fire(EmpowerConst.OPEN_SHOP_BASE_VIEW,true,1)
elseif self.use_goods_obj == click_obj then
self:UpdateInfo()
elseif self.close_obj == click_obj then
self:Close()
elseif self.question_btn_obj == click_obj then
EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 41401)
end
end
AddClickEvent(self.close_obj, on_click)
AddClickEvent(self.throw_die_obj, on_click)
AddClickEvent(self.dice_obj, on_click)
AddClickEvent(self.equip_obj, on_click)
AddClickEvent(self.shop_obj, on_click)
AddClickEvent(self.treasure_obj, on_click)
AddClickEvent(self.use_goods_obj, on_click)
AddClickEvent(self.question_btn_obj, on_click)
self.on_grid_game_info_changed_id = self.model:BindOne("grid_game_info", function()
self:UpdateView()
end)
local on_bag_change = function( )
self:UpdateGoodsNum()
end
if not self.on_bag_change then
self.on_bag_change = GoodsModel:getInstance():Bind(GoodsModel.CHANGE_BAGLIST, on_bag_change)
end
local function on_ans_update_red_dot( )
self:UpdateEmpowerShopRedDot()
end
self.on_ans_update_red_dot_id = self.model:Bind(EmpowerConst.EMPOWER_SHOP_RED_DOT, on_ans_update_red_dot)
local function onInfoUpdate_func()
print("============>>> YiRan:EmpowerGridWalkView [start:80] :")
end
self.EMGRIDWALK_INFO_ID = self.model:Bind(EmpowerConst.UPDATA_EMGRIDWALK_INFO,onInfoUpdate_func)
local function onInfoUpdate_func_41410(scmd)
if scmd.res == 1 then
local time_wait = 1
local is_turn_fast = self.get_fast_tog.isOn
if is_turn_fast then
--Message.show("fast") --加速直接给结果
lua_resM:setImageSprite(self,self.dice_img, "empower_asset", "gridwalk_dice_"..scmd.walk)
time_wait = 0.05
else
--Message.show("slow") -- 不加速就播放图片
self:PlayDiceAnimate(scmd.walk) --下为等待骰子后人物走动动画表现
end
self.delayMoveCom = self.delayMoveCom or self:AddUIComponent(UI.Countdown)
self.delayMoveCom:DelayCallByLeftTime(time_wait, function()
self:StartMoveGrid(scmd.new_step-scmd.walk, scmd.new_step)
end)
else
self.lock_throw_die = false
end
--end
end
self.EMGRIDWALK_INFO_41410_ID = self.model:Bind(EmpowerConst.UPDATA_EMGRIDWALK_INFO41410,onInfoUpdate_func_41410)
local function onRESET_EMGRIDWALK_SUCCESS_func()
self.had_updated_items = false
self:ResSetAnimation()
self:InitWayPoint(true)
self:ResetRolePos()
self:UpdateView()
end
self.RESET_EMGRIDWALK_SUCCESS_ID = self.model:Bind(EmpowerConst.RESET_EMGRIDWALK_SUCCESS,onRESET_EMGRIDWALK_SUCCESS_func)
end
function EmpowerGridWalkView:LoadSuccess()
self.nodes = {
"throw_die:obj:img","role_con","grid_con:obj","close:obj",
"use_goods:tog:obj","grid_con/big_reward_scroll","grid_con/big_reward_scroll/Viewport/big_reward_con",
"shop:obj","award_scroll","dice:img:obj","equip:obj","award_scroll/Viewport/award_con",
"treasure:obj",
"has_goods_num:tmp","fly_con","free_num_word:tmp","shop_red:obj","throw_red:obj",
"dice_con:obj","reset_num:tmp","bg:img:raw",
"throw_die/throw_die_txt:tmp", "con_money",
"get_fast:tog:obj",
"question_btn:obj", "img_money:obj", "bg/doule_txt:obj",
"resetCon:obj", "resetCon/grid_walk_reset_bg:raw", "resetCon/reset_item_con",
---------------------------------------------
"effectCon:obj", -- 特效挂点
"throw_die/pic_throw_die_start:obj", "throw_die/pic_throw_die_reset:obj",
}
self:GetChildren(self.nodes)
self.dice_con_obj:SetActive(false)
self.get_fast_tog.isOn = false -- 默认不加速
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("grid_walk_bg_1560_720"),false)
lua_resM:setOutsideRawImage(self, self.grid_walk_reset_bg_raw, GameResPath.GetEmpowerIcon("grid_walk_reset1_1278_89"), false)
SetAnchoredPositionX(self.dice_con, -160)
SetAnchoredPositionX(self.big_reward_scroll, 125)
local function bg_back_func( ... )
if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
end
self:MoveUIToBack(self.bg_raw)
end
if self.background_wnd then
bg_back_func()
else
self.bg_back_func = bg_back_func
end
self:InitWayPoint()
self:InitRoleModel()
self:InitShowRewards()
end
function EmpowerGridWalkView:OpenSuccess()
--local select_callback = function(index)
--end
self:UpdateView()
if not self.money_view then
self.money_view = UIMoneyView.New(self.con_money)
end
self.money_view:SetPosition(0,0)
self.money_view:SetData()
self.money_view:ChangeShowFlag("smallWindow2")
end
function EmpowerGridWalkView:InitShowRewards( )
self.show_award_items_com = self.show_award_items_com or self:AddUIComponent(UI.ItemListCreator)
local award_list = stringtotable(Config.Latticekv["lattice_rewards_show"].val)
local info = {
data_list = award_list,
item_con = self.award_con,
scroll_view = self.award_scroll,
obj_pool_type = UIObjPool.UIType.AwardItem,
start_y = -5,
start_x = 5,
item_width = 62,
space_x = 7,
--alignment = UnityEngine.TextAnchor.UpperCenter,
on_update_item = function(item, i, v)
item:SetData(v[2], v[3])
end,
}
self.show_award_items_com:UpdateItems(info)
end
function EmpowerGridWalkView:InitWayPoint(isReset)
if isReset then
self.model.gridWalkRandomNum = math.random(1, #EmpowerConst.GridWalkDicePos)
end
self.way_points = {}
self.way_point_nodes = {}
local random_num = self.model.gridWalkRandomNum or math.random(1, #EmpowerConst.GridWalkDicePos)
local road_pos_list = EmpowerConst.GridWalkDicePos[random_num]
if not road_pos_list then return end
-- lua_resM:setOutsideRawImage(self, self.map_root_bg_raw, GameResPath.GetEmpowerIcon("grid_walk_bg"..random_num), false)
for i=0,self.max_grid_num do
self.way_point_nodes[i] = self:GetChild("grid_con/grid_"..i)
SetLocalPositionX(self.way_point_nodes[i], road_pos_list[i].pos_x + 5)
SetLocalPositionY(self.way_point_nodes[i], road_pos_list[i].pos_y - 10)
SetLocalScale(self.way_point_nodes[i], 1, 1, 1)
self.way_points[i] = self.way_point_nodes[i].localPosition
end
-- 奖励格子底下的圆盘底
self.circle_img_list = {}
self.circle_img_list_img = {}
for i=1, 24 do
self.circle_img_list[i] = self:GetChild("grid_con/circleBgCon/circle_" .. i)
self.circle_img_list[i].gameObject:SetActive(false)
self.circle_img_list_img[i] = self.circle_img_list[i]:GetComponent("Image")
end
end
function EmpowerGridWalkView:UpdateRewardItems( )
local cur_step = self.game_info and self.game_info.step or 0
self.big_rewards_cfg = nil
-- -- 隐藏圆盘底
-- local reward_count = 0
-- for k,v in pairs(self.reward_img_list) do
-- v.gameObject:SetActive(false)
-- end
-- 停止动画
self:RemovellAwardAnim()
for i,v in ipairs(self.way_points) do
self.reward_items[i] = self.reward_items[i] or {}
local cfg = Config.Latticereward[i.."@"..self.game_info.turn]
if not cfg then return end
local is_need_show_award_item = cur_step < i
if not self.box_list[i] then
self.box_list[i] = self:GetChild("grid_con/box_"..i)
-- 用宝箱模型
self:AddTreasureModel(self.box_list[i])
end
local box = self.box_list[i]
box.gameObject:SetActive(cur_step < i)
local pos = self.way_points[i]
SetLocalPosition(box, pos.x, pos.y, pos.z+150) -- +150为了把箱子往后拉,主角在前
self.reward_items[i].show_type = cfg.type
self.reward_items[i].box = box
if cfg.type == EmpowerConst.GridType.NormalBox then
-- 设置地板位置
if cur_step == i and cur_step ~= 0 and not self.box_float_anim_state[i] then
SetLocalPosition(self.circle_img_list[i], pos.x-5, pos.y+10 - 10, pos.z+150)
elseif not self.box_float_anim_state[i] then
SetLocalPosition(self.circle_img_list[i], pos.x-5, pos.y+10, pos.z+150)
end
lua_resM:setImageSprite(self, self.circle_img_list_img[i], "empower_asset", "gridwalk_girdbg", false)
self.circle_img_list[i].gameObject:SetActive(true)
elseif cfg.type == EmpowerConst.GridType.Reward then
box.gameObject:SetActive(false)
-- 设置地板位置
if cur_step == i and cur_step ~= 0 and not self.box_float_anim_state[i] then -- 当前踩的地板位置会下移一点
SetLocalPosition(self.circle_img_list[i], pos.x-5, pos.y+10 - 10, pos.z+150)
elseif not self.box_float_anim_state[i] then -- 如果没有动画中
SetLocalPosition(self.circle_img_list[i], pos.x-5, pos.y+10, pos.z+150)
end
lua_resM:setImageSprite(self, self.circle_img_list_img[i], "empower_asset", "gridwalk_girdbg2", false)
self.circle_img_list[i].gameObject:SetActive(true)
-- -- 奖励
-- self.reward_items[i].award_item = self.reward_items[i].award_item or UIObjPool:PopItem(UIObjPool.UIType.AwardItem, self.grid_con)
-- local award_item = self.reward_items[i].award_item
-- award_item:SetItemSize(78, 78)
-- award_item:SetVisible(is_need_show_award_item)
-- award_item:SetItemBgVisible(false)
-- SetLocalScale(self.way_point_nodes[i], 1, 1, 1)
-- award_item:SetParent(self.way_point_nodes[i])
-- SetLocalScale(self.way_point_nodes[i], 1.2, 1.2, 1.2)
-- award_item:SetPosition(0, 30)
-- self:AddAwardAnim(award_item.transform)
-- local award_info = self.game_info.show_reward[i]
-- if award_info and award_info.step_reward and award_info.step_reward[1] then
-- -- local goods_num = award_info.step_reward[1].good_num
-- -- if award_info.is_double==2 then
-- -- goods_num = goods_num/2
-- -- end
-- -- award_item:SetData(award_info.step_reward[1].good_id, goods_num)
-- award_item:SetData(award_info.step_reward[1].good_id, nil ,nil, nil, nil, nil, nil, nil, nil, true)
-- end
-- 奖励 (一个图标)
-- self.reward_items[i].award_item = self.reward_items[i].award_item or UIObjPool:PopItem(UIObjPool.UIType.AwardItem, self.grid_con)
if not self.reward_items[i].award_item then
local image_item = {}
image_item.gameObject = UiFactory.createChild(self.grid_con, UIType.Image)
image_item.transform = image_item.gameObject.transform
image_item.img = image_item.gameObject:GetComponent("Image")
SetLocalScale(image_item.transform, 0.8, 0.8, 0.8)
self.reward_items[i].award_item = image_item
end
local award_item = self.reward_items[i].award_item
award_item.gameObject:SetActive(is_need_show_award_item)
local award_info = self.game_info.show_reward[i]
if award_info and award_info.step_reward and award_info.step_reward[1] then
local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(award_info.step_reward[1].good_id)
local goods_icon = goods_vo and goods_vo.goods_icon or 0
lua_resM:setOutsideImageSprite(self, award_item.img, GameResPath.GetGoodsIcon(goods_icon), true)
SetLocalPosition(award_item.transform, pos.x -5, pos.y + 30, pos.z)
self:AddAwardAnim(award_item.transform, GetLocalPositionY(award_item.transform))
end
elseif cfg.type == EmpowerConst.GridType.BigBox then
box.gameObject:SetActive(false)
local award_info = self.game_info.show_reward[i]
if award_info and award_info.step_reward and award_info.step_reward[1] then
self.big_reward_list = award_info.step_reward
end
end
end
self.had_updated_items = true
self:UpdateBigRewards()
end
function EmpowerGridWalkView:UpdateBigRewards( )
self.big_reward_items_com = self.big_reward_items_com or self:AddUIComponent(UI.ItemListCreator)
if not self.big_reward_list then return end
-- local award_list = stringtotable(self.big_reward_list.reward_show)
local info = {
data_list = self.big_reward_list,
item_con = self.big_reward_con,
scroll_view = self.big_reward_scroll,
obj_pool_type = UIObjPool.UIType.AwardItem,
start_y = -5,
item_width = 59,
space_x = 20,
--alignment = UnityEngine.TextAnchor.UpperCenter,
on_update_item = function(item, i, v)
local goods_num = v.good_num
if self.game_info and self.game_info.show_reward and self.max_grid_num and self.game_info.show_reward[self.max_grid_num] and self.game_info.show_reward[self.max_grid_num].is_double==2 then
goods_num = goods_num / 2
end
item:SetData(v.good_id, goods_num)
-- item:SetData(v[2], v[3])
end,
}
self.big_reward_items_com:UpdateItems(info)
end
function EmpowerGridWalkView:RolePlatAnimation(play_animation)
local uimodelclass = lua_resM:GetPartModel(self, self.role_con)
if play_animation and uimodelclass then
uimodelclass:PlayActions(play_animation) --播放界面动画
end
end
function EmpowerGridWalkView:InitRoleModel()
-- 加载模型
local res_data = {
father_node = self,
transform = self.role_con,
fashion_type = FuncOpenModel.TypeId.Clothes,
size = Vector2(540, 400),
raycast_size = Vector2(200, 277),
action_name_list = {"idle"},
scale = 55,
can_rotate = false,
rotate = Vector3(0, 0, 0),
position = Vector3(0, 0, 0),
-- position = Vector3(10, 305, 0),
show_shadow = false,
ui_model_type = UIModelCommon.ModelType.Model,
layer_name = self.layer_name,
-- weapon_res_id = "nil",
force_hide_wing = true,
}
FuncOpenModel:getInstance():SetModelRes(res_data)
self:ResetRolePos()
end
function EmpowerGridWalkView:ResetRolePos( )
local game_info = self.model:GetGridGameInfo()
local cur_step = game_info and game_info.step or 0
local pos = self.way_points[cur_step]
SetLocalPosition(self.role_con, pos.x, pos.y, pos.z)
self.role_con.localRotation = self:GetRotationByDir(0)
end
function EmpowerGridWalkView:UpdateEmpowerShopRedDot( )
if self.shop_red_obj then
local bool = self.model:GetEmpowerRedDotList()[EmpowerConst.EmpowerViewType.EmpowerShop]
self.shop_red_obj:SetActive(bool)
end
end
function EmpowerGridWalkView:StartThrowDie( )
if self.lock_throw_die then
Message.show("播放动画中...")
return
end
if self.is_moved_last_grid then --重置判断
if not self.reset_cost then
Message.show("当前不可重置")
return
end
self.model:Fire(EmpowerConst.OPEN_RESET_TIPVIEW_VIEW)
return
end
function ok_function( flag )
if RoleManager.Instance.mainRoleInfo:GetRealJin() < self.cur_cost_for_dice then
Message.show("余额不足哦~")
return
end
self.lock_throw_die = true
local useGoodsFlag = self.use_goods_tog.isOn and 1 or 0
self.model:Fire(EmpowerConst.EMPOWER_REQ_EVENT, 41410,useGoodsFlag)
end
if (self.cur_cost_for_dice and self.cur_cost_for_dice == 0) or self.model.isAutoBuyGridWalk then
ok_function()
else
function toggle_function( flag )
self.model.isAutoBuyGridWalk = flag
end
--需要显示购买提示界面
local data = {
titleText = "提示",
price = self.cur_cost_for_dice,
okText = "确定",
-- gold_ab_res = gold_ab_res,
-- gold_res = res_name,
priceText = HtmlColorTxt(self.cur_cost_for_dice, ColorUtil.YELLOW_DARK) .. " 进行一次升品之路", --.. HtmlColorTxt("1彩钻", "#d322ff"),
ok_callback = ok_function,
toggle_function = toggle_function,
nameText = "是否使用",
insufficientText = "",-- .. HtmlColorTxt(use_list[3]..WordManager:GetCommonMoneyStr(use_list[1]), "#d322ff") .. "弹射一次
}
GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, data)
end
end
function EmpowerGridWalkView:PlayDiceAnimate( last_step )
lua_soundM:PlayEffect(self, "dice", false, LuaSoundManager.SOUND_TYPE.UI)
local action_list = {}
local data = {
clothe_res_id = "dice_3000",
role_type = SceneBaseType.Role,
layer_name = self.layer_name,
action_name_list = {"show"},
can_rotate = true,
scale = 64,
position = Vector3(0, 10, 0),
hide_with_view = true,
callBack = function()
self.dice_obj:SetActive(false)
end,
}
self.dice_node = lua_resM:SetRoleModel(self,self.dice_con,data)
self.dice_con_obj:SetActive(true)
-- for i=1,10 do
-- local randomNum = math.random(1,6)
-- local spriteAction = cc.Sprite.New("empower_asset:gridwalk_dice_"..randomNum)
-- table.insert(action_list, spriteAction)
-- -- spriteAction:setTarget(self.dice_img)
-- table.insert(action_list, cc.DelayTime.New(0.1))
-- end
local time_roll_dice = 1.2
--local is_turn_fast = self.get_fast_tog.isOn
--if is_turn_fast then
-- Message.show("fast")
-- time_roll_dice = 0.2
--else
-- Message.show("slow")
--end
table.insert(action_list, cc.DelayTime.New(time_roll_dice))
local spriteAction = cc.Sprite.New("empower_asset:gridwalk_dice_"..last_step)
table.insert(action_list, spriteAction)
local on_end = function()
self.dice_con_obj:SetActive(false)
self.dice_obj:SetActive(true)
end
table.insert(action_list, cc.CallFunc.New(on_end))
local sum_action = cc.Sequence.createWithTable(action_list)
cc.ActionManager:getInstance():addAction(sum_action, self.dice_img)
end
function EmpowerGridWalkView:FlyAwardItemToBag( goods_type_id,start_pos,drop_num )
-- local goods_list = {goods_type_id}
-- MainUIModel:getInstance():PlayGoodsFlyList(goods_list)
-- local float_list = {{goods_type_id = goods_type_id,num = drop_num}}
-- MainUIModel:getInstance():AddFloatInfo(float_list,true)
self.image_pool = self.image_pool or {}
local image_item
if #self.image_pool > 0 then
image_item = table.remove(self.image_pool, #self.image_pool)
else
image_item = {}
image_item.gameObject = UiFactory.createChild(self.fly_con, UIType.Image)
image_item.transform = image_item.gameObject.transform
image_item.img = image_item.gameObject:GetComponent("Image")
SetLocalScale(image_item.transform, 0.8, 0.8, 0.8)
end
image_item.gameObject:SetActive(true)
local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_type_id)
local goods_icon = goods_vo and goods_vo.goods_icon or 0
-- goods_icon = 100000
-- print('Cat:EmpowerGridWalkView.lua[1818] goods_icon', goods_icon, image_item.img)
lua_resM:setOutsideImageSprite(self, image_item.img, GameResPath.GetGoodsIcon(goods_icon), true)
SetLocalPosition(image_item.transform, start_pos.x, start_pos.y, start_pos.z)
local flyAction = cc.FlyToRandom.New(start_pos, Vector3.New(1200, 350, 0))
local ease_action = cc.EaseOut.New( flyAction, 0.5 )
local action = cc.Sequence.New(ease_action, cc.CallFunc.New(function()
image_item.gameObject:SetActive(false)
table.insert(self.image_pool, image_item)
end))
cc.ActionManager:getInstance():addAction(action, image_item.transform)
end
function EmpowerGridWalkView:FlyAwardItemToBagByIndex( i )
local rewardAbsPos
local new_pos
if self.reward_items[i].award_item then
rewardAbsPos = self.reward_items[i].award_item.transform.position
new_pos = self.fly_con:InverseTransformPoint(rewardAbsPos)
-- local rewardPos = self.reward_items[i].award_item:GetPosition()
-- rewardAbsPos = self.reward_items[i].award_item.transform and self.reward_items[i].award_item.transform.localPosition or rewardPos
elseif self.reward_items[i].box then
rewardAbsPos = self.reward_items[i].box.transform and self.reward_items[i].box.transform.position
new_pos = self.fly_con:InverseTransformPoint(rewardAbsPos)
new_pos.x = new_pos.x
new_pos.y = new_pos.y + 40
end
if not rewardAbsPos then return end
local show_goods_type_id = nil
local award_info = self.game_info.show_reward[i]
if award_info and award_info.step_reward and award_info.step_reward[1] then
show_goods_type_id = award_info.step_reward[1].good_id
end
self:FlyAwardItemToBag(show_goods_type_id, new_pos)
end
function EmpowerGridWalkView:StartMoveGrid( start_index, end_index )
local time_run = 0.5
--local is_turn_fast = self.get_fast_tog.isOn
--if is_turn_fast then
-- Message.show("fast")
-- time_run = 0.1
--else
-- Message.show("slow")
--end
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.role_con)
start_index = math.max(0, start_index)
end_index = math.min(#self.way_points, end_index)
--self.role_node:PlayAnimation("run")
self:RolePlatAnimation({"run"})
local start_pos = self.way_points[start_index]
local action_list = {cc.Place.New(start_pos.x, start_pos.y, start_pos.z)}
for i=start_index+1, end_index do
local pos = self.way_points[i]
local move_action = cc.MoveTo.createLocalType(time_run, pos.x, pos.y, pos.z)
local change_dir_func = function()
--根据起始点和目标坐标计算角色朝向,改变其角度
local dir = self:CalculateDirection(self.way_points[i-1], pos)
self.role_con.localRotation = self:GetRotationByDir(dir)
end
table.insert(action_list, cc.CallFunc.New(change_dir_func))
table.insert(action_list, move_action)
local reach_target = function ( )
lua_soundM:PlayEffect(self, "success",false,LuaSoundManager.SOUND_TYPE.UI)
local is_double = false
if self.game_info and self.game_info.show_reward and self.game_info.show_reward[i] then
is_double = self.game_info.show_reward[i].is_double==2
lua_soundM:PlayEffect(self, is_double and "double_box" or "one_box", false, LuaSoundManager.SOUND_TYPE.UI)
end
if is_double and self.way_point_nodes[i] then
-- self:ClearUIEffect(self.way_point_nodes[i])
self:AddDoubleEffect(self.way_point_nodes[i])
-- self:AddUIEffect("ui_shuangbei", self.way_point_nodes[i], self.layer_name, {x=0,y=0}, 1, false) --特效暂时屏蔽掉,有再开启
end
if self.reward_items[i].show_type == EmpowerConst.GridType.Reward and self.reward_items[i].award_item then
self.reward_items[i].award_item.gameObject:SetActive(false)
self:FlyAwardItemToBagByIndex(i)
if is_double then
self:FlyAwardItemToBagByIndex(i)
end
-- 格子漂浮动画
if i == end_index then
self:PlayGridFloatAnim(i, FloatAnimType.DOWN)
else
self:PlayGridFloatAnim(i, FloatAnimType.DOWN_AND_UP)
end
elseif self.reward_items[i].show_type == EmpowerConst.GridType.NormalBox and self.reward_items[i].box then
local box_img = self.reward_items[i].box:GetComponent("Image")
-- 播完特效后回调
local end_cb = function ( )
self.box_list[i].gameObject:SetActive(false)
-- lua_resM:setImageSprite(self, box_img, "empower_asset", "gridwalk_icon_box_open", true)
self:FlyAwardItemToBagByIndex(i)
if is_double then
self:FlyAwardItemToBagByIndex(i)
end
end
self:AddUIEffect("ui_hunliqiudianliang", self.way_point_nodes[i], self.layer_name, {x=0,y=20}, 3, false, 0.5, nil, end_cb)
-- 格子漂浮动画
if i == end_index then
self:PlayGridFloatAnim(i, FloatAnimType.DOWN)
else
self:PlayGridFloatAnim(i, FloatAnimType.DOWN_AND_UP)
end
elseif self.reward_items[i].show_type == EmpowerConst.GridType.BigBox then
--显示结算界面
local show_data = self.model:GetGameSumRewardList()
-- GlobalEventSystem:Fire(EventName.OPEN_COM_AWARD_RESULT_VIEW,show_data)
if show_data then
GiftModel:getInstance():Fire(GiftModel.OPEN_SHOW_ACT_GOODS_VIEW, show_data.award)
end
end
end
table.insert(action_list, cc.CallFunc.New(reach_target))
end
local end_func = function()
--跑完全程后就面向观众
self.role_con.localRotation = self:GetRotationByDir(0)
self:RolePlatAnimation({"idle"})
self.lock_throw_die = false
if self.is_need_update_view then
self.is_need_update_view = false
self:UpdateView()
end
end
table.insert(action_list, cc.CallFunc.New(end_func))
local sum_action = cc.Sequence.createWithTable(action_list)
cc.ActionManager:getInstance():addAction(sum_action, self.role_con)
if start_index ~= 0 and start_index < 24 then
self:PlayGridFloatAnim(start_index, FloatAnimType.UP)
end
end
--返回四个方向
function EmpowerGridWalkView:CalculateDirection( start_pos, end_pos )
local angle = math.atan2((end_pos.y-start_pos.y), (end_pos.x-start_pos.x))*180/math.pi
if angle < 0 then
angle = angle + 360
end
-- print('Cat:EmpowerGridWalkView.lua[10611] angle', angle)
local range_per_dir = 15
--之所以不用一个公式搞定是因为有可能某些方向的范围需要特殊处理(下面备注的角度是以15为例子的)
if (angle >= 0 and angle <= range_per_dir) or
( angle >= 360 - range_per_dir and angle <= 360 ) then -- 0~15 或 345~360
return EmpowerConst.Direction.Right
elseif angle >= range_per_dir and angle <= 90-range_per_dir then -- 15~75
return EmpowerConst.Direction.RightUp
elseif angle >= 90-range_per_dir and angle <= 90+range_per_dir then -- 75~105
return EmpowerConst.Direction.Up
elseif angle >= 90+range_per_dir and angle <= 180-range_per_dir then -- 105~ 165
return EmpowerConst.Direction.LeftUp
elseif angle >= 180-range_per_dir and angle <= 180+range_per_dir then -- 165~195
return EmpowerConst.Direction.Left
elseif angle >= 180+range_per_dir and angle <= 270-range_per_dir then -- 195~255
return EmpowerConst.Direction.LeftDown
elseif angle >= 270-range_per_dir and angle <= 270+range_per_dir then -- 255~285
return EmpowerConst.Direction.Down
elseif angle >= 270+range_per_dir and angle <= 360-range_per_dir then -- 285~345
return EmpowerConst.Direction.RightDown
end
return EmpowerConst.Direction.None
end
function EmpowerGridWalkView:GetRotationByDir( dir )
self.rotations = self.rotations or {
[EmpowerConst.Direction.None] = Quaternion.Euler(0, 180, 0),
[EmpowerConst.Direction.Right] = Quaternion.Euler(0, 90, 0),
[EmpowerConst.Direction.RightUp] = Quaternion.Euler(-22.622, 50.084, -17.581),
[EmpowerConst.Direction.Up] = Quaternion.Euler(0, 0, 0),
[EmpowerConst.Direction.LeftUp] = Quaternion.Euler(-22.808, -55.352, 18.738),
[EmpowerConst.Direction.Left] = Quaternion.Euler(0, -90, 0),
[EmpowerConst.Direction.LeftDown] = Quaternion.Euler(10.034, -141.557, 14.367),
[EmpowerConst.Direction.RightDown] = Quaternion.Euler(12.53, -232.142, -9.869),
[EmpowerConst.Direction.Down] = Quaternion.Euler(22, 180, 0),
}
return self.rotations[dir]
end
function EmpowerGridWalkView:UpdateView( )
self.game_info = self.model:GetGridGameInfo()
if not self.game_info then return end
if self.lock_throw_die then
self.is_need_update_view = true
return
end
self:UpdateRewardItems()
self:UpdateInfo()
self:UpdateGoodsNum()
self:UpdateEmpowerShopRedDot()
self.doule_txt_obj:SetActive(self.model:GetIsDoubleTime( ))
SetAnchoredPositionX(self.question_btn, self.model:GetIsDoubleTime( ) and -301 or -397)
end
function EmpowerGridWalkView:UpdateGoodsNum( )
if not self.has_goods_num_tmp or not self.is_loaded then return end
local num = GoodsModel:getInstance():GetTypeGoodsNum(self.coupon_id)
local color
if not num or num == 0 then
color = ColorUtil.RED_DARK
else
color = ColorUtil.GREEN_DARK
end
--self.has_goods_num_tmp.text = "代金券:<color="..color..">"..(num or 0).."</color>张"
self.has_goods_num_tmp.text = string.format("代金券:%s张", HtmlColorTxt( num or 0, color))
end
function EmpowerGridWalkView:UpdateInfo( )
self.throw_red_obj:SetActive(false)
local curVip = RoleManager.Instance.mainRoleInfo.vip_flag
local isUseTicket = self.use_goods_tog.isOn
local ticket_num = GoodsModel:getInstance():GetTypeGoodsNum(self.coupon_id)
self.cur_cost_for_dice = 0
if isUseTicket and ticket_num > 0 then
self.cur_cost_for_dice = -15*ticket_num
end
self.is_moved_last_grid = self.game_info.step >= self.max_grid_num
------------重置次数显示
local can_reset_num = 0
local vip_reset_table = stringtotable(Config.Latticekv["lattice_vip_point"].val)
for k,v in pairs(vip_reset_table) do
if v[1] <= curVip and can_reset_num < v[2] then
can_reset_num = v[2]
end
end
--print("============>>> YiRan:EmpowerGridWalkView [start:725] curVip :",curVip)
--print("============>>> YiRan:EmpowerGridWalkView [start:728] can_reset_num :",can_reset_num)
--print("============>>> YiRan:EmpowerGridWalkView [start:719] self.game_info.reset_count :",self.game_info.reset_count)
local left_reset_num = math.max(0, can_reset_num-self.game_info.reset_count)
local color = left_reset_num == 0 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
--local left_reset_num_str = HtmlColorTxt(math.max(0, can_reset_num-self.game_info.reset_count), ColorUtil.GREEN)
self.reset_num_tmp.text = "今日剩余重置次数:<color="..color..">".. left_reset_num .."</color>"
if self.is_moved_last_grid then
self.reset_cost = nil
local resetInfo = stringtotable(Config.Latticekv["reset_lattice_cost"].val)
self.reset_cost = resetInfo[self.game_info.reset_count+1] and resetInfo[self.game_info.reset_count+1][2][3] or 100
local color = RoleManager.Instance.mainRoleInfo:GetRealJin() < self.reset_cost and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
self.free_num_word_tmp.text = string.format('重置消耗:%s%s', WordManager:GetMoneyFaceStr(1),HtmlColorTxt( self.reset_cost, color))
-- self.free_num_tmp.text = " <color="..color..">"..self.reset_cost.."</color>"--钻石
-- self.img_money_obj:SetActive(true)
SetLocalPositionX(self.img_money, 38)
else
if self.game_info.free_count > 0 then
self.free_num_word_tmp.text = string.format('剩余免费:%s次', HtmlColorTxt( self.game_info.free_count, ColorUtil.GREEN_DARK))
--self.free_num_tmp.text = self.game_info.free_count.."次"
self.cur_cost_for_dice = 0
self.throw_red_obj:SetActive(true)
-- self.img_money_obj:SetActive(false)
else
local cost_cfg = stringtotable(Config.Latticekv["lattice_roll_cost"].val)
self.cur_cost_for_dice = math.max(0, self.cur_cost_for_dice + cost_cfg[2][2][3])
local color = RoleManager.Instance.mainRoleInfo:GetRealJin() < self.cur_cost_for_dice and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
self.free_num_word_tmp.text = string.format(" 消耗:%s<color=%s>%s</color>",WordManager:GetMoneyFaceStr(1),color,self.cur_cost_for_dice)--钻石
--self.img_money_obj:SetActive(true)
--SetLocalPositionX(self.img_money, 15)
-- self.free_num_tmp.text = ""
end
end
if self.is_moved_last_grid then
--lua_resM:setImageSprite(self, self.throw_die_img, "empower_asset", "gridwalk_txt_btn_reset")
self.throw_die_txt_tmp.text = "重置"
self.pic_throw_die_start_obj:SetActive(false)
self.pic_throw_die_reset_obj:SetActive(true)
self:ShowWaitResetView(true)
else
self.throw_die_txt_tmp.text = "开始"
self.pic_throw_die_start_obj:SetActive(true)
self.pic_throw_die_reset_obj:SetActive(false)
self:ShowWaitResetView(false)
end
end
function EmpowerGridWalkView:ShowWaitResetView(isShow)
local reset_info = Config.Latticeresetinfo[self.game_info.reset_count+1]
self.grid_con_obj:SetActive( not isShow)
if not reset_info then
self.resetCon_obj:SetActive(false)
return
end
self.resetCon_obj:SetActive(isShow)
-- self.grid_con_obj:SetActive( not isShow)
self.grid_con_obj:SetActive( true)
self.reset_reward_item = self.reset_reward_item or UIObjPool:PopItem(UIObjPool.UIType.AwardItem, self.reset_item_con)
self.reset_reward_item:SetItemSize(62, 62)
--self.reset_reward_item:SetPosition(pos.x-35, pos.y+52)
--self.reset_reward_item:SetVisible(is_need_show_award_item)
self.reset_good_list = stringtotable(reset_info.reward)[1]
self.reset_get_num = self.reset_good_list[3]
self.reset_reward_item:SetData(self.reset_good_list[2], self.reset_good_list[3])
end
function EmpowerGridWalkView:ResSetAnimation( )
local new_pos = self.fly_con:InverseTransformPoint(Vector3(0,0,0)) -- 动画
if self.reset_good_list then
--for i=1,self.reset_good_list[3] do -- 只飞一个就行
self:FlyAwardItemToBag(self.reset_good_list[2], new_pos, self.reset_good_list[3])
--end
end
end
function EmpowerGridWalkView:DestroySuccess( )
self.model:SetIsShowingGameView(false)
if self.on_ans_update_red_dot_id then
self.model:UnBind(self.on_ans_update_red_dot_id)
self.on_ans_update_red_dot_id = nil
end
if self.on_bag_change then
GoodsModel:getInstance():UnBind(self.on_bag_change)
self.on_bag_change = nil
end
if self.EMGRIDWALK_INFO_ID then
self.model:UnBind(self.EMGRIDWALK_INFO_ID)
self.EMGRIDWALK_INFO_ID = nil
end
if self.EMGRIDWALK_INFO_41410_ID then
self.model:UnBind(self.EMGRIDWALK_INFO_41410_ID)
self.EMGRIDWALK_INFO_41410_ID = nil
end
if self.RESET_EMGRIDWALK_SUCCESS_ID then
self.model:UnBind(self.RESET_EMGRIDWALK_SUCCESS_ID)
self.RESET_EMGRIDWALK_SUCCESS_ID = nil
end
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.dice_img)
-- for i,v in ipairs(self.reward_items) do
-- if v.award_item then
-- UIObjPool:PushItem(UIObjPool.UIType.AwardItem, v.award_item)
-- v.award_item = nil
-- end
-- end
-- self.reward_items = nil
if self.reset_reward_item then
UIObjPool:PushItem(UIObjPool.UIType.AwardItem, self.reset_reward_item)
self.reset_reward_item = nil
end
if self.on_grid_game_info_changed_id then
self.model:UnBind(self.on_grid_game_info_changed_id)
self.on_grid_game_info_changed_id = nil
end
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.role_con)
--self.role_node = nil
if self.money_view then
self.money_view:DeleteMe()
self.money_view = nil
end
for i,v in pairs(self.item_pool) do
v:DeleteMe()
end
self.item_pool = nil
-- 清奖励浮动动画
self:RemovellAwardAnim()
-- 清底座浮动动画
for k,v in pairs(self.circle_img_list) do
cc.ActionManager:getInstance():removeAllActionsFromTarget(v)
end
end
----------双倍特效-start---------
-- 添加动画
function EmpowerGridWalkView:AddDoubleEffect( parent )
local item
-- 缓存池中找空闲item
for i,v in ipairs(self.item_pool) do
if v:CanUse() then
item = v
break
end
end
-- 没找到那就创建
if not item then
item = EmpowerDoubleItem.New(self.effectCon)
table.insert(self.item_pool, item)
end
-- 设置位置
item:SetPosition(GetLocalPositionX(parent), GetLocalPositionY(parent))
-- 开播
item:SetData()
end
----------双倍特效-end-----------
----------宝箱模型-start---------
-- 添加宝箱模型
function EmpowerGridWalkView:AddTreasureModel( parent )
local res_data = {
clothe_res_id = EmpowerConst.RewardModelID, -- 41000202 10020206
-- weapon_res_id = monster.weapon_id,
type = SceneBaseType.Monster,
action_name_list = {"idle"},
layer_name = self.layer_name,
father_node = self,
transform = parent,
rotate = Vector3(18.5, 187.5, -6), -- Vector3(-17,36,-13) Vector3(19, 121.5, -24)
fashion_type = FuncOpenModel.TypeId.Monster,
position = Vector3(-4.5, 8, 0),
-- shadow2_plane_pos = Vector4(0, 10, 0, 1),
scale = 90, -- 80 65
ui_model_type = UIModelCommon.ModelType.Model,
show_shadow = false,
green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
----------宝箱模型-end-----------
----------奖励item上下浮动动画-start---------
function EmpowerGridWalkView:RemovellAwardAnim( )
for k,v in pairs(self.reward_items) do
if v.award_item then
cc.ActionManager:getInstance():removeAllActionsFromTarget(v.award_item.transform)
end
end
end
function EmpowerGridWalkView:AddAwardAnim( parent, start_pos )
local move_time = 1
local start_pos = start_pos
local move_dist = 10
-- SetAnchoredPositionX(parent, 0)
local function move_up(percent)
SetAnchoredPositionY(parent, start_pos + move_dist * percent)
end
local action1 = cc.CustomUpdate.New(move_time, move_up)
-- 移动
local function move_down(percent)
SetAnchoredPositionY(parent, start_pos + move_dist * (1-percent))
end
local action2 = cc.CustomUpdate.New(move_time, move_down)
------------------------------------------------
local action3 = cc.Sequence.New( action1, action2)--顺序
local action10 = cc.RepeatForever.New( action3 )
cc.ActionManager:getInstance():addAction(action10, parent)
end
----------奖励item上下浮动动画-end-----------
----------路过之后底座浮动动画-start---------
function EmpowerGridWalkView:PlayGridFloatAnim( index, anim_type )
local parent = self.circle_img_list[index]
if not parent then return end
cc.ActionManager:getInstance():removeAllActionsFromTarget(parent)
-- local move_time = 0.3
local move_dist = -10
local pos = self.way_points[index]
-- 设置起始位置(防止它动画没播完位置不对)
if anim_type == FloatAnimType.UP then -- 下面
SetLocalPosition(parent, pos.x-5, pos.y+10 + move_dist, pos.z+150)
else -- 上面
SetLocalPosition(parent, pos.x-5, pos.y+10, pos.z+150)
end
local _, start_pos_y = GetAnchoredPosition(parent)
local anim_param = EmpowerConst.FloatAnimParam
local function move_down(percent)
SetAnchoredPositionY(parent, start_pos_y + move_dist * percent)
end
local action1 = cc.CustomUpdate.New(anim_param.down_time1, move_down)
-- 移动
local function move_up(percent)
SetAnchoredPositionY(parent, start_pos_y + move_dist * (1-percent))
end
local action2 = cc.CustomUpdate.New(anim_param.up_time2, move_up)
-- 上移2
local function move_up2(percent)
SetAnchoredPositionY(parent, start_pos_y - move_dist * percent)
end
local action3 = cc.CustomUpdate.New(anim_param.up_time1, move_up2)
local function end_call()
self.box_float_anim_state[index] = false -- 动画状态结束
end
local call_func1 = cc.CallFunc.New(end_call)
------------------------------------------------
-- 动画
if anim_type == FloatAnimType.UP then
action4 = cc.Sequence.New( action3, call_func1 )
elseif anim_type == FloatAnimType.DOWN then
action4 = cc.Sequence.New( action1, call_func1)
elseif anim_type == FloatAnimType.DOWN_AND_UP then
action4 = cc.Sequence.New( action1, action2, call_func1)
end
self.box_float_anim_state[index] = true
cc.ActionManager:getInstance():addAction(action4, parent)
end
----------路过之后底座浮动动画-end-----------