miduo_client/Assets/ManagedResources/~Lua/Modules/YuJianXing/RiceSinglePlayerView.lua

210 lines
6.6 KiB
Lua

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( "<color=#e7d7c7>【%s】%s</color>",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