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 = "代金券:"..(num or 0).."张" 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 = "今日剩余重置次数:".. left_reset_num .."" 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 = " "..self.reset_cost..""--钻石 -- 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%s",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-----------