210 lines
6.6 KiB
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 |