miduo_client/Assets/ManagedResources/~Lua/Modules/RatioNumber/RatioNumberGamePanel.lua

1046 lines
38 KiB
Lua

require("Base/BasePanel")
RatioNumberGamePanel = Inherit(BasePanel)
local this = RatioNumberGamePanel
local dragViewListGo = {}
local roomList = {}
local triggerList = {}
local buildList = {}
local buildObjArr = {}
local curUseBuildDataArr = {}
local curCLickPos=nil
local curPlayerPos=nil
local enemyList = {}
local battleTime = Timer.New()
local battleOverTime = Timer.New()
-- local isGuide = false
startBattle = false
-- local
--初始化组件(用于子类重写)
function this:InitComponent()
this.live = nil
this.roompre = Util.GetGameObject(self.gameObject,"roomPre")
this.buildPre = Util.GetGameObject(self.gameObject,"buildPre")
this.battles = Util.GetGameObject(self.gameObject,"battle")
this.enemyPre = Util.GetGameObject(self.gameObject,"enemyPre")
this.backBtn = Util.GetGameObject(self.gameObject,"back")
this.restartGameBtn =Util.GetGameObject(self.gameObject,"restartGame")
this.playerObj = Util.GetGameObject(self.gameObject,"player")
this.lj = Util.GetGameObject(self.gameObject,"lj")
this.power = Util.GetGameObject(this.playerObj,"power"):GetComponent("Text")
this.power.color = UIColor.PURPLE
this.hj = Util.GetGameObject(this.playerObj,"hj"):GetComponent("Text")
this.bg = Util.GetGameObject(self.gameObject,"bg/bg"):GetComponent("Image")
this.failPanel = Util.GetGameObject(self.gameObject,"FailPanel")
this.failBackBtn = Util.GetGameObject(self.failPanel,"failBackBtn")
this.failResBtn = Util.GetGameObject(self.failPanel,"failResBtn")
-- this.guideImage =Util.GetGameObject(self.gameObject,"guideImg")
end
--绑定事件(用于子类重写)
function this:BindEvent()
Util.AddClick(this.backBtn,function()
UIManager.ClosePanel(UIName.RationNumberGamePanel)
UIManager.OpenPanel(UIName.RatioNumberLevelPanel)
end)
Util.AddClick(this.restartGameBtn,function()
if startBattle then
PopupTipPanel.ShowTip("战斗中....")
else
this:RestartGame()
end
end)
Util.AddClick(this.failBackBtn,function()
UIManager.ClosePanel(UIName.RationNumberGamePanel)
UIManager.OpenPanel(UIName.RatioNumberLevelPanel)
this.failPanel:SetActive(false)
end)
Util.AddClick(this.failResBtn,function()
this:RestartGame()
this.failPanel:SetActive(false)
end)
end
--添加事件监听(用于子类重写)
function this:AddListener()
end
--移除事件监听(用于子类重写)
function this:RemoveListener()
end
--界面打开时调用(用于子类重写)
function this:OnOpen(...)
-- RatioNumberManager.Init()
local bgstr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[1]).Name
this.bg.sprite = this.lspLoader:LoadSprite(bgstr)
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function this:OnShow(...)
this.failPanel:SetActive(false)
self:InitGame()
-- this.restartGameBtn:SetActive(RatioNumberManager.gameIndex>4)
-- this.backBtn:SetActive(RatioNumberManager.gameIndex>4)
-- this.failBackBtn:SetActive(RatioNumberManager.gameIndex>4)
-- this.guideImage:SetActive(false)
-- if RatioNumberManager.gameIndex == 1 then
-- isGuide = true
-- this.GuideOnce()
-- end
end
--界面层级发生改变(用于子类重写)
function this:OnSortingOrderChange()
end
--界面关闭时调用(用于子类重写)
function this:OnClose()
end
--界面销毁时调用(用于子类重写)
function this:OnDestroy()
dragViewListGo = {}
end
function this:InitGame()
this:ClearBattles()
startBattle = false
curUseBuildDataArr = {}
for i=1,#RatioNumberManager.buildIds do
local roomArr
-- local roomObjArr
local buildList = {}
-- local buildObj = {}
local buildId = RatioNumberManager.buildIds[i]
local buildInfo = ConfigManager.GetConfigData(ConfigName.CompareNumBuild,buildId)
local mod = 1
if i > 1 then
mod = 2
end
local build = self:GetBuild(mod)
build.name = "build"..i
build.transform.localPosition = Vector2.New(-270 + (i-1)*540,0)
if #buildInfo.Formula == 1 and #buildInfo.Formula[1] ==1 and i == 1 then
roomArr ={}
-- roomObjArr = {}
local room = self:GetRoom(build,1)
-- local drageView = Util.GetGameObject(room,"DragView")
room.name =i.."_1"
-- drageView.name = room.name
local buildTop = Util.GetGameObject(build,"top")
room.transform.localPosition = Vector2.New(0,-500)
buildTop.transform.localPosition = Vector2.New(0,-300)
Log("ratioNumber:"..0)
table.insert(roomArr,0)
table.insert(buildList,roomArr)
curPlayerPos = {build = i , room = 1}
local playerInfo = ConfigManager.GetConfigData(ConfigName.CompareNumItem,buildInfo.Formula[1][1])
local str = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,playerInfo.ResourcesId).Name;
if this.live then
this.live.gameObject:SetActive(true)
poolManager:UnLoadLive(this.live.name,this.live)
this.live=nil
end
local dieImg = Util.GetGameObject(this.playerObj,"dieImg")
dieImg:SetActive(false)
this.live = poolManager:LoadLive(str,this.playerObj.transform, Vector3.New(playerInfo.LiveScale[1][1],playerInfo.LiveScale[1][2],playerInfo.LiveScale[1][3]), Vector2.New(playerInfo.LiveScale[2][1],playerInfo.LiveScale[2][2]))
this.playerAnim = this.live:GetComponent("SkeletonGraphic")
this:SetPlayerInfo(curPlayerPos,1)
this.power.text = RatioNumberManager.curPlayerPower
this.hj.text= RatioNumberManager.curPlayerHj
this.hj.gameObject:SetActive(RatioNumberManager.curPlayerHj~=0)
this.playerObj.transform.localPosition = Vector2.New(0,2000)
DoTween.To(DG.Tweening.Core.DOGetter_float( function () return this.playerObj.transform.localPosition.y end),
DG.Tweening.Core.DOSetter_float(function (progress)
this.playerObj.transform.localPosition = Vector3(0,progress,0)
end), 0, 1):SetEase(Ease.InQuad)
else
local buildTop = Util.GetGameObject(build,"top")
buildTop.transform.localPosition = Vector2.New(0,-500+(#buildInfo.Formula*200))
for j = 1 ,#buildInfo.Formula do
Log("ratioNumber:"..j)
roomArr ={}
local room = self:GetRoom(build,2)
-- local drageView = Util.GetGameObject(room,"DragView")
room.name = i.."_"..j
-- drageView.name = room.name
room.transform.localPosition = Vector2.New(0,-500 + (j-1) * 200)
local enemyPos= Util.GetGameObject(room,"Pos/enemyPos")
local enemys = buildInfo.Formula[j]
for x =1,#enemys do
local enemyId = enemys[x]
local enemy = this:GetEnemy(enemyId)
local x = -100 + (3 - #enemys + (x - 1)) *100
enemy.enemy.transform:SetParent(enemyPos.transform)
enemy.enemy.transform.localPosition = Vector2.New(x,0)
enemy.enemy.transform.localScale = Vector2.one
table.insert(roomArr,enemy)
end
table.insert(buildList,roomArr)
-- tbale.insert(roomObjArr,room)
-- table.insert(buildObj,roomObjArr)
end
end
curUseBuildDataArr[i] = buildList
-- buildObjArr[i] = buildObj
end
Log(1)
-- curUseBuildDataArr = buildDataArr
end
function this:ClearBattles()
if this.battles.transform.childCount > 0 then
for i = this.battles.transform.childCount - 1 ,0,-1 do
local build = this.battles.transform:GetChild(i)
build:SetParent(this.lj.transform)
build.gameObject:SetActive(false)
end
end
end
function this:GetRoom(parent , mod)
local room
if #roomList>0 then
room = roomList[1]
table.remove(roomList,1)
else
room = GameObject.Instantiate(self.roompre)
local img = room:GetComponent("Image")
if mod == 1 then
img.sprite = this.lspLoader:LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[3]).Name)
else
img.sprite = this.lspLoader:LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.enemyResStr[3]).Name)
end
local playerPos = Util.GetGameObject(room,"Pos/playerPos")
local drageView = SubUIManager.Open(SubUIConfig.RationDragView, room.transform)
drageView.gameObject.name="DragView"
drageView.gameObject:SetActive(true)
drageView:SetScrollMouse(false)
local trigger = Util.GetEventTriggerListener(drageView.gameObject)
table.insert(triggerList,trigger)
trigger.onPointerDown = trigger.onPointerDown + this.OnPointerDown
trigger.onPointerUp= trigger.onPointerUp+this.OnPointerUp
trigger.onEndDrag= trigger.onEndDrag+this.OnEndDrag
trigger.onDrag=trigger.onDrag + this.OnDrag
drageView:SetDragGO(playerPos)
end
Util.GetGameObject(room,"tips"):SetActive(false)
room.transform:SetParent(parent.transform)
room.transform.localPosition = Vector3.zero
room.transform.localScale = Vector3.one
room.gameObject:SetActive(true)
return room
end
function this:GetBuild(mod)
local build
if #buildList > 0 then
build= buildList[1]
table.remove(buildList,1)
else
build= GameObject.Instantiate(self.buildPre)
local top = Util.GetGameObject(build,"top"):GetComponent("Image")
local down = Util.GetGameObject(build,"down"):GetComponent("Image")
local topstr
local downStr
if mod == 1 then
topstr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[4]).Name
downStr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[2]).Name
else
topstr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.enemyResStr[4]).Name
downStr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.enemyResStr[2]).Name
end
top.sprite = this.lspLoader:LoadSprite(topstr)
down.sprite = this.lspLoader:LoadSprite(downStr)
end
build.transform:SetParent(self.battles.transform)
build.gameObject:SetActive(true)
build.transform.localPosition = Vector3.zero
build.transform.localScale = Vector3.one
return build
end
function this:GetEnemy(enemyId)
local enemyInfo = ConfigManager.GetConfigData(ConfigName.CompareNumItem,enemyId)
local enemy
if enemyList and #enemyList > 0 then
enemy = enemyList[1]
table.remove(enemyList,1)
else
enemy = GameObject.Instantiate(this.enemyPre)
end
local powerNum = enemyInfo.CombatEffectiveness
local hjNum = 0
-- local name = Util.GetGameObject(enemy , "name"):GetComponent("Text")
local power = Util.GetGameObject(enemy,"power"):GetComponent("Text")
local hj = Util.GetGameObject(enemy,"hj"):GetComponent("Text")
power.text = powerNum
local anim = nil
local enemtStr = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,enemyInfo.ResourcesId).Name
local zb = Util.GetGameObject(enemy,"zb"):GetComponent("Image")
local bossImg = Util.GetGameObject(enemy,"bossImg")
if enemyInfo.Type == 2 then
hj.gameObject:SetActive(false)
-- name.text = "装备"
zb.gameObject:SetActive(true)
zb.sprite =this.lspLoader:LoadSprite(enemtStr)
power.color = UIColor.PURPLE
else
power.color = UIColor.ORANGE
if enemyInfo.MonsterType == 2 then
hj.gameObject:SetActive(true)
hjNum = powerNum
hj.text = powerNum
else
hj.gameObject:SetActive(false)
end
-- name.text= str[enemyInfo.MonsterType]
local live = poolManager:LoadLive(enemtStr,enemy.transform, Vector3.New(enemyInfo.LiveScale[1][1],enemyInfo.LiveScale[1][2],enemyInfo.LiveScale[1][3]), Vector2.New(enemyInfo.LiveScale[2][1],enemyInfo.LiveScale[2][2]))
anim = live:GetComponent("SkeletonGraphic")
zb.gameObject:SetActive(false)
end
bossImg:SetActive(enemyInfo.DivineRing == 1)
bossImg.transform:SetSiblingIndex(enemy.transform.childCount - 1)
enemy:SetActive(true)
return {enemy = enemy ,anim = anim,type = enemyInfo.Type,enemyType = enemyInfo.MonsterType, power = powerNum ,hj = hjNum }
end
--拖拽
function this.OnPointerDown(Pointgo,data)--按下
Log("Click Down:"..Pointgo.transform.parent.name)
if startBattle then
return
end
curCLickPos = this:GetPosInfo(Pointgo.transform.parent.name)
if not curCLickPos or not( curCLickPos.build == curPlayerPos.build and curCLickPos.room == curPlayerPos.room) then
curCLickPos = nil
return
end
end
function this.OnPointerUp(Pointgo,data)--抬起
if data.pointerEnter==nil then--拖到屏幕外
this:InvalidClick()
return
end
if startBattle then
return
end
Log("Click Up:"..data.pointerEnter.transform.parent.name)
local curPos = this:GetPosInfo(data.pointerEnter.transform.parent.name)
if not curCLickPos or not curPos then
this:InvalidClick()
else
this:ValidClick(curPos)
end
-- local _j=tonumber(string.sub(Pointgo.transform.name,-1))
-- Util.Peer(Pointgo.transform,"Pos").transform:SetAsFirstSibling()
-- local heroObj=Util.GetTransform(this.gameObject,"Hero".._j)
-- heroObj:DOScale(Vector3.one * 1, 0.15)
-- heroObj.transform:SetParent(bgListGo[_j].transform)
-- heroObj.transform:SetSiblingIndex(1)--SetAsFirstSibling()
-- heroObj:GetComponent("Image").raycastTarget = false
end
function this.OnEndDrag(Pointgo,data)--结束拖动
-- Log("Click Over:"..data.pointerEnter.gameObject.transform.parent.name)
-- local _j=tonumber(string.sub(Pointgo.transform.name,-1))
-- local heroObj=Util.GetGameObject(this.gameObject,"Hero".._j)
-- if data.pointerEnter==nil then--防止拖到屏幕外
-- heroObj.transform:DOAnchorPos(Vector3.one,0)
-- heroObj.transform:SetParent(bgListGo[_j].transform)
-- heroObj.transform:SetSiblingIndex(1)
-- return
-- end
-- Log("<color=blue>被拖动名。。。</color><color=red>"..Pointgo.transform.name.."</color> ".." <color=blue>进入的UI名。。。</color><color=red>"..data.pointerEnter.gameObject.name.."</color>")
end
function this.OnDrag(Pointgo,data)--拖动中
if startBattle then
return
end
end
function this:GetPosInfo(name)
local str = string.split(name,"_")
if #str == 2 then
local buildNum = tonumber(str[1])
local roomNum = tonumber(str[2])
return {build = buildNum,room = roomNum}
else
return nil
end
end
function this:GetPosObj(pos)
local build = Util.GetGameObject(this.battles,"build"..pos.build)
local room =Util.GetGameObject(build,pos.build.."_"..pos.room)
return {build = build,room = room}
end
function this:InvalidClick()
local roomData = curUseBuildDataArr[curPlayerPos.build][curPlayerPos.room]
local index = 0
if roomData[1] == 0 then
index = 1
else
index = this:GetRoomPos(roomData)
end
this:SetPlayerPos(curPlayerPos,index)
end
function this:ValidClick(curPos)
if this:CurPosIsValid(curPos) then
local room = curUseBuildDataArr[curPos.build][curPos.room]
if room[1] == 0 then
this:InvalidClick()
else
local buildObj = this:GetPosObj(curPos).build
for i = 2, buildObj.transform.childCount - 1 do
local room = buildObj.transform:GetChild(i).gameObject
Util.GetGameObject(room,"tips"):SetActive(false)
end
if curPlayerPos.build == RatioNumberManager.enemyBuildId and curPos.build ~= RatioNumberManager.palyerBuildId and curPlayerPos.room ~= curPos.room then
this:BattleForwardLogic(curPlayerPos)
end
this:BattleLogic(curPos)
end
else
this:InvalidClick()
end
end
function this:CurPosIsValid(curPos)
local valid = false
if curPos.build ~= curPlayerPos.build then
valid = true
else
valid = this:ValidRoomIndex(curPos)
end
return valid
end
function this:ValidRoomIndex(curPos)
local buildInfo = curUseBuildDataArr[curPos.build]
local left = this:GetSelectRoomIndex(buildInfo,curPlayerPos.room - 1,-1)
local right = this:GetSelectRoomIndex(buildInfo,curPlayerPos.room+1,1)
if left==curPos.room or right==curPos.room or curPos.room == curPlayerPos.room then
-- this:BattleLogic(curPos)
return true
else
-- this:InvalidClick()
return false
end
end
function this:BattleLogic(curPos)
local room = curUseBuildDataArr[curPos.build][curPos.room]
local index = this:GetRoomPos(room)
local enemy = this:GetRoomEnemy(room)
SoundManager.PlayMusic(SoundConfig.BGM_RATION_LEVEL)
local battleResult = false
if enemy then
-- if RatioNumberManager.gameIndex == 1 then
-- -- isGuide = false
-- end
startBattle = true
local power = Util.GetGameObject(enemy.enemy,"power"):GetComponent("Text")
local hj = Util.GetGameObject(enemy.enemy,"hj"):GetComponent("Text")
if enemy.type == 2 then
if enemy.enemyType == 4 then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
battleResult =true
elseif enemy.enemyType == 5 then
RatioNumberManager.curPlayerHj = RatioNumberManager.curPlayerHj + enemy.power
enemy.power = 0
battleResult =true
end
SoundManager.PlaySound(SoundConfig.SOUND_RATION_ZHUNAGBEI)
else
SoundManager.PlaySound(SoundConfig.SOUND_RATION_ATTACK)
battleResult = this.EnemyBattle(enemy)
end
this:SetPlayerInfo(curPos,index)
if battleTime then
battleTime:Stop()
battleTime = nil
end
local func = function()
if enemy.anim then
enemy.anim.AnimationState:SetAnimation(0,"idle",true)
if enemy.type == 2 and enemy.enemyType ==3 then
end
end
this.playerAnim.AnimationState:SetAnimation(0, "idle", true)
power.text = enemy.power
hj.text = enemy.hj
local die = not this:EnemyIsDie(enemy)
if die then
enemy.enemy.gameObject:SetActive(die)
else
if enemy.type == 1 then
local dieeffect = Util.GetGameObject(enemy.enemy,"die")
dieeffect:SetActive(true)
local time = Timer.New(function()
enemy.enemy.gameObject:SetActive(die)
dieeffect:SetActive(false)
end,0.75)
time:Start()
else
enemy.enemy.gameObject:SetActive(false)
end
end
this.power.text = RatioNumberManager.curPlayerPower
this.hj.text= RatioNumberManager.curPlayerHj
this.hj.gameObject:SetActive(RatioNumberManager.curPlayerHj~=0)
curPlayerPos.build = curPos.build
curPlayerPos.room = curPos.room
if battleResult then
local arr = this:GetArrowEnemy()
if arr then
for i = 1, #arr do
local anim =arr[i]
anim.anim.AnimationState:SetAnimation(0,"attack",true)
local arrow = Util.GetGameObject(anim.enemy,"attackArr")
arrow:SetActive(true)
this.SetArrowRot(arrow)
local pos = UIManager.GetLocalPositionToTarget(anim.enemy,this.playerObj)
arrow.transform:DOLocalMove(pos, 0.5, false):OnStart(function ()
end):OnComplete(function ()
arrow:SetActive(false)
arrow.transform.localPosition = Vector2.one
end)
end
this.playerAnim.AnimationState:SetAnimation(0, "hit", true)
if battleOverTime then
battleOverTime:Stop()
battleOverTime = nil
end
battleOverTime = Timer.New(function()
this.power.text = RatioNumberManager.curPlayerPower
this.hj.gameObject:SetActive(RatioNumberManager.curPlayerHj~=0)
this.hj.text= RatioNumberManager.curPlayerHj
for i = 1, #arr do
local anim =arr[i]
anim.anim.AnimationState:SetAnimation(0,"idle",true)
end
this.playerAnim.AnimationState:SetAnimation(0, "idle", true)
if RatioNumberManager.curPlayerPower == 0 then
this:GameOverFail()
else
this:BattleOverLogic(curPos)
end
end,0.5)
battleOverTime:Start()
else
this:BattleOverLogic(curPos)
end
else
this:GameOverFail()
end
end
battleTime = Timer.New(function()
func()
end,1)
if enemy.anim then
this.playerAnim.AnimationState:SetAnimation(0, "attack", true)
enemy.anim.AnimationState:SetAnimation(0,"attack",true)
if enemy.type == 2 and enemy.enemyType ==3 then
local arrow = Util.GetGameObject(enemy.enemy,"attackArr")
arrow:SetActive(true)
this.SetArrowRot(arrow)
local pos = UIManager.GetLocalPositionToTarget(enemy.enemy,this.playerObj)
arrow.transform:DOLocalMove(pos, 0.5, false):OnStart(function ()
end):OnComplete(function ()
arrow:SetActive(false)
arrow.transform.localPosition = Vector2.one
end)
end
battleTime:Start()
else
func()
end
else
this:InvalidClick()
end
end
function this.SetArrowRot(arrow)
local targ = this.playerObj
local at = arrow
local dx = targ.transform.position.x - at.transform.transform.position.x
local dy = targ.transform.position.y - at.transform.transform.position.y
local rotationz = Mathf.Atan2(dy,dx) * 180 /Mathf.PI
rotationz = rotationz - 90
local addRotationZ = rotationz - at.transform.eulerAngles.z
if addRotationZ > 180 then
addRotationZ = addRotationZ - 360
end
at.transform.eulerAngles = Vector3.New(0, 0, at.transform.eulerAngles.z + addRotationZ);
end
function this.EnemyBattle(enemy)
local battleResult =false
if enemy.enemyType == 2 then
if enemy.hj == 0 then
if RatioNumberManager.curPlayerHj > 0 then
this.RationNum(enemy.power)
battleResult =true
if enemy.power <= RatioNumberManager.curPlayerPower then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
else
enemy.power = enemy.power - RatioNumberManager.curPlayerPower
end
else
if enemy.power <= RatioNumberManager.curPlayerPower then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
battleResult =true
end
end
else
enemy.hj = enemy.hj - RatioNumberManager.curPlayerPower
if enemy.hj < 0 then
enemy.hj = 0
end
if RatioNumberManager.curPlayerHj > 0 then
battleResult =true
this.RationNum(enemy.power)
else
if enemy.power <= RatioNumberManager.curPlayerPower then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
battleResult =true
end
end
end
else
if enemy.enemyType == 3 then
if enemy.power <= RatioNumberManager.curPlayerPower then
battleResult =true
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
end
else
if RatioNumberManager.curPlayerHj > 0 then
this.RationNum(enemy.power)
battleResult =true
if enemy.power <= RatioNumberManager.curPlayerPower then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
else
enemy.power = enemy.power - RatioNumberManager.curPlayerPower
end
else
if enemy.power <= RatioNumberManager.curPlayerPower then
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower + enemy.power
enemy.power = 0
battleResult =true
end
end
end
end
return battleResult
end
function this.RationNum(num)
RatioNumberManager.curPlayerHj = RatioNumberManager.curPlayerHj - num
if RatioNumberManager.curPlayerHj < 0 then
RatioNumberManager.curPlayerHj = 0
end
end
function this:GetArrowEnemy()
local arrow = {}
local curBuildData =curUseBuildDataArr[RatioNumberManager.enemyBuildId]
local power = 0
for i = 1, #curBuildData do
local room = curBuildData[i]
for j = 1, #room do
local enemy = room[j]
if enemy.type == 1 and enemy.enemyType == 3 and not this:EnemyIsDie(enemy) then
power = power + enemy.power
table.insert(arrow,enemy)
end
end
end
RatioNumberManager.curPlayerPower = RatioNumberManager.curPlayerPower - power
if RatioNumberManager.curPlayerPower < 0 then
RatioNumberManager.curPlayerPower = 0
end
return arrow
end
function this:BattleOverLogic(curPos)
local curBuild = curUseBuildDataArr[RatioNumberManager.enemyBuildId]
startBattle = false
for i = 1, #curBuild do
local room = curBuild[i]
if not this:RoomIsDie(room) then
local left = this:GetSelectRoomIndex(curBuild,curPos.room - 1,-1)
local right = this:GetSelectRoomIndex(curBuild,curPos.room+1,1)
if left then
local pos = {build = RatioNumberManager.enemyBuildId , room = left}
local obj = this:GetPosObj(pos)
Util.GetGameObject(obj.room,"tips"):SetActive(true)
end
if right then
local pos = {build = RatioNumberManager.enemyBuildId , room = right}
local obj = this:GetPosObj(pos)
Util.GetGameObject(obj.room,"tips"):SetActive(true)
end
local pos = {build = RatioNumberManager.enemyBuildId , room = curPos.room}
local obj = this:GetPosObj(pos)
Util.GetGameObject(obj.room,"tips"):SetActive(true)
return
end
end
if RatioNumberManager.enemyBuildId >=#curUseBuildDataArr then
Log("游戏胜利")
DoTween.To(DG.Tweening.Core.DOGetter_float( function () return this.playerObj.transform.localPosition.y end),
DG.Tweening.Core.DOSetter_float(function (progress)
this.playerObj.transform.localPosition = Vector3(0,progress,0)
end), 2000, 1):SetEase(Ease.InQuad):OnComplete(function()
NetManager.CompareNumEndGameRequest(RatioNumberManager.GetCurGameInxed(),1,function(msg)
if #msg.drop.itemlist == 0 then
PopupTipPanel.ShowTip("我们已经收到了通关奖励")
UIManager.ClosePanel(UIName.RationNumberGamePanel)
UIManager.OpenPanel(UIName.RatioNumberLevelPanel)
else
UIManager.OpenPanel(UIName.RewardItemPopup, msg.drop, 1, function()
UIManager.ClosePanel(UIName.RationNumberGamePanel)
UIManager.OpenPanel(UIName.RatioNumberLevelPanel)
end)
end
end)
end)
else
RatioNumberManager.palyerBuildId = RatioNumberManager.enemyBuildId
RatioNumberManager.enemyBuildId = RatioNumberManager.enemyBuildId + 1
RatioNumberManager.playerPower = RatioNumberManager.curPlayerPower
RatioNumberManager.PlayerHj = RatioNumberManager.curPlayerHj
this:MoveBuild()
end
end
function this:MoveBuild()
local build = this:GetPosObj(curPlayerPos)
local img = build.room:GetComponent("Image")
img.sprite = this.lspLoader:LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[3]).Name)
local top = Util.GetGameObject(build.build,"top"):GetComponent("Image")
top.sprite = this.lspLoader:LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[4]).Name)
startBattle = true
for i = 1, #curUseBuildDataArr do
local build = Util.GetGameObject(this.battles,"build"..i)
DoTween.To(DG.Tweening.Core.DOGetter_float( function () return build.transform.localPosition.x end),
DG.Tweening.Core.DOSetter_float(function (progress)
build.transform.localPosition = Vector3(progress,0,0)
end), build.transform.localPosition.x - 540, 1):SetEase(Ease.InQuad):OnComplete(function()
if i == #curUseBuildDataArr then
startBattle = false
end
end)
end
end
function this:BattleForwardLogic(curPos)
local room = curUseBuildDataArr[curPos.build][curPos.room]
if this:RoomIsDie(room) then
local curRoomObj = this:GetPosObj(curPos)
this:AddPlayerBuilRoom(curRoomObj.room)
this:UPEnemyBuild()
end
end
function this:AddPlayerBuilRoom(room)
-- local playerBuild = curUseBuildDataArr[curPlayerPos.build]
local playerBuildObj = Util.GetGameObject(this.battles,"build"..RatioNumberManager.palyerBuildId)
local top = Util.GetGameObject(playerBuildObj,"top")
-- local drageView = Util.GetGameObject(room,room.name)
room.transform:SetParent(playerBuildObj.transform)
room.transform.localPosition = Vector2.New(0,top.transform.localPosition.y)
room.name = RatioNumberManager.palyerBuildId.."_"..1
-- drageView.name = room.name
local img = room:GetComponent("Image")
img.sprite = this.lspLoader:LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,RatioNumberManager.playerResStr[3]).Name)
top.transform.localPosition = Vector2.New(0,top.transform.localPosition.y + 200)
end
function this:UPEnemyBuild()
local enemyBuild = curUseBuildDataArr[RatioNumberManager.enemyBuildId]
local buildObj = Util.GetGameObject(this.battles,"build"..RatioNumberManager.enemyBuildId)
local top = Util.GetGameObject(buildObj,"top")
local index = 0
for i = 1,#enemyBuild do
local room = enemyBuild[i]
if not this:RoomIsDie(room) then
local roomObj = Util.GetGameObject(buildObj,RatioNumberManager.enemyBuildId.."_"..i)
roomObj.transform.localPosition = Vector2.New(0,-500 + index * 200 )
index = index + 1
end
end
top.transform.localPosition =Vector2.New(0,-500 + index * 200)
end
function this:RoomIsDie(room)
for i = 1 ,#room do
local enemy = room[i]
if enemy.power ~= 0 or enemy.hj ~= 0 then
return false
end
end
return true
end
function this:GetRoomEnemy(room)
for i = 1, #room do
local enemy = room[i]
if not this:EnemyIsDie(enemy) then
return enemy
end
end
return nil
end
function this:GetSelectRoomIndex(build,roomId,off)
if roomId<1 or roomId > #build then
return nil
else
local room = build[roomId]
for i = 1, #room do
local enemy =room[i]
if not this:EnemyIsDie(enemy) then
return roomId
end
end
roomId = roomId + off
return this:GetSelectRoomIndex(build,roomId,off)
end
end
function this:GetRoomPos(roomData)
for i = 1, #roomData do
local enemy = roomData[i]
if not this:EnemyIsDie(enemy) then
return (3 - #roomData + (i - 1)) - 1
end
end
return 1
end
function this:EnemyIsDie(enemy)
local isDie = true
if enemy.type == 2 then
if enemy.power > 0 then
isDie = false
end
else
if enemy.enemyType == 2 then
if enemy.hj > 0 or enemy.power > 0 then
isDie = false
end
else
if enemy.power > 0 then
isDie = false
end
end
end
return isDie
end
function this:SetPlayerPos(curPos,index )
local posObj = this:GetPosObj(curPos)
local playerPos = Util.GetGameObject(posObj.room,"Pos/playerPos")
playerPos.transform.localPosition = Vector2.New(index*100+-100,0)
end
function this:SetPlayerInfo(pos,index)
local build =this:GetPosObj(pos)
local playerPos = Util.GetGameObject(build.room,"Pos/playerPos")
-- this.power.text = RatioNumberManager.curPlayerPower
this.playerObj.transform:SetParent(playerPos.transform)
this.playerObj.transform.localPosition = Vector2.zero
this:SetPlayerPos(pos,index)
end
function this:GameOverFail()
Log("游戏结束")
startBattle = false
local dieeffect = Util.GetGameObject(this.playerObj,"die")
local dieImg = Util.GetGameObject(this.playerObj,"dieImg")
this.live.gameObject:SetActive(false)
dieImg:SetActive(true)
dieeffect:SetActive(true)
local time = Timer.New(function()
NetManager.CompareNumEndGameRequest(RatioNumberManager.GetCurGameInxed(),0,function()
this.failPanel:SetActive(true)
dieeffect:SetActive(false)
end)
end,0.9)
time:Start()
end
function this:RestartGame()
startBattle = false
RatioNumberManager.curPlayerPower = RatioNumberManager.playerPower
RatioNumberManager.curPlayerHj = RatioNumberManager.PlayerHj
this.power.text = RatioNumberManager.curPlayerPower
this.hj.text= RatioNumberManager.curPlayerHj
this.hj.gameObject:SetActive(RatioNumberManager.curPlayerHj~=0)
this.playerObj.transform:SetParent(this.gameObject.transform)
local playerBuild = Util.GetGameObject(this.battles,"build"..RatioNumberManager.palyerBuildId)
local enemyBUild = Util.GetGameObject(this.battles,"build"..RatioNumberManager.enemyBuildId)
-- local
local dieImg = Util.GetGameObject(this.playerObj,"dieImg")
this.live.gameObject:SetActive(true)
dieImg:SetActive(false)
local newPlayerBuild = this:GetBuild(1)
newPlayerBuild.name = "build"..RatioNumberManager.palyerBuildId
newPlayerBuild.transform.localPosition = playerBuild.transform.localPosition
enemyBUild.transform:SetParent(this.lj.transform)
playerBuild.transform:SetParent(this.lj.transform)
local newPlayerRoom = this:GetRoom(newPlayerBuild,1)
newPlayerRoom.name = RatioNumberManager.palyerBuildId.."_"..1
local buildTop = Util.GetGameObject(newPlayerBuild,"top")
newPlayerRoom.transform.localPosition = Vector2.New(0,-500)
buildTop.transform.localPosition = Vector2.New(0,-300)
curPlayerPos = {build = RatioNumberManager.palyerBuildId , room = 1}
this:SetPlayerInfo(curPlayerPos,1)
local newEnemyBuild = this:GetBuild(2)
newEnemyBuild.name ="build"..RatioNumberManager.enemyBuildId
newEnemyBuild.transform.localPosition = enemyBUild.transform.localPosition
local enemyBuildTop = Util.GetGameObject(newEnemyBuild,"top")
local enemyBuildData =curUseBuildDataArr[RatioNumberManager.enemyBuildId]
local i = RatioNumberManager.enemyBuildId
local buildId = RatioNumberManager.buildIds[i]
local buildInfo = ConfigManager.GetConfigData(ConfigName.CompareNumBuild,buildId)
local curData = curUseBuildDataArr[i]
for j = 1, #enemyBuildData do
local room = self:GetRoom(newEnemyBuild,2)
local roomdata = curData[j]
-- local drageView = Util.GetGameObject(room,"DragView")
room.name = i.."_"..j
-- drageView.name = room.name
room.transform.localPosition = Vector2.New(0,-500 + (j-1) * 200)
local enemyPos= Util.GetGameObject(room,"Pos/enemyPos")
local enemys = buildInfo.Formula[j]
for x =1,#enemys do
local enemyId = enemys[x]
local enemy = this:GetEnemy(enemyId)
local x1 = -100 + (3 - #enemys + (x - 1)) *100
enemy.enemy.transform:SetParent(enemyPos.transform)
enemy.enemy.transform.localPosition = Vector2.New(x1,0)
enemy.enemy.transform.localScale = Vector2.one
roomdata[x] = enemy
end
end
enemyBuildTop.transform.localPosition = Vector2.New(0,-500 + #enemyBuildData * 200)
end
-- function this.GuideOnce()
-- local playerRoom = this:GetPosObj(curPlayerPos).room
-- this.guideImage:SetActive(true)
-- this.GuideMove(playerRoom.transform.position,Vector2.New(270,-500))
-- end
-- function this.GuideMove(pos,vector)
-- this.guideImage.transform.position=pos
-- this.guideImage.transform:DOLocalMove(vector, 1, false):OnStart(function ()
-- end):OnComplete(function ()
-- if isGuide then
-- this.GuideMove(pos,vector)
-- else
-- this.guideImage:SetActive(false)
-- end
-- end)
-- end
return RatioNumberGamePanel