1046 lines
38 KiB
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 |