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

212 lines
6.7 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] = Language[13032],
[2] = Language[13033],
[3] = Language[13034],
[4] = Language[13035],
}
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