local RiceSinglePlayerView = {} local initSpeed = 30 local length = 10000 local speedValue = { [1] = 1.25, [2] = 0.8 } local SwardName = { [1] = "y_yujianxing_jian01", [2] = "y_yujianxing_jian02", [3] = "y_yujianxing_jian03", [4] = "y_yujianxing_jian04", } local SWARDNAMES = { [1] = "清风剑", [2] = "夏禹剑", [3] = "赤霄剑", [4] = "幻夜剑", } local SWARDCOLORS = { [1] = "CDF8D8", [2] = "E8B546", [3] = "e25b58", [4] = "800080", } local RidingSwardSence = ConfigManager.GetConfig(ConfigName.RidingSwardSence) function RiceSinglePlayerView:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = RiceSinglePlayerView }) return b end function RiceSinglePlayerView:InitComponent() self.spLoader = SpriteLoader.New() self.gameObject:GetComponent("RectTransform").sizeDelta = Vector2.New(12500,100) self.player = Util.GetGameObject(self.gameObject,"Root") self.playerRoot = Util.GetGameObject(self.gameObject,"Player") self.playerName = Util.GetGameObject(self.playerRoot,"Name/Text"):GetComponent("Text") self.playerLiveRoot = Util.GetGameObject(self.player,"Live") self.swordRoot = Util.GetGameObject(self.player,"Sword") self.upPre = Util.GetGameObject(self.gameObject,"upPre") self.downPre = Util.GetGameObject(self.gameObject,"downPre") self.playerTrans = self.player:GetComponent("RectTransform") self.playerTrans.localPosition = Vector2.New(0,100) self.curPosX = self.playerTrans.localPosition.x self.speed = initSpeed FixedUpdateBeat:Add(self.OnUpdate, self)--长按方法注册 self.effectList1 = {} for i = 1, 4 do self.effectList1[i] = Util.GetGameObject(self.player,"fx_yvjianfeixin"..i) self.effectList1[i]:SetActive(false) end self.effectList2 = {} for i = 1, 4 do self.effectList2[i] = Util.GetGameObject(self.player,"fx_yvjianfeixin"..i.."_jiasu") self.effectList2[i]:SetActive(false) end end --绑定事件(用于子类重写) function RiceSinglePlayerView:BindEvent() end --添加事件监听(用于子类重写) function RiceSinglePlayerView:AddListener() end --移除事件监听(用于子类重写) function RiceSinglePlayerView:RemoveListener() end --设置游戏状态 function RiceSinglePlayerView:SetSinglePlayerState(_state) if _state then self.liveNode:SetWalkDir(WALK_DIR.IDLE_RIGHT) self:SetEvent() end self.isRunning = _state end --加载事件点 function RiceSinglePlayerView:SetEvent() local keyFrame = RidingSwardSence[self.data[1]].KeyFrame self.keyFrameList = {} for i = 1, #keyFrame do self.keyFrameList[i] = {} self.keyFrameList[i].pos = keyFrame[i][1]*initSpeed*30 self.keyFrameList[i].value = keyFrame[i][2] if keyFrame[i][2] == 1 then self.keyFrameList[i].obj = newObjToParent(self.upPre,self.gameObject) elseif keyFrame[i][2] == 2 then self.keyFrameList[i].obj = newObjToParent(self.downPre,self.gameObject) end self.keyFrameList[i].obj:GetComponent("RectTransform").localPosition = Vector2.New(self.keyFrameList[i].pos,100) PlayUIAnim(Util.GetGameObject(self.keyFrameList[i].obj,"Image")) end end --重置游戏 function RiceSinglePlayerView:ResetSinglePlayer() self.isRunning = false for i,v in ipairs(self.keyFrameList) do destroy(self.keyFrameList[i].obj) table.remove( self.keyFrameList,i) end self.speed = initSpeed self.playerTrans.localPosition = Vector2.New(0,100) self.curPosX = self.playerTrans.localPosition.x end --upDate function RiceSinglePlayerView:OnUpdate() if self.isRunning then --暂定10000结束游戏 local keepmoving = false if self.curPosX >= length then keepmoving = true if YuJianXingManager.sendEvent then YuJianXingManager.sendEvent = false Timer.New(function () YuJianXingManager.FinishResetGame() end,2):Start() end else keepmoving = false self.curPosX = self.curPosX + self.speed self.player.transform.localPosition = Vector2.New(self.curPosX,100) --事件 for i,v in ipairs(self.keyFrameList) do if self.curPosX >= v.pos then self.speed = self.speed*speedValue[v.value] destroy(self.keyFrameList[i].obj) table.remove( self.keyFrameList,i) end end end if keepmoving then self.curPosX = self.curPosX + self.speed self.player.transform.localPosition = Vector2.New(self.curPosX,100) end end self.effectList1[self.index]:SetActive(self.isRunning) self.effectList2[self.index]:SetActive(self.speed >= 37.5) end --返回当前位置 function RiceSinglePlayerView:GetCurPosX() if self.curPosX <= 10000 then return self.curPosX end return 10000 end --界面打开时调用(用于子类重写) function RiceSinglePlayerView:OnOpen(_inedx,_data) self.index = _inedx self.data = _data self:SetPlayerAndSword() end --设置角色显隐 function RiceSinglePlayerView:HidePlayer(_state) self.gameObject:SetActive(_state) end --重新设置数据 function RiceSinglePlayerView:ReloadData(_data) self.data = _data end --加载人物和🗡 function RiceSinglePlayerView:SetPlayerAndSword() if self.liveNode then self.liveNode:OnClose() end local data = {} data.skin = 80012 data.sex = YuJianXingManager.modelList[self.index].sex self.liveNode = PlayerLiveView:New(self.playerLiveRoot,2,data) self.liveNode:OnOpen(18,Vector3.zero,WALK_DIR.IDLE_RIGHT) self.liveNode:SetTitleHide() self.playerName.text = string.format( "【%s】%s",SWARDNAMES[self.index],YuJianXingManager.modelList[self.index].userName) self.swordRoot:GetComponent("Image").sprite = self.spLoader:LoadSprite(SwardName[self.index]) end --设置单个玩家上下飘动 function RiceSinglePlayerView:ResetSinglePlayerPosVertical() local y = math.random(-100,0) self.playerRoot.transform:DOLocalMove(Vector3.New(0,y,0), 2, false):SetEase(Ease.Linear) end function RiceSinglePlayerView:OnClose() FixedUpdateBeat:Remove(self.OnUpdate, self) self.spLoader:Destroy() if self.liveNode then self.liveNode:OnClose() self.liveNode = nil end end --界面销毁时调用(用于子类重写) function RiceSinglePlayerView:OnDestroy() end return RiceSinglePlayerView