整理虚拟按键相关函数
This commit is contained in:
@@ -363,7 +363,7 @@ end
|
|||||||
|
|
||||||
--Game draw
|
--Game draw
|
||||||
local VK=virtualkey
|
local VK=virtualkey
|
||||||
function drawVirtualKeys()
|
function drawVirtualkeys()
|
||||||
if SETTING.VKSwitch then
|
if SETTING.VKSwitch then
|
||||||
local a=SETTING.VKAlpha
|
local a=SETTING.VKAlpha
|
||||||
local _
|
local _
|
||||||
@@ -403,6 +403,57 @@ function drawVirtualKeys()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function onVirtualkey(x,y)
|
||||||
|
local dist,nearest=1e10
|
||||||
|
for K=1,#VK do
|
||||||
|
local B=VK[K]
|
||||||
|
if B.ava then
|
||||||
|
local d1=(x-B.x)^2+(y-B.y)^2
|
||||||
|
if d1<B.r^2 then
|
||||||
|
if d1<dist then
|
||||||
|
nearest,dist=K,d1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nearest
|
||||||
|
end
|
||||||
|
function pressVirtualkey(t,x,y)
|
||||||
|
local B=VK[t]
|
||||||
|
B.isDown=true
|
||||||
|
B.pressTime=10
|
||||||
|
if SETTING.VKTrack then
|
||||||
|
if SETTING.VKDodge then--Button collision (not accurate)
|
||||||
|
for i=1,#VK do
|
||||||
|
local b=VK[i]
|
||||||
|
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--Hit depth(Neg means distance)
|
||||||
|
if d>0 then
|
||||||
|
b.x=b.x+(b.x-B.x)*d*b.r*5e-4
|
||||||
|
b.y=b.y+(b.y-B.y)*d*b.r*5e-4
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local O=VK_org[t]
|
||||||
|
local _FW,_CW=SETTING.VKTchW,1-SETTING.VKCurW
|
||||||
|
local _OW=1-_FW-_CW
|
||||||
|
|
||||||
|
--Auto follow: finger, current, origin (weight from setting)
|
||||||
|
B.x,B.y=x*_FW+B.x*_CW+O.x*_OW,y*_FW+B.y*_CW+O.y*_OW
|
||||||
|
end
|
||||||
|
SFX.play("virtualKey",SETTING.VKSFX)
|
||||||
|
VIB(SETTING.VKVIB)
|
||||||
|
end
|
||||||
|
function updateVirtualkey()
|
||||||
|
if SETTING.VKSwitch then
|
||||||
|
for i=1,#VK do
|
||||||
|
_=VK[i]
|
||||||
|
if _.pressTime>0 then
|
||||||
|
_.pressTime=_.pressTime-1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--Game
|
--Game
|
||||||
@@ -478,7 +529,7 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
|
|||||||
end
|
end
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
end
|
end
|
||||||
function restoreVirtualKey()
|
function restoreVirtualkey()
|
||||||
for i=1,#VK_org do
|
for i=1,#VK_org do
|
||||||
local B,O=virtualkey[i],VK_org[i]
|
local B,O=virtualkey[i],VK_org[i]
|
||||||
B.ava=O.ava
|
B.ava=O.ava
|
||||||
@@ -683,7 +734,7 @@ do--function resetGameData(args)
|
|||||||
destroyPlayers()
|
destroyPlayers()
|
||||||
GAME.curMode.load(playerData)
|
GAME.curMode.load(playerData)
|
||||||
initPlayerPosition(args:find("q"))
|
initPlayerPosition(args:find("q"))
|
||||||
restoreVirtualKey()
|
restoreVirtualkey()
|
||||||
if GAME.modeEnv.task then
|
if GAME.modeEnv.task then
|
||||||
for i=1,#PLAYERS do
|
for i=1,#PLAYERS do
|
||||||
PLAYERS[i]:newTask(GAME.modeEnv.task)
|
PLAYERS[i]:newTask(GAME.modeEnv.task)
|
||||||
|
|||||||
@@ -8,21 +8,9 @@ local max,sin=math.max,math.sin
|
|||||||
|
|
||||||
local SCR=SCR
|
local SCR=SCR
|
||||||
local VK=virtualkey
|
local VK=virtualkey
|
||||||
local function onVirtualkey(x,y)
|
local onVirtualkey=onVirtualkey
|
||||||
local dist,nearest=1e10
|
local pressVirtualkey=pressVirtualkey
|
||||||
for K=1,#VK do
|
local updateVirtualkey=updateVirtualkey
|
||||||
local B=VK[K]
|
|
||||||
if B.ava then
|
|
||||||
local d1=(x-B.x)^2+(y-B.y)^2
|
|
||||||
if d1<B.r^2 then
|
|
||||||
if d1<dist then
|
|
||||||
nearest,dist=K,d1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return nearest
|
|
||||||
end
|
|
||||||
|
|
||||||
local hideChatBox
|
local hideChatBox
|
||||||
local textBox=WIDGET.newTextBox{name="texts",x=340,y=80,w=600,h=550,hide=function()return hideChatBox end}
|
local textBox=WIDGET.newTextBox{name="texts",x=340,y=80,w=600,h=550,hide=function()return hideChatBox end}
|
||||||
@@ -70,31 +58,7 @@ function scene.touchDown(_,x,y)
|
|||||||
local t=onVirtualkey(x,y)
|
local t=onVirtualkey(x,y)
|
||||||
if t then
|
if t then
|
||||||
PLAYERS[1]:pressKey(t)
|
PLAYERS[1]:pressKey(t)
|
||||||
if SETTING.VKSFX>0 then
|
pressVirtualkey(t,x,y)
|
||||||
SFX.play("virtualKey",SETTING.VKSFX)
|
|
||||||
end
|
|
||||||
local B=VK[t]
|
|
||||||
B.isDown=true
|
|
||||||
B.pressTime=10
|
|
||||||
if SETTING.VKTrack then
|
|
||||||
if SETTING.VKDodge then--Button collision (not accurate)
|
|
||||||
for i=1,#VK do
|
|
||||||
local b=VK[i]
|
|
||||||
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--Hit depth(Neg means distance)
|
|
||||||
if d>0 then
|
|
||||||
b.x=b.x+(b.x-B.x)*d*b.r*5e-4
|
|
||||||
b.y=b.y+(b.y-B.y)*d*b.r*5e-4
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local O=VK_org[t]
|
|
||||||
local _FW,_CW=SETTING.VKTchW,1-SETTING.VKCurW
|
|
||||||
local _OW=1-_FW-_CW
|
|
||||||
|
|
||||||
--Auto follow: finger, current, origin (weight from setting)
|
|
||||||
B.x,B.y=x*_FW+B.x*_CW+O.x*_OW,y*_FW+B.y*_CW+O.y*_OW
|
|
||||||
end
|
|
||||||
VIB(SETTING.VKVIB)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.touchUp(_,x,y)
|
function scene.touchUp(_,x,y)
|
||||||
@@ -293,14 +257,7 @@ function scene.update(dt)
|
|||||||
touchMoveLastFrame=false
|
touchMoveLastFrame=false
|
||||||
|
|
||||||
--Update virtualkey animation
|
--Update virtualkey animation
|
||||||
if SETTING.VKSwitch then
|
updateVirtualkey()
|
||||||
for i=1,#VK do
|
|
||||||
_=VK[i]
|
|
||||||
if _.pressTime>0 then
|
|
||||||
_.pressTime=_.pressTime-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not playing then
|
if not playing then
|
||||||
heartBeatTimer=heartBeatTimer+dt
|
heartBeatTimer=heartBeatTimer+dt
|
||||||
@@ -393,7 +350,7 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Virtual keys
|
--Virtual keys
|
||||||
drawVirtualKeys()
|
drawVirtualkeys()
|
||||||
|
|
||||||
--Warning
|
--Warning
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
|
|||||||
@@ -6,21 +6,9 @@ local max,sin=math.max,math.sin
|
|||||||
|
|
||||||
local SCR=SCR
|
local SCR=SCR
|
||||||
local VK=virtualkey
|
local VK=virtualkey
|
||||||
local function onVirtualkey(x,y)
|
local onVirtualkey=onVirtualkey
|
||||||
local dist,nearest=1e10
|
local pressVirtualkey=pressVirtualkey
|
||||||
for K=1,#VK do
|
local updateVirtualkey=updateVirtualkey
|
||||||
local B=VK[K]
|
|
||||||
if B.ava then
|
|
||||||
local d1=(x-B.x)^2+(y-B.y)^2
|
|
||||||
if d1<B.r^2 then
|
|
||||||
if d1<dist then
|
|
||||||
nearest,dist=K,d1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return nearest
|
|
||||||
end
|
|
||||||
|
|
||||||
local noTouch,noKey=false,false
|
local noTouch,noKey=false,false
|
||||||
local touchMoveLastFrame=false
|
local touchMoveLastFrame=false
|
||||||
@@ -48,31 +36,7 @@ function scene.touchDown(_,x,y)
|
|||||||
local t=onVirtualkey(x,y)
|
local t=onVirtualkey(x,y)
|
||||||
if t then
|
if t then
|
||||||
PLAYERS[1]:pressKey(t)
|
PLAYERS[1]:pressKey(t)
|
||||||
if SETTING.VKSFX>0 then
|
pressVirtualkey(t,x,y)
|
||||||
SFX.play("virtualKey",SETTING.VKSFX)
|
|
||||||
end
|
|
||||||
local B=VK[t]
|
|
||||||
B.isDown=true
|
|
||||||
B.pressTime=10
|
|
||||||
if SETTING.VKTrack then
|
|
||||||
if SETTING.VKDodge then--Button collision (not accurate)
|
|
||||||
for i=1,#VK do
|
|
||||||
local b=VK[i]
|
|
||||||
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--Hit depth(Neg means distance)
|
|
||||||
if d>0 then
|
|
||||||
b.x=b.x+(b.x-B.x)*d*b.r*5e-4
|
|
||||||
b.y=b.y+(b.y-B.y)*d*b.r*5e-4
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local O=VK_org[t]
|
|
||||||
local _FW,_CW=SETTING.VKTchW,1-SETTING.VKCurW
|
|
||||||
local _OW=1-_FW-_CW
|
|
||||||
|
|
||||||
--Auto follow: finger, current, origin (weight from setting)
|
|
||||||
B.x,B.y=x*_FW+B.x*_CW+O.x*_OW,y*_FW+B.y*_CW+O.y*_OW
|
|
||||||
end
|
|
||||||
VIB(SETTING.VKVIB)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.touchUp(_,x,y)
|
function scene.touchUp(_,x,y)
|
||||||
@@ -168,14 +132,7 @@ function scene.update(dt)
|
|||||||
touchMoveLastFrame=false
|
touchMoveLastFrame=false
|
||||||
|
|
||||||
--Update virtualkey animation
|
--Update virtualkey animation
|
||||||
if SETTING.VKSwitch then
|
updateVirtualkey()
|
||||||
for i=1,#VK do
|
|
||||||
_=VK[i]
|
|
||||||
if _.pressTime>0 then
|
|
||||||
_.pressTime=_.pressTime-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--Replay
|
--Replay
|
||||||
if GAME.replaying then
|
if GAME.replaying then
|
||||||
@@ -186,11 +143,10 @@ function scene.update(dt)
|
|||||||
if key==0 then--Just wait
|
if key==0 then--Just wait
|
||||||
elseif key<=32 then--Press key
|
elseif key<=32 then--Press key
|
||||||
P1:pressKey(key)
|
P1:pressKey(key)
|
||||||
VK[key].isDown=true
|
pressVirtualkey(key)
|
||||||
VK[key].pressTime=10
|
|
||||||
elseif key<=64 then--Release key
|
elseif key<=64 then--Release key
|
||||||
VK[key-32].isDown=false
|
|
||||||
P1:releaseKey(key-32)
|
P1:releaseKey(key-32)
|
||||||
|
VK[key-32].isDown=false
|
||||||
end
|
end
|
||||||
_=_+2
|
_=_+2
|
||||||
end
|
end
|
||||||
@@ -284,7 +240,7 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Virtual keys
|
--Virtual keys
|
||||||
drawVirtualKeys()
|
drawVirtualkeys()
|
||||||
|
|
||||||
--Attacking & Being attacked
|
--Attacking & Being attacked
|
||||||
if GAME.modeEnv.royaleMode then
|
if GAME.modeEnv.royaleMode then
|
||||||
|
|||||||
Reference in New Issue
Block a user