GuildSceneCollectView = GuildSceneCollectView or BaseClass(BaseItem) local GuildSceneCollectView = GuildSceneCollectView function GuildSceneCollectView:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "mainui" self.layout_file = "CollectBarView" self.parent_wnd = parent_wnd self.layer_name = layer_name self.curr_progress = 0 --采集当前进度 self.total_step = 40 self.is_collecting = false self.collect_time = 3 --采集装备时间 self.main_role = Scene:getInstance():GetMainRole() self.model = GuildModel:getInstance() self:Load() end function GuildSceneCollectView:Load_callback() self.transform.anchoredPosition = Vector2(0, 155) self.collectText = self:GetChild("Image/collectText"):GetComponent("Text") self.effect = self:GetChild("effect") self.effect2 = self:GetChild("effect2") self.fg_img = GetChildImages(self.transform, { "barCon/progressImg/fgImg" }) self.fg_img.enabled = false self:SetProgress(0, 100) -- 修改节点名称 self.transform.name = "GuildSceneCollectView" self:AddEvents() end function GuildSceneCollectView:AddEvents( ) --开始采集 local function startCollect(vo) self:StartCollectAction(vo) end self:BindEvent(self.model, GuildModel.START_TO_COLLECT_ITEM, startCollect) --取消采集 local function cancelCollect() if self.is_collecting then local role = Scene.Instance.main_role if role and not role:IsInState(PoseState.COLLECT) then self:CancelCollectAction() end end end self:BindEvent(self.model, GuildModel.STOP_COLLECT_ITEM, cancelCollect) self.attack_id = GlobalEventSystem:Bind(FightEvent.RELEASE_MAIN_SKILL, cancelCollect) self.game_start_id = GlobalEventSystem:Bind(SceneEventType.SCENE_CHANGED,cancelCollect) self.mainrole_move_id = GlobalEventSystem:Bind(ObjectEventType.MAINROLE_MOVE_EVENT_IMME,cancelCollect) end function GuildSceneCollectView:StartCollectAction(vo) self.vo = vo self:SetVisible(true) self.curr_progress = 0 self.is_collecting = true self.main_role:SetIsCollecting(true) SceneManager:getInstance():SetCollectFlag(true) self:SwitchCollectState(true) self:SetProgress(0, 100) local function call_back( ) cs_particleM:SetSpeed(self.effect.gameObject, 1 / self.collect_time) --特效播放1.5秒 end self.effect.gameObject:SetActive(true) self:AddUIEffect("ui_caijinew_01", self.effect, self.layer_name, nil, 1, false, self.collect_time + 2, nil, nil, call_back) if self.collecting_time_id == nil then local function collectingFunc( ... ) self:Collecting() end self.collecting_time_id = GlobalTimerQuest:AddPeriodQuest(collectingFunc, self.collect_time / self.total_step, 100) end end function GuildSceneCollectView:CancelCollectAction(auto_end) self:SetVisible(false) self.curr_progress = 0 self.is_collecting = false SceneManager:getInstance():SetCollectFlag(false) self:SwitchCollectState(false) self.main_role:SetIsCollecting(false) if auto_end then self.model:Fire(GuildModel.PICK_UP_BOSS_DROP_ITEM, GuildModel.GBossPickOpty.Succeed, self.vo.drop_id) else -- GlobalEventSystem:Fire(SceneEventType.GBOSS_PICK_CANCEL, self.model:GetCurGuildBossCollectDropId()) self.model:Fire(GuildModel.PICK_UP_BOSS_DROP_ITEM, GuildModel.GBossPickOpty.Cancel, self.vo.drop_id) end end --采集进行器 function GuildSceneCollectView:Collecting( ) if self.is_collecting == false then if self.collecting_time_id ~= nil then GlobalTimerQuest:CancelQuest(self.collecting_time_id) self.collecting_time_id = nil end return end self.curr_progress = self.curr_progress + 1 self:SetProgress(self.curr_progress, self.total_step) if self.curr_progress >= self.total_step then --少许延时关闭 if self.collecting_time_id ~= nil then GlobalTimerQuest:CancelQuest(self.collecting_time_id) self.collecting_time_id = nil end local function DelayClose() self:CancelCollectAction(true) end if self.delay_close_id then GlobalTimerQuest:CancelQuest(self.delay_close_id) self.delay_close_id = false end self:AddUIEffect("ui_caijinew_02", self.effect2, self.layer_name, nil, 1, false, false, nil, nil, nil) self.delay_close_id = GlobalTimerQuest:AddDelayQuest(DelayClose, 0.7) end end function GuildSceneCollectView:SwitchCollectState( flag ) local main_role = Scene.Instance.main_role if not main_role then return end if flag then main_role:DoCollect() else if main_role:IsInState(PoseState.COLLECT) then main_role:DoStand(nil, 0.1) end end end -- 采集进度 function GuildSceneCollectView:SetProgress(curr_value, max_value) local progress_value = math.floor(curr_value / max_value * 100) progress_value = progress_value >= 100 and 100 or progress_value self.collectText.text = progress_value .. "%" end function GuildSceneCollectView:__delete( ) if self.attack_id then GlobalEventSystem:UnBind(self.attack_id) self.attack_id = nil end if self.game_start_id then GlobalEventSystem:UnBind(self.game_start_id) self.game_start_id = nil end if self.mainrole_move_id then GlobalEventSystem:UnBind(self.mainrole_move_id) self.mainrole_move_id = nil end if self.collecting_time_id ~= nil then GlobalTimerQuest:CancelQuest(self.collecting_time_id) self.collecting_time_id = nil end if self.delay_close_id then GlobalTimerQuest:CancelQuest(self.delay_close_id) self.delay_close_id = false end self:ClearUIEffect(self.effect) self:ClearUIEffect(self.effect2) end