From f19610e458583a7d0aa0899fb73b2580e96c871a Mon Sep 17 00:00:00 2001 From: assada Date: Sat, 1 Jun 2024 22:46:36 +0300 Subject: [PATCH] tank --- source/assets/fonts/Mini Sans 2X.fnt | 530 +++++++++--------- .../assets/sprites/old_player-table-64-64.png | Bin 0 -> 4672 bytes source/assets/sprites/player-table-64-64.png | Bin 4672 -> 8282 bytes source/assets/sprites/tank.png | Bin 5522 -> 4215 bytes source/assets/sprites/tankD.png | Bin 0 -> 10976 bytes source/main.lua | 3 +- source/scenes/Game.lua | 31 +- source/scripts/groundSprite.lua | 8 +- source/scripts/player.lua | 47 +- source/scripts/tankSprite.lua | 55 ++ source/utilities/enum.lua | 16 +- source/utilities/ui.lua | 304 +++++----- 12 files changed, 543 insertions(+), 451 deletions(-) create mode 100644 source/assets/sprites/old_player-table-64-64.png create mode 100644 source/assets/sprites/tankD.png create mode 100644 source/scripts/tankSprite.lua diff --git a/source/assets/fonts/Mini Sans 2X.fnt b/source/assets/fonts/Mini Sans 2X.fnt index cb1a5ff..778c005 100644 --- a/source/assets/fonts/Mini Sans 2X.fnt +++ b/source/assets/fonts/Mini Sans 2X.fnt @@ -1,265 +1,265 @@ ---metrics={"baseline":0,"xHeight":0,"capHeight":0,"pairs":{"Ta":[-4,1],"Tc":[-4,1],"Te":[-4,1],"To":[-4,1],"Tm":[-4,1],"Tn":[-4,1],"Tr":[-4,1],"Tu":[-4,1],"Tv":[-4,1],"Tw":[-4,1],"fB":[2,1],"fD":[2,1],"fE":[2,1],"fF":[2,1],"fH":[2,1],"fI":[2,1],"fK":[2,1],"fL":[2,1],"fM":[2,1],"fN":[2,1],"fP":[2,1],"fR":[2,1],"fW":[2,1],"fb":[2,1],"fh":[2,1],"fk":[2,1],"fC":[2,1],"fG":[2,1],"fO":[2,1],"fQ":[2,1],"fU":[2,1],"fl":[2,1],"lB":[1,1],"lD":[1,1],"lE":[1,1],"lF":[1,1],"lH":[1,1],"lI":[1,1],"lK":[1,1],"lL":[1,1],"lM":[1,1],"lN":[1,1],"lP":[1,1],"lR":[1,1],"lW":[1,1],"lb":[1,1],"lh":[1,1],"lk":[1,1],"lC":[1,1],"lG":[1,1],"lO":[1,1],"lQ":[1,1],"lU":[0,1,1,1],"ll":[0,1,1,1],"la":[0,1,1,1],"lc":[0,1,1,1],"le":[0,1,1,1],"lo":[0,1,1,1],"lm":[1,1],"ln":[1,1],"lr":[1,1],"lu":[0,1,1,1],"lv":[0,1,1,1],"lw":[0,1,1,1],"Fa":[-2,1],"Fc":[-2,1],"Fe":[-2,1],"Fo":[-2,1],"Fm":[-2,1],"Fn":[-2,1],"Fr":[-2,1],"Fu":[-2,1],"Fv":[-2,1],"Fw":[-2,1],"aT":[-4,2],"uT":[-4,2],"gT":[-4,2],"yT":[-4,2],"mT":[-4,2],"nT":[-4,2],"vT":[-4,2],"wT":[-4,2],"Td":[-4,0],"Tf":[-2,0],"Tg":[-4,0],"Tp":[-4,0],"Tq":[-4,0],"Ts":[-4,0],"Tt":[-2,0],"Tx":[-4,0],"Ty":[-4,0],"Tz":[-4,0],"TJ":[-4,0],"T�":[-4,0],"bT":[-4,0],"cT":[-4,0],"eT":[-4,0],"fA":[1,0,2,0],"fT":[2,0],"fi":[2,0],"fj":[2,0],"fY":[2,0],"fJ":[-2,0],"fS":[2,0],"fV":[2,0],"fX":[2,0],"fZ":[2,0],"hT":[-4,0],"kT":[-4,0],"lA":[1,0],"lT":[-1,0],"ld":[0,0,1,0],"lf":[-1,0],"lg":[0,0,1,0],"li":[1,0],"lj":[1,0],"lp":[1,0],"lq":[0,0,1,0],"ls":[1,0],"lt":[-1,0],"lx":[1,0],"ly":[0,0,1,0],"lz":[1,0],"lY":[-1,0],"lJ":[1,0],"lS":[1,0],"lV":[-1,0],"lX":[1,0],"lZ":[1,0],"l�":[-1,0],"oT":[-4,0],"pT":[-4,0],"qT":[-4,0],"rT":[-4,0],"rX":[-2,0],"rZ":[-2,0],"sT":[-4,0],"tT":[-2,0],"xT":[-4,0],"zT":[-4,0],"C�":[-2,0],"Ef":[-2,0],"Et":[-2,0],"E�":[-2,0],"Fd":[-2,0],"Ff":[-2,0],"Fg":[-2,0],"Fp":[-2,0],"Fq":[-2,0],"Fs":[-2,0],"Ft":[-2,0],"Fx":[-2,0],"Fy":[-2,0],"Fz":[-2,0],"FJ":[-2,0],"F�":[-2,0],"YJ":[-2,0],"Kf":[-2,0],"Kt":[-2,0],"K�":[-4,0],"LT":[-4,0],"Lf":[-2,0],"Lt":[-2,0],"LY":[-4,0],"LV":[-4,0],"L�":[-4,0],"PJ":[-2,0],"X�":[-2,0],"Z�":[-2,0],"�T":[-4,0],"�X":[-2,0],"�Z":[-2,0]},"left":["BDEFHIKLMNPRWbhk","CGOQ","Ul","aceo","mnr","uvw"],"right":["AQ","DO","HIMNWd","JU","au","gy","mn","vw"]} -tracking=2 - -0 12 -1 12 -2 12 -3 12 -4 12 -5 12 -6 12 -7 12 -8 12 -9 12 -space 8 -. 4 -A 12 -B 12 -T 12 -a 12 -b 12 -c 12 -d 12 -e 12 -f 8 -g 12 -h 12 -i 4 -j 4 -k 12 -l 5 -m 16 -n 12 -o 12 -p 12 -q 12 -r 12 -s 12 -t 8 -u 12 -v 12 -w 16 -x 12 -y 12 -z 12 -, 4 -C 12 -D 12 -E 12 -F 12 -G 12 -O 12 -H 12 -I 4 -! 4 -" 10 -' 4 -Y 12 -{ 8 -| 4 -} 8 -J 12 -K 14 -L 12 -M 14 -N 14 -P 12 -Q 12 -R 12 -S 12 -U 12 -V 14 -W 14 -X 12 -Z 12 -/ 12 -\ 12 -[ 6 -] 6 -: 4 -; 4 -^ 12 -_ 10 -` 8 -~ 16 -¥ 12 -… 16 -™ 14 -‼ 10 -© 18 -® 18 -� 16 -@ 18 -# 18 -$ 12 -% 14 -& 12 -( 6 -) 6 -* 12 -+ 12 -- 10 -= 10 -? 12 -< 10 -> 10 - -Ta -4 -Tc -4 -Te -4 -To -4 -Tm -4 -Tn -4 -Tr -4 -Tu -4 -Tv -4 -Tw -4 -fB 2 -fD 2 -fE 2 -fF 2 -fH 2 -fI 2 -fK 2 -fL 2 -fM 2 -fN 2 -fP 2 -fR 2 -fW 2 -fb 2 -fh 2 -fk 2 -fC 2 -fG 2 -fO 2 -fQ 2 -fU 2 -fl 2 -lB 1 -lD 1 -lE 1 -lF 1 -lH 1 -lI 1 -lK 1 -lL 1 -lM 1 -lN 1 -lP 1 -lR 1 -lW 1 -lb 1 -lh 1 -lk 1 -lC 1 -lG 1 -lO 1 -lQ 1 -lm 1 -ln 1 -lr 1 -Fa -2 -Fc -2 -Fe -2 -Fo -2 -Fm -2 -Fn -2 -Fr -2 -Fu -2 -Fv -2 -Fw -2 -aT -4 -uT -4 -gT -4 -yT -4 -mT -4 -nT -4 -vT -4 -wT -4 -Td -4 -Tf -2 -Tg -4 -Tp -4 -Tq -4 -Ts -4 -Tt -2 -Tx -4 -Ty -4 -Tz -4 -TJ -4 -T� -4 -bT -4 -cT -4 -eT -4 -fA 1 -fT 2 -fi 2 -fj 2 -fY 2 -fJ -2 -fS 2 -fV 2 -fX 2 -fZ 2 -hT -4 -kT -4 -lA 1 -lT -1 -lf -1 -li 1 -lj 1 -lp 1 -ls 1 -lt -1 -lx 1 -lz 1 -lY -1 -lJ 1 -lS 1 -lV -1 -lX 1 -lZ 1 -l� -1 -oT -4 -pT -4 -qT -4 -rT -4 -rX -2 -rZ -2 -sT -4 -tT -2 -xT -4 -zT -4 -C� -2 -Ef -2 -Et -2 -E� -2 -Fd -2 -Ff -2 -Fg -2 -Fp -2 -Fq -2 -Fs -2 -Ft -2 -Fx -2 -Fy -2 -Fz -2 -FJ -2 -F� -2 -YJ -2 -Kf -2 -Kt -2 -K� -4 -LT -4 -Lf -2 -Lt -2 -LY -4 -LV -4 -L� -4 -PJ -2 -X� -2 -Z� -2 -�T -4 -�X -2 -�Z -2 +--metrics={"baseline":0,"xHeight":0,"capHeight":0,"pairs":{"Ta":[-4,1],"Tc":[-4,1],"Te":[-4,1],"To":[-4,1],"Tm":[-4,1],"Tn":[-4,1],"Tr":[-4,1],"Tu":[-4,1],"Tv":[-4,1],"Tw":[-4,1],"fB":[2,1],"fD":[2,1],"fE":[2,1],"fF":[2,1],"fH":[2,1],"fI":[2,1],"fK":[2,1],"fL":[2,1],"fM":[2,1],"fN":[2,1],"fP":[2,1],"fR":[2,1],"fW":[2,1],"fb":[2,1],"fh":[2,1],"fk":[2,1],"fC":[2,1],"fG":[2,1],"fO":[2,1],"fQ":[2,1],"fU":[2,1],"fl":[2,1],"lB":[1,1],"lD":[1,1],"lE":[1,1],"lF":[1,1],"lH":[1,1],"lI":[1,1],"lK":[1,1],"lL":[1,1],"lM":[1,1],"lN":[1,1],"lP":[1,1],"lR":[1,1],"lW":[1,1],"lb":[1,1],"lh":[1,1],"lk":[1,1],"lC":[1,1],"lG":[1,1],"lO":[1,1],"lQ":[1,1],"lU":[0,1,1,1],"ll":[0,1,1,1],"la":[0,1,1,1],"lc":[0,1,1,1],"le":[0,1,1,1],"lo":[0,1,1,1],"lm":[1,1],"ln":[1,1],"lr":[1,1],"lu":[0,1,1,1],"lv":[0,1,1,1],"lw":[0,1,1,1],"Fa":[-2,1],"Fc":[-2,1],"Fe":[-2,1],"Fo":[-2,1],"Fm":[-2,1],"Fn":[-2,1],"Fr":[-2,1],"Fu":[-2,1],"Fv":[-2,1],"Fw":[-2,1],"aT":[-4,2],"uT":[-4,2],"gT":[-4,2],"yT":[-4,2],"mT":[-4,2],"nT":[-4,2],"vT":[-4,2],"wT":[-4,2],"Td":[-4,0],"Tf":[-2,0],"Tg":[-4,0],"Tp":[-4,0],"Tq":[-4,0],"Ts":[-4,0],"Tt":[-2,0],"Tx":[-4,0],"Ty":[-4,0],"Tz":[-4,0],"TJ":[-4,0],"T�":[-4,0],"bT":[-4,0],"cT":[-4,0],"eT":[-4,0],"fA":[1,0,2,0],"fT":[2,0],"fi":[2,0],"fj":[2,0],"fY":[2,0],"fJ":[-2,0],"fS":[2,0],"fV":[2,0],"fX":[2,0],"fZ":[2,0],"hT":[-4,0],"kT":[-4,0],"lA":[1,0],"lT":[-1,0],"ld":[0,0,1,0],"lf":[-1,0],"lg":[0,0,1,0],"li":[1,0],"lj":[1,0],"lp":[1,0],"lq":[0,0,1,0],"ls":[1,0],"lt":[-1,0],"lx":[1,0],"ly":[0,0,1,0],"lz":[1,0],"lY":[-1,0],"lJ":[1,0],"lS":[1,0],"lV":[-1,0],"lX":[1,0],"lZ":[1,0],"l�":[-1,0],"oT":[-4,0],"pT":[-4,0],"qT":[-4,0],"rT":[-4,0],"rX":[-2,0],"rZ":[-2,0],"sT":[-4,0],"tT":[-2,0],"xT":[-4,0],"zT":[-4,0],"C�":[-2,0],"Ef":[-2,0],"Et":[-2,0],"E�":[-2,0],"Fd":[-2,0],"Ff":[-2,0],"Fg":[-2,0],"Fp":[-2,0],"Fq":[-2,0],"Fs":[-2,0],"Ft":[-2,0],"Fx":[-2,0],"Fy":[-2,0],"Fz":[-2,0],"FJ":[-2,0],"F�":[-2,0],"YJ":[-2,0],"Kf":[-2,0],"Kt":[-2,0],"K�":[-4,0],"LT":[-4,0],"Lf":[-2,0],"Lt":[-2,0],"LY":[-4,0],"LV":[-4,0],"L�":[-4,0],"PJ":[-2,0],"X�":[-2,0],"Z�":[-2,0],"�T":[-4,0],"�X":[-2,0],"�Z":[-2,0]},"left":["BDEFHIKLMNPRWbhk","CGOQ","Ul","aceo","mnr","uvw"],"right":["AQ","DO","HIMNWd","JU","au","gy","mn","vw"]} +tracking=2 + +0 12 +1 12 +2 12 +3 12 +4 12 +5 12 +6 12 +7 12 +8 12 +9 12 +space 8 +. 4 +A 12 +B 12 +T 12 +a 12 +b 12 +c 12 +d 12 +e 12 +f 8 +g 12 +h 12 +i 4 +j 4 +k 12 +l 5 +m 16 +n 12 +o 12 +p 12 +q 12 +r 12 +s 12 +t 8 +u 12 +v 12 +w 16 +x 12 +y 12 +z 12 +, 4 +C 12 +D 12 +E 12 +F 12 +G 12 +O 12 +H 12 +I 4 +! 4 +" 10 +' 4 +Y 12 +{ 8 +| 4 +} 8 +J 12 +K 14 +L 12 +M 14 +N 14 +P 12 +Q 12 +R 12 +S 12 +U 12 +V 14 +W 14 +X 12 +Z 12 +/ 12 +\ 12 +[ 6 +] 6 +: 4 +; 4 +^ 12 +_ 10 +` 8 +~ 16 +¥ 12 +… 16 +™ 14 +‼ 10 +© 18 +® 18 +� 16 +@ 18 +# 18 +$ 12 +% 14 +& 12 +( 6 +) 6 +* 12 ++ 12 +- 10 += 10 +? 12 +< 10 +> 10 + +Ta -4 +Tc -4 +Te -4 +To -4 +Tm -4 +Tn -4 +Tr -4 +Tu -4 +Tv -4 +Tw -4 +fB 2 +fD 2 +fE 2 +fF 2 +fH 2 +fI 2 +fK 2 +fL 2 +fM 2 +fN 2 +fP 2 +fR 2 +fW 2 +fb 2 +fh 2 +fk 2 +fC 2 +fG 2 +fO 2 +fQ 2 +fU 2 +fl 2 +lB 1 +lD 1 +lE 1 +lF 1 +lH 1 +lI 1 +lK 1 +lL 1 +lM 1 +lN 1 +lP 1 +lR 1 +lW 1 +lb 1 +lh 1 +lk 1 +lC 1 +lG 1 +lO 1 +lQ 1 +lm 1 +ln 1 +lr 1 +Fa -2 +Fc -2 +Fe -2 +Fo -2 +Fm -2 +Fn -2 +Fr -2 +Fu -2 +Fv -2 +Fw -2 +aT -4 +uT -4 +gT -4 +yT -4 +mT -4 +nT -4 +vT -4 +wT -4 +Td -4 +Tf -2 +Tg -4 +Tp -4 +Tq -4 +Ts -4 +Tt -2 +Tx -4 +Ty -4 +Tz -4 +TJ -4 +T� -4 +bT -4 +cT -4 +eT -4 +fA 1 +fT 2 +fi 2 +fj 2 +fY 2 +fJ -2 +fS 2 +fV 2 +fX 2 +fZ 2 +hT -4 +kT -4 +lA 1 +lT -1 +lf -1 +li 1 +lj 1 +lp 1 +ls 1 +lt -1 +lx 1 +lz 1 +lY -1 +lJ 1 +lS 1 +lV -1 +lX 1 +lZ 1 +l� -1 +oT -4 +pT -4 +qT -4 +rT -4 +rX -2 +rZ -2 +sT -4 +tT -2 +xT -4 +zT -4 +C� -2 +Ef -2 +Et -2 +E� -2 +Fd -2 +Ff -2 +Fg -2 +Fp -2 +Fq -2 +Fs -2 +Ft -2 +Fx -2 +Fy -2 +Fz -2 +FJ -2 +F� -2 +YJ -2 +Kf -2 +Kt -2 +K� -4 +LT -4 +Lf -2 +Lt -2 +LY -4 +LV -4 +L� -4 +PJ -2 +X� -2 +Z� -2 +�T -4 +�X -2 +�Z -2 diff --git a/source/assets/sprites/old_player-table-64-64.png b/source/assets/sprites/old_player-table-64-64.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1d467bad63bb77803b3219d265397a7235988c GIT binary patch literal 4672 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 literal 5522 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 I$(aZL4+benBLDyZ literal 0 HcmV?d00001 diff --git a/source/main.lua b/source/main.lua index 9974835..f14df0d 100644 --- a/source/main.lua +++ b/source/main.lua @@ -17,6 +17,7 @@ import "scripts/player" import "scripts/groundSprite" import "scripts/balebaSprite" import "scripts/dangerSprite" +import "scripts/tankSprite" import "scenes/BaseScene" import 'scenes/Menu' @@ -35,4 +36,4 @@ playdate.display.setRefreshRate(50) Noble.showFPS = true -Noble.new(Menu) \ No newline at end of file +Noble.new(Game) \ No newline at end of file diff --git a/source/scenes/Game.lua b/source/scenes/Game.lua index 6882818..101ef0f 100644 --- a/source/scenes/Game.lua +++ b/source/scenes/Game.lua @@ -28,6 +28,8 @@ function scene:setValues() scene.t = playdate.timer.new(10000) scene.t.repeats = true + scene.tankTimer = playdate.timer.new(1000) + scene.fp = playdate.sound.fileplayer.new( "assets/audio/war" ) scene.fp:setVolume(0.7) scene.hello = playdate.sound.fileplayer.new( "assets/audio/hello" ) @@ -68,7 +70,7 @@ function scene:enter() end local k = #scene.balebas+1 - scene.balebas[k] = scene:spawnBaleba() + --scene.balebas[k] = scene:spawnBaleba() end for i=1, 3 do @@ -80,6 +82,11 @@ function scene:enter() if musicEnabled then scene.fp:play(0) end + + scene.tankTimer.timerEndedCallback = function() + scene.tank = Tank(550, 190, scene.player, scene.ground) + scene.tank:add() + end end function scene:update() @@ -90,15 +97,13 @@ function scene:update() return end - if scene.player.isDead() then - if not scene.telemLostSoundPlayed then - scene.telemLostSound:play(1) - scene.telemLostSoundPlayed = true - screenShake(500, 5) - end - - scene:destroyPlayer() - local et = playdate.timer.new(2000) + if scene.player.isDead() and not scene.telemLostSoundPlayed then + scene.telemLostSound:play(1) + scene.telemLostSoundPlayed = true + screenShake(500, 5) + + + local et = playdate.timer.new(6000) et.timerEndedCallback = function() Noble.transition(Menu) end @@ -126,6 +131,9 @@ function scene:exit() scene.ground:remove() scene.ground = nil + scene.tank:remove() + scene.ground = nil + for i=1, #scene.balebas do scene.balebas[i]:destroy() scene.balebas[i] = nil @@ -139,6 +147,9 @@ function scene:exit() scene.t:remove() scene.t = nil + scene.tankTimer:remove() + scene.tankTimer = nil + Noble.showFPS = false end diff --git a/source/scripts/groundSprite.lua b/source/scripts/groundSprite.lua index e995a03..998a0f5 100644 --- a/source/scripts/groundSprite.lua +++ b/source/scripts/groundSprite.lua @@ -1,7 +1,7 @@ Ground = {} class("Ground").extends(Graphics.sprite) -local groundImage = playdate.graphics.image.new("assets/sprites/groundFin") +local groundImage = Graphics.image.new("assets/sprites/groundFin") function Ground:init(x, y, player) Ground.super.init(self, groundImage) @@ -24,6 +24,12 @@ function Ground:setMoveSpeed(speed) end function Ground:update() + + -- Stop ground + if Ground.moveSpeed == 0 then + return + end + -- Speedup when player is moving right if Ground.player.isMovingRight() == false then Ground.moveSpeed = 0.2 diff --git a/source/scripts/player.lua b/source/scripts/player.lua index e2c3fb2..fd81b1e 100644 --- a/source/scripts/player.lua +++ b/source/scripts/player.lua @@ -99,6 +99,24 @@ function Player:changeToRunState(direction) end end +function Player:boom(collisionObject) + Player.dead = true + self:changeState("boom") + + local particleB = ParticlePoly(self.x, self.y) + particleB:setThickness(2) + particleB:setAngular(-15, 15) + particleB:setSize(1, 2) + particleB:setSpeed(1, 3) + particleB:setMode(Particles.modes.STAY) + particleB:setBounds(0, 0, 400, 240) + particleB:setColour(Graphics.kColorXOR) + particleB:add(20) + if collisionObject then + collisionObject:remove() + end +end + function Player:handleMovementAndCollisions() if Player.dead then return @@ -134,23 +152,24 @@ function Player:handleMovementAndCollisions() end if collisionTag == 3 then -- Ground - Player.dead = true - self:changeState("boom") + self:boom() return elseif collisionTag == 154 then -- Baleba - Player.dead = true - self:changeState("boom") + -- self:boom(collisionObject) + return + elseif collisionTag == 2 then -- Tank + self:boom() - local particleB = ParticlePoly(self.x, self.y) - particleB:setThickness(2) - particleB:setAngular(-15, 15) - particleB:setSize(1, 2) - particleB:setSpeed(1, 3) - particleB:setMode(Particles.modes.STAY) - particleB:setBounds(0, 0, 400, 240) - particleB:setColour(Graphics.kColorXOR) - particleB:add(20) - collisionObject:remove() + local particleC = ParticlePoly(collisionObject.x, collisionObject.y) + particleC:setThickness(5) + particleC:setAngular(-15, 15) + particleC:setSize(1, 5) + particleC:setSpeed(1, 3) + particleC:setMode(Particles.modes.STAY) + particleC:setBounds(0, 0, 400, 240) + particleC:setColour(Graphics.kColorXOR) + particleC:add(50) + collisionObject:fadeout() return end end diff --git a/source/scripts/tankSprite.lua b/source/scripts/tankSprite.lua new file mode 100644 index 0000000..6440e5f --- /dev/null +++ b/source/scripts/tankSprite.lua @@ -0,0 +1,55 @@ +Tank = {} + +class("Tank").extends(Graphics.sprite) + +function Tank:init(x, y, player, ground) + self.tankImage = Graphics.image.new("assets/sprites/tank") + self.tankImageD = Graphics.image.new("assets/sprites/tankD") + Tank.super.init(self) + + local width, height = self.tankImage:getSize() + + self.faded_image = Graphics.image.new(width, height, Graphics.kColorClear) + + Graphics.pushContext(self.faded_image) + self.tankImageD:drawBlurred(0, 0, 2, 2, Graphics.image.kDitherTypeFloydSteinberg) + Graphics.popContext() + + -- Collision properties + self:setZIndex(99) + self:setTag(2) + self:setCollideRect(4, 56, 147, 65) + + -- Main properties + Tank.moveSpeed = 2 + Tank.player = player + Tank.ground = ground + + self:fadein() + + self:moveTo(x, y) +end + +function Tank:fadein() + self:setImage(self.tankImage) +end + +function Tank:fadeout() + self:setImage(self.faded_image) +end + +function Tank:update() + if self.x <= 330 then + Tank.ground:setMoveSpeed(0) + return + end + + -- Speedup when player is moving right + if Tank.player.isMovingRight() == false then + Tank.moveSpeed = 0.2 + else + Tank.moveSpeed = 1 + end + + self:moveTo(self.x-Tank.moveSpeed, self.y) +end diff --git a/source/utilities/enum.lua b/source/utilities/enum.lua index 4b4549e..a01baf4 100644 --- a/source/utilities/enum.lua +++ b/source/utilities/enum.lua @@ -1,9 +1,9 @@ -function enum( t ) - local result = {} - - for index, name in pairs(t) do - result[name] = index - end - - return result +function enum( t ) + local result = {} + + for index, name in pairs(t) do + result[name] = index + end + + return result end \ No newline at end of file diff --git a/source/utilities/ui.lua b/source/utilities/ui.lua index bdbae90..9f8c533 100644 --- a/source/utilities/ui.lua +++ b/source/utilities/ui.lua @@ -1,153 +1,153 @@ --- https://gist.github.com/GammaGames/17e0c64e932e6a5b10919af380276fb1 -local pd = playdate -local gfx = Graphics - -local box = playout.box.new -local text = playout.text.new - -local window = { - padding = 8, - border = 2, - borderRadius = 1, - minWidth=160, - maxWidth=210, - backgroundColor = gfx.kColorWhite, - font = Noble.Text.FONT_NEWSLEAK -} -local label = { - padding = 4 -} -local labelText = { - alignment = kTextAlignment.left -} -local input = { - padding = 4, - paddingLeft = 8, - borderRadius = 2, - border = 1, - minWidth = 140, - hAlign = playout.kAlignStart -} -local inputText = { - alignment = kTextAlignment.left, - wrap = false -} -local button = { - padding = 4, - paddingLeft = 8 -} -local buttonHover = { - padding = 4, - paddingLeft = 8, - borderRadius = 2, - border = 2, - backgroundColor = gfx.kColorWhite, - font = Noble.Text.FONT_NEWSLEAK_BOLD, -} - -function notify(_text, callback) - local tree = playout.tree.new( - box({ - direction = playout.kDirectionVertical, - spacing = 4, - style = window, - }, { - text(_text, labelText), - box({ style = button, tabIndex = 1 }, { text("Okay") }), - }) - ) - tree:computeTabIndex() - local nodes = tree.tabIndex - - local selectedIndex = 1 - nodes[selectedIndex].style = buttonHover - - pd.inputHandlers.push({ - AButtonDown = function() - pd.inputHandlers.pop() - callback() - end, - BButtonDown = function() - pd.inputHandlers.pop() - callback() - end, - }, true) - - return tree:asSprite() -end - -function confirm(_text, callback) - local tree = playout.tree.new( - box({ - direction = playout.kDirectionVertical, - spacing = 4, - style = window - }, { - box({ style = label}, { text(_text, labelText) }), - box({ - direction = playout.kDirectionHorizontal, - spacing = 8 - }, { - box({ style = button, tabIndex = 1 }, { text("No") }), - box({ style = button, tabIndex = 2 }, { text("Yes") }), - }) - }) - ) - tree:computeTabIndex() - local nodes = tree.tabIndex - - local selectedIndex = 1 - nodes[selectedIndex].style = buttonHover - - pd.inputHandlers.push({ - leftButtonDown = function() - nodes[selectedIndex].style = button - selectedIndex = math.ringInt(selectedIndex - 1, 1, #nodes) - nodes[selectedIndex].style = buttonHover - tree:draw() - end, - rightButtonDown = function() - nodes[selectedIndex].style = button - selectedIndex = math.ringInt(selectedIndex + 1, 1, #nodes) - nodes[selectedIndex].style = buttonHover - tree:draw() - end, - AButtonUp = function() - pd.inputHandlers.pop() - callback(selectedIndex == 2) - end, - BButtonUp = function() - pd.inputHandlers.pop() - callback(false) - end, - }, true) - - return tree:asSprite() -end - -function prompt(_text, value, callback) - local tree = playout.tree.new( - box({ - direction = playout.kDirectionVertical, - style = window, - spacing = 4, - hAlign = playout.kAlignStart - }, { - box({ style = label }, { text(_text, labelText) }), - box({ style = input, tabIndex = 1 }, { text(value, inputText)}), - }) - ) - tree:computeTabIndex() - local nodes = tree.tabIndex - local input = nodes[1].children[1] - - pd.keyboard.show(value) - function pd.keyboard.textChangedCallback() - input.text = pd.keyboard.text - tree:layout() - tree:draw() - end - function pd.keyboard.keyboardWillHideCallback(ok) callback(ok, pd.keyboard.text) end - - return tree:asSprite() +-- https://gist.github.com/GammaGames/17e0c64e932e6a5b10919af380276fb1 +local pd = playdate +local gfx = Graphics + +local box = playout.box.new +local text = playout.text.new + +local window = { + padding = 8, + border = 2, + borderRadius = 1, + minWidth=160, + maxWidth=210, + backgroundColor = gfx.kColorWhite, + font = Noble.Text.FONT_NEWSLEAK +} +local label = { + padding = 4 +} +local labelText = { + alignment = kTextAlignment.left +} +local input = { + padding = 4, + paddingLeft = 8, + borderRadius = 2, + border = 1, + minWidth = 140, + hAlign = playout.kAlignStart +} +local inputText = { + alignment = kTextAlignment.left, + wrap = false +} +local button = { + padding = 4, + paddingLeft = 8 +} +local buttonHover = { + padding = 4, + paddingLeft = 8, + borderRadius = 2, + border = 2, + backgroundColor = gfx.kColorWhite, + font = Noble.Text.FONT_NEWSLEAK_BOLD, +} + +function notify(_text, callback) + local tree = playout.tree.new( + box({ + direction = playout.kDirectionVertical, + spacing = 4, + style = window, + }, { + text(_text, labelText), + box({ style = button, tabIndex = 1 }, { text("Okay") }), + }) + ) + tree:computeTabIndex() + local nodes = tree.tabIndex + + local selectedIndex = 1 + nodes[selectedIndex].style = buttonHover + + pd.inputHandlers.push({ + AButtonDown = function() + pd.inputHandlers.pop() + callback() + end, + BButtonDown = function() + pd.inputHandlers.pop() + callback() + end, + }, true) + + return tree:asSprite() +end + +function confirm(_text, callback) + local tree = playout.tree.new( + box({ + direction = playout.kDirectionVertical, + spacing = 4, + style = window + }, { + box({ style = label}, { text(_text, labelText) }), + box({ + direction = playout.kDirectionHorizontal, + spacing = 8 + }, { + box({ style = button, tabIndex = 1 }, { text("No") }), + box({ style = button, tabIndex = 2 }, { text("Yes") }), + }) + }) + ) + tree:computeTabIndex() + local nodes = tree.tabIndex + + local selectedIndex = 1 + nodes[selectedIndex].style = buttonHover + + pd.inputHandlers.push({ + leftButtonDown = function() + nodes[selectedIndex].style = button + selectedIndex = math.ringInt(selectedIndex - 1, 1, #nodes) + nodes[selectedIndex].style = buttonHover + tree:draw() + end, + rightButtonDown = function() + nodes[selectedIndex].style = button + selectedIndex = math.ringInt(selectedIndex + 1, 1, #nodes) + nodes[selectedIndex].style = buttonHover + tree:draw() + end, + AButtonUp = function() + pd.inputHandlers.pop() + callback(selectedIndex == 2) + end, + BButtonUp = function() + pd.inputHandlers.pop() + callback(false) + end, + }, true) + + return tree:asSprite() +end + +function prompt(_text, value, callback) + local tree = playout.tree.new( + box({ + direction = playout.kDirectionVertical, + style = window, + spacing = 4, + hAlign = playout.kAlignStart + }, { + box({ style = label }, { text(_text, labelText) }), + box({ style = input, tabIndex = 1 }, { text(value, inputText)}), + }) + ) + tree:computeTabIndex() + local nodes = tree.tabIndex + local input = nodes[1].children[1] + + pd.keyboard.show(value) + function pd.keyboard.textChangedCallback() + input.text = pd.keyboard.text + tree:layout() + tree:draw() + end + function pd.keyboard.keyboardWillHideCallback(ok) callback(ok, pd.keyboard.text) end + + return tree:asSprite() end \ No newline at end of file