Almost-working upgrade menu.
Basic input system. More advanced text-drawing system.
This commit is contained in:
parent
42ec7b74fc
commit
2e87bc8836
|
@ -28,6 +28,8 @@ TomatoSprite = playdate.graphics.image.new("assets/images/TomatoSprite.png")
|
||||||
|
|
||||||
-- !!(dirLookup('assets/sounds', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
-- !!(dirLookup('assets/sounds', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
||||||
-- !!(dirLookup('assets/music', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
-- !!(dirLookup('assets/music', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
||||||
-- !!(dirLookup('assets/fonts', 'fnt', 'playdate.graphics.font.new', 'pd_font', nil, nil, function(varName, value)
|
-- luacheck: ignore
|
||||||
-- return varName:gsub("[- ]", "") .. " = " .. value:gsub("fnt", "pft")
|
---@type pd_font
|
||||||
-- end))
|
AshevilleSans14Bold = playdate.graphics.font.new("assets/fonts/Asheville-Sans-14-Bold.pft")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,6 @@ end)!!(generatedFileWarning())
|
||||||
!!(dirLookup('assets/images', 'png', 'playdate.graphics.image.new', 'pd_image'))
|
!!(dirLookup('assets/images', 'png', 'playdate.graphics.image.new', 'pd_image'))
|
||||||
-- !!(dirLookup('assets/sounds', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
-- !!(dirLookup('assets/sounds', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
||||||
-- !!(dirLookup('assets/music', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
-- !!(dirLookup('assets/music', 'wav', 'playdate.sound.sampleplayer.new', 'pd_sampleplayer'))
|
||||||
-- !!(dirLookup('assets/fonts', 'fnt', 'playdate.graphics.font.new', 'pd_font', nil, nil, function(varName, value)
|
!!(dirLookup('assets/fonts', 'fnt', 'playdate.graphics.font.new', 'pd_font', nil, nil, function(varName, value)
|
||||||
-- return varName:gsub("[- ]", "") .. " = " .. value:gsub("fnt", "pft")
|
return varName:gsub("[- ]", "") .. " = " .. value:gsub("fnt", "pft")
|
||||||
-- end))
|
end))
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,295 @@
|
||||||
|
tracking=1
|
||||||
|
space 3
|
||||||
|
! 2
|
||||||
|
" 5
|
||||||
|
# 9
|
||||||
|
$ 8
|
||||||
|
% 12
|
||||||
|
& 11
|
||||||
|
' 3
|
||||||
|
( 5
|
||||||
|
) 5
|
||||||
|
* 8
|
||||||
|
+ 8
|
||||||
|
, 3
|
||||||
|
- 6
|
||||||
|
. 2
|
||||||
|
/ 6
|
||||||
|
0 9
|
||||||
|
1 4
|
||||||
|
2 9
|
||||||
|
3 9
|
||||||
|
4 9
|
||||||
|
5 9
|
||||||
|
6 9
|
||||||
|
7 9
|
||||||
|
8 10
|
||||||
|
9 9
|
||||||
|
: 2
|
||||||
|
; 2
|
||||||
|
< 7
|
||||||
|
= 7
|
||||||
|
> 7
|
||||||
|
? 9
|
||||||
|
@ 11
|
||||||
|
A 10
|
||||||
|
B 9
|
||||||
|
C 9
|
||||||
|
D 9
|
||||||
|
E 8
|
||||||
|
F 8
|
||||||
|
G 9
|
||||||
|
H 9
|
||||||
|
I 2
|
||||||
|
J 8
|
||||||
|
K 10
|
||||||
|
L 9
|
||||||
|
M 12
|
||||||
|
N 9
|
||||||
|
O 9
|
||||||
|
P 9
|
||||||
|
Q 9
|
||||||
|
R 9
|
||||||
|
S 9
|
||||||
|
T 10
|
||||||
|
U 9
|
||||||
|
V 10
|
||||||
|
W 14
|
||||||
|
X 8
|
||||||
|
Y 8
|
||||||
|
Z 8
|
||||||
|
[ 3
|
||||||
|
\ 6
|
||||||
|
] 3
|
||||||
|
^ 6
|
||||||
|
_ 8
|
||||||
|
` 3
|
||||||
|
a 8
|
||||||
|
b 8
|
||||||
|
c 8
|
||||||
|
d 8
|
||||||
|
e 8
|
||||||
|
f 6
|
||||||
|
g 8
|
||||||
|
h 8
|
||||||
|
i 2
|
||||||
|
j 4
|
||||||
|
k 8
|
||||||
|
l 2
|
||||||
|
m 12
|
||||||
|
n 8
|
||||||
|
o 8
|
||||||
|
p 8
|
||||||
|
q 8
|
||||||
|
r 6
|
||||||
|
s 8
|
||||||
|
t 6
|
||||||
|
u 8
|
||||||
|
v 8
|
||||||
|
w 12
|
||||||
|
x 9
|
||||||
|
y 8
|
||||||
|
z 8
|
||||||
|
{ 6
|
||||||
|
| 2
|
||||||
|
} 6
|
||||||
|
~ 10
|
||||||
|
… 8
|
||||||
|
¥ 8
|
||||||
|
‼ 5
|
||||||
|
™ 8
|
||||||
|
© 11
|
||||||
|
® 11
|
||||||
|
。 16
|
||||||
|
、 16
|
||||||
|
ぁ 16
|
||||||
|
あ 16
|
||||||
|
ぃ 16
|
||||||
|
い 16
|
||||||
|
ぅ 16
|
||||||
|
う 16
|
||||||
|
ぇ 16
|
||||||
|
え 16
|
||||||
|
ぉ 16
|
||||||
|
お 16
|
||||||
|
か 16
|
||||||
|
が 16
|
||||||
|
き 16
|
||||||
|
ぎ 16
|
||||||
|
く 16
|
||||||
|
ぐ 16
|
||||||
|
け 16
|
||||||
|
げ 16
|
||||||
|
こ 16
|
||||||
|
ご 16
|
||||||
|
さ 16
|
||||||
|
ざ 16
|
||||||
|
し 16
|
||||||
|
じ 16
|
||||||
|
す 16
|
||||||
|
ず 16
|
||||||
|
せ 16
|
||||||
|
ぜ 16
|
||||||
|
そ 16
|
||||||
|
ぞ 16
|
||||||
|
た 16
|
||||||
|
だ 16
|
||||||
|
ち 16
|
||||||
|
ぢ 16
|
||||||
|
っ 16
|
||||||
|
つ 16
|
||||||
|
づ 16
|
||||||
|
て 16
|
||||||
|
で 16
|
||||||
|
と 16
|
||||||
|
ど 16
|
||||||
|
な 16
|
||||||
|
に 16
|
||||||
|
ぬ 16
|
||||||
|
ね 16
|
||||||
|
の 16
|
||||||
|
は 16
|
||||||
|
ば 16
|
||||||
|
ぱ 16
|
||||||
|
ひ 16
|
||||||
|
び 16
|
||||||
|
ぴ 16
|
||||||
|
ふ 16
|
||||||
|
ぶ 16
|
||||||
|
ぷ 16
|
||||||
|
へ 16
|
||||||
|
べ 16
|
||||||
|
ぺ 16
|
||||||
|
ほ 16
|
||||||
|
ぼ 16
|
||||||
|
ぽ 16
|
||||||
|
ま 16
|
||||||
|
み 16
|
||||||
|
む 16
|
||||||
|
め 16
|
||||||
|
も 16
|
||||||
|
ゃ 16
|
||||||
|
や 16
|
||||||
|
ゅ 16
|
||||||
|
ゆ 16
|
||||||
|
ょ 16
|
||||||
|
よ 16
|
||||||
|
ら 16
|
||||||
|
り 16
|
||||||
|
る 16
|
||||||
|
れ 16
|
||||||
|
ろ 16
|
||||||
|
ゎ 16
|
||||||
|
わ 16
|
||||||
|
ゐ 16
|
||||||
|
ゑ 16
|
||||||
|
を 16
|
||||||
|
ん 16
|
||||||
|
ゔ 16
|
||||||
|
ゕ 16
|
||||||
|
ゖ 16
|
||||||
|
゛ 1
|
||||||
|
゜ 0
|
||||||
|
ゝ 16
|
||||||
|
ゞ 16
|
||||||
|
ゟ 16
|
||||||
|
゠ 16
|
||||||
|
ァ 16
|
||||||
|
ア 16
|
||||||
|
ィ 16
|
||||||
|
イ 16
|
||||||
|
ゥ 16
|
||||||
|
ウ 16
|
||||||
|
ェ 16
|
||||||
|
エ 16
|
||||||
|
ォ 16
|
||||||
|
オ 16
|
||||||
|
カ 16
|
||||||
|
ガ 16
|
||||||
|
キ 16
|
||||||
|
ギ 16
|
||||||
|
ク 16
|
||||||
|
グ 16
|
||||||
|
ケ 16
|
||||||
|
ゲ 16
|
||||||
|
コ 16
|
||||||
|
ゴ 16
|
||||||
|
サ 16
|
||||||
|
ザ 16
|
||||||
|
シ 16
|
||||||
|
ジ 16
|
||||||
|
ス 16
|
||||||
|
ズ 16
|
||||||
|
セ 16
|
||||||
|
ゼ 16
|
||||||
|
ソ 16
|
||||||
|
ゾ 16
|
||||||
|
タ 16
|
||||||
|
ダ 16
|
||||||
|
チ 16
|
||||||
|
ヂ 16
|
||||||
|
ッ 16
|
||||||
|
ツ 16
|
||||||
|
ヅ 16
|
||||||
|
テ 16
|
||||||
|
デ 16
|
||||||
|
ト 16
|
||||||
|
ド 16
|
||||||
|
ナ 16
|
||||||
|
ニ 16
|
||||||
|
ヌ 16
|
||||||
|
ネ 16
|
||||||
|
ノ 16
|
||||||
|
ハ 16
|
||||||
|
バ 16
|
||||||
|
パ 16
|
||||||
|
ヒ 16
|
||||||
|
ビ 16
|
||||||
|
ピ 16
|
||||||
|
フ 16
|
||||||
|
ブ 16
|
||||||
|
プ 16
|
||||||
|
ヘ 16
|
||||||
|
ベ 16
|
||||||
|
ペ 16
|
||||||
|
ホ 16
|
||||||
|
ボ 16
|
||||||
|
ポ 16
|
||||||
|
マ 16
|
||||||
|
ミ 16
|
||||||
|
ム 16
|
||||||
|
メ 16
|
||||||
|
モ 16
|
||||||
|
ャ 16
|
||||||
|
ヤ 16
|
||||||
|
ュ 16
|
||||||
|
ユ 16
|
||||||
|
ョ 16
|
||||||
|
ヨ 16
|
||||||
|
ラ 16
|
||||||
|
リ 16
|
||||||
|
ル 16
|
||||||
|
レ 16
|
||||||
|
ロ 16
|
||||||
|
ヮ 16
|
||||||
|
ワ 16
|
||||||
|
ヰ 16
|
||||||
|
ヱ 16
|
||||||
|
ヲ 16
|
||||||
|
ン 16
|
||||||
|
ヴ 16
|
||||||
|
ヵ 16
|
||||||
|
ヶ 16
|
||||||
|
ヷ 16
|
||||||
|
ヸ 16
|
||||||
|
ヹ 16
|
||||||
|
ヺ 16
|
||||||
|
・ 16
|
||||||
|
ー 16
|
||||||
|
ヽ 16
|
||||||
|
ヾ 16
|
||||||
|
ヿ 16
|
||||||
|
「 16
|
||||||
|
」 16
|
||||||
|
円 16
|
||||||
|
<EFBFBD> 13
|
16
src/main.lua
16
src/main.lua
|
@ -15,15 +15,19 @@ world = tiny.world()
|
||||||
import("tiny-tools.lua")
|
import("tiny-tools.lua")
|
||||||
import("assets.lua")
|
import("assets.lua")
|
||||||
import("systems/filter-types.lua")
|
import("systems/filter-types.lua")
|
||||||
import("systems/camera-pan.lua")
|
|
||||||
import("systems/collision-detection.lua")
|
|
||||||
import("systems/collision-resolution.lua")
|
|
||||||
import("systems/draw.lua")
|
|
||||||
import("systems/gravity.lua")
|
import("systems/gravity.lua")
|
||||||
import("systems/move-toward.lua")
|
import("systems/move-toward.lua")
|
||||||
|
import("systems/velocity.lua")
|
||||||
import("systems/rounds.lua")
|
import("systems/rounds.lua")
|
||||||
import("systems/spawner.lua")
|
import("systems/spawner.lua")
|
||||||
import("systems/velocity.lua")
|
import("systems/camera-pan.lua")
|
||||||
|
import("systems/collision-resolution.lua")
|
||||||
|
import("systems/collision-detection.lua")
|
||||||
|
|
||||||
|
import("systems/draw.lua")
|
||||||
|
import("systems/input.lua")
|
||||||
|
import("systems/menu.lua")
|
||||||
|
|
||||||
import("ingredients/ingredients.lua")
|
import("ingredients/ingredients.lua")
|
||||||
import("cart.lua")
|
import("cart.lua")
|
||||||
import("utils.lua")
|
import("utils.lua")
|
||||||
|
@ -79,7 +83,7 @@ function playdate.update()
|
||||||
|
|
||||||
floor.position.x = Camera.pan.x - 600
|
floor.position.x = Camera.pan.x - 600
|
||||||
|
|
||||||
world:update(deltaSeconds)
|
world:update(math.min(1 / 40, deltaSeconds))
|
||||||
|
|
||||||
gfx.setDrawOffset(0, 0)
|
gfx.setDrawOffset(0, 0)
|
||||||
Score:draw()
|
Score:draw()
|
||||||
|
|
|
@ -4,10 +4,46 @@ drawRectanglesSystem = filteredSystem({ position = T.XyPair, drawAsRectangle = {
|
||||||
gfx.fillRect(e.position.x, e.position.y, e.drawAsRectangle.size.x, e.drawAsRectangle.size.y)
|
gfx.fillRect(e.position.x, e.position.y, e.drawAsRectangle.size.x, e.drawAsRectangle.size.y)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
drawTextSystem = filteredSystem({ position = T.XyPair, drawAsText = { text = T.str } }, function(e, dt)
|
|
||||||
gfx.drawTextAligned(e.drawAsText.text, e.position.x, e.position.y, gfx.kAlignCenter)
|
|
||||||
end)
|
|
||||||
|
|
||||||
drawSpriteSystem = filteredSystem({ position = T.XyPair, drawAsSprite = T.PdImage }, function(e, dt, system)
|
drawSpriteSystem = filteredSystem({ position = T.XyPair, drawAsSprite = T.PdImage }, function(e, dt, system)
|
||||||
e.drawAsSprite:draw(e.position.x, e.position.y)
|
e.drawAsSprite:draw(e.position.x, e.position.y)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
local textHeight = AshevilleSans14Bold:getHeight()
|
||||||
|
local xMargin = 4
|
||||||
|
|
||||||
|
drawTextSystem = filteredSystem(
|
||||||
|
{ position = T.XyPair, drawAsText = { text = T.str, style = Maybe(T.str) } },
|
||||||
|
function(e, dt)
|
||||||
|
local textWidth = AshevilleSans14Bold:getTextWidth(e.drawAsText.text)
|
||||||
|
if e.drawAsText.style == TextStyle.Inverted then
|
||||||
|
gfx.fillRect(
|
||||||
|
e.position.x - xMargin - textWidth / 2,
|
||||||
|
e.position.y - 2,
|
||||||
|
textWidth + (xMargin * 2),
|
||||||
|
textHeight + 2
|
||||||
|
)
|
||||||
|
gfx.setImageDrawMode(gfx.kDrawModeInverted)
|
||||||
|
end
|
||||||
|
if e.drawAsText.style == TextStyle.Bordered then
|
||||||
|
gfx.setColor(gfx.kColorWhite)
|
||||||
|
gfx.fillRect(
|
||||||
|
e.position.x - xMargin - textWidth / 2,
|
||||||
|
e.position.y - 2,
|
||||||
|
textWidth + (xMargin * 2),
|
||||||
|
textHeight + 2
|
||||||
|
)
|
||||||
|
gfx.setColor(gfx.kColorBlack)
|
||||||
|
gfx.setImageDrawMode(gfx.kDrawModeCopy)
|
||||||
|
gfx.drawRect(
|
||||||
|
e.position.x - xMargin - textWidth / 2,
|
||||||
|
e.position.y - 2,
|
||||||
|
textWidth + (xMargin * 2),
|
||||||
|
textHeight + 2
|
||||||
|
)
|
||||||
|
end
|
||||||
|
AshevilleSans14Bold:drawTextAligned(e.drawAsText.text, e.position.x, e.position.y, kTextAlignment.center)
|
||||||
|
if e.drawAsText.style == TextStyle.Inverted then
|
||||||
|
gfx.setImageDrawMode(gfx.kDrawModeCopy)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
|
@ -18,6 +18,8 @@ local XyPair = { x = 1, y = 1 }
|
||||||
|
|
||||||
---@alias CanSpawn { entity: Entity }
|
---@alias CanSpawn { entity: Entity }
|
||||||
|
|
||||||
|
---@alias InRelations Entity[]
|
||||||
|
|
||||||
T = {
|
T = {
|
||||||
XyPair = XyPair,
|
XyPair = XyPair,
|
||||||
bool = true,
|
bool = true,
|
||||||
|
@ -49,6 +51,10 @@ T = {
|
||||||
RoundStateAction = "start",
|
RoundStateAction = "start",
|
||||||
---@type CanSpawn
|
---@type CanSpawn
|
||||||
CanSpawn = {},
|
CanSpawn = {},
|
||||||
|
---@type InRelations
|
||||||
|
InRelations = {},
|
||||||
|
---@type InputState
|
||||||
|
InputState = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
---@generic T
|
---@generic T
|
||||||
|
@ -57,3 +63,9 @@ T = {
|
||||||
function Maybe(t)
|
function Maybe(t)
|
||||||
return { maybe = t }
|
return { maybe = t }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
TextStyle = {
|
||||||
|
Inverted = "INVERTED",
|
||||||
|
Bordered = "BORDERED",
|
||||||
|
None = "None",
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
---@alias InputState { upJustPressed: boolean, downJustPressed: boolean, rightJustPressed: boolean, leftJustPressed: boolean, aJustPressed: boolean, bJustPressed: boolean }
|
||||||
|
|
||||||
|
local buttonJustPressed = playdate.buttonJustPressed
|
||||||
|
local inputState = {}
|
||||||
|
|
||||||
|
inputSystem = filteredSystem({ canReceiveInput = T.marker }, function(e, _, system)
|
||||||
|
e.inputState = inputState
|
||||||
|
system.world:addEntity(e)
|
||||||
|
end)
|
||||||
|
|
||||||
|
function inputSystem:preProcess()
|
||||||
|
inputState.upJustPressed = buttonJustPressed(playdate.kButtonUp)
|
||||||
|
inputState.downJustPressed = buttonJustPressed(playdate.kButtonDown)
|
||||||
|
inputState.rightJustPressed = buttonJustPressed(playdate.kButtonRight)
|
||||||
|
inputState.leftJustPressed = buttonJustPressed(playdate.kButtonLeft)
|
||||||
|
inputState.aJustPressed = buttonJustPressed(playdate.kButtonA)
|
||||||
|
inputState.bJustPressed = buttonJustPressed(playdate.kButtonB)
|
||||||
|
end
|
|
@ -0,0 +1,26 @@
|
||||||
|
menuController = filteredSystem({ menuItems = T.InRelations, inputState = T.InputState }, function(e, _, _)
|
||||||
|
for _, menuItem in pairs(e.menuItems) do
|
||||||
|
if menuItem.highlighted then
|
||||||
|
if e.inputState.aJustPressed then
|
||||||
|
menuItem.onSelect()
|
||||||
|
end
|
||||||
|
if e.inputState.downJustPressed and menuItem.navigateDown then
|
||||||
|
menuItem.highlighted = false
|
||||||
|
menuItem.navigateDown.highlighted = true
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if e.inputState.upJustPressed and menuItem.navigateUp then
|
||||||
|
menuItem.highlighted = false
|
||||||
|
menuItem.navigateUp.highlighted = true
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _, menuItem in pairs(e.menuItems) do
|
||||||
|
if menuItem.highlighted then
|
||||||
|
menuItem.drawAsText.style = TextStyle.Inverted
|
||||||
|
else
|
||||||
|
menuItem.drawAsText.style = TextStyle.Bordered
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
|
@ -15,27 +15,24 @@ local function normalizeVector(xy1, xy2)
|
||||||
return x / distance, y / distance, distance
|
return x / distance, y / distance, distance
|
||||||
end
|
end
|
||||||
|
|
||||||
moveTowardSystem = filteredSystem(
|
moveTowardSystem = filteredSystem({ moveToward = MoveToward, position = T.XyPair }, function(e, dt, system)
|
||||||
{ moveToward = MoveToward, position = T.XyPair },
|
local xNorm, yNorm, distance = normalizeVector(e.position, e.moveToward.target)
|
||||||
function(e, dt, system)
|
if distance > e.moveToward.range then
|
||||||
local xNorm, yNorm, distance = normalizeVector(e.position, e.moveToward.target)
|
return
|
||||||
if distance > e.moveToward.range then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- TODO May be incorrect when signs are mismatched between vel and diff
|
|
||||||
local xVel = xNorm * e.moveToward.speed * dt
|
|
||||||
if abs(e.position.x - e.moveToward.target.x) < abs(xVel) then
|
|
||||||
e.position.x = e.moveToward.target.x
|
|
||||||
else
|
|
||||||
e.position.x = e.position.x + xVel
|
|
||||||
end
|
|
||||||
|
|
||||||
local yVel = yNorm * e.moveToward.speed * dt
|
|
||||||
if abs(e.position.y - e.moveToward.target.y) < abs(yVel) then
|
|
||||||
e.position.y = e.moveToward.target.y
|
|
||||||
else
|
|
||||||
e.position.y = e.position.y + yVel
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
)
|
|
||||||
|
-- TODO May be incorrect when signs are mismatched between vel and diff
|
||||||
|
local xVel = xNorm * e.moveToward.speed * dt
|
||||||
|
if abs(e.position.x - e.moveToward.target.x) < abs(xVel) then
|
||||||
|
e.position.x = e.moveToward.target.x
|
||||||
|
else
|
||||||
|
e.position.x = e.position.x + xVel
|
||||||
|
end
|
||||||
|
|
||||||
|
local yVel = yNorm * e.moveToward.speed * dt
|
||||||
|
if abs(e.position.y - e.moveToward.target.y) < abs(yVel) then
|
||||||
|
e.position.y = e.moveToward.target.y
|
||||||
|
else
|
||||||
|
e.position.y = e.position.y + yVel
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
|
@ -22,6 +22,8 @@ roundSystem = filteredSystem({ roundAction = T.RoundStateAction, position = Mayb
|
||||||
stopMovingOnCollision = true,
|
stopMovingOnCollision = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- TODO: Big ol' numbers displaying how many ingredients were collected?
|
||||||
|
-- TODO: Could layer ingredients in rows of three? Maybe just when it's higher?
|
||||||
local delayPerDrop = 150
|
local delayPerDrop = 150
|
||||||
local delay = 0
|
local delay = 0
|
||||||
for i, collectable in ipairs(collectedEntities.entities) do
|
for i, collectable in ipairs(collectedEntities.entities) do
|
||||||
|
@ -48,30 +50,51 @@ roundSystem = filteredSystem({ roundAction = T.RoundStateAction, position = Mayb
|
||||||
end
|
end
|
||||||
|
|
||||||
local availableUpgrades = Utils.getNDifferentValues(getAvailableSpawnerUpgrades(), 3)
|
local availableUpgrades = Utils.getNDifferentValues(getAvailableSpawnerUpgrades(), 3)
|
||||||
|
-- Sorting from shortest to longest sort of makes them look like a bun?
|
||||||
|
table.sort(availableUpgrades, function(a, b)
|
||||||
|
return #a.name > #b.name
|
||||||
|
end)
|
||||||
|
|
||||||
y = y - 50
|
y = y - 50
|
||||||
|
local menuEntity = {
|
||||||
|
menuItems = {},
|
||||||
|
canReceiveInput = T.marker,
|
||||||
|
}
|
||||||
|
local upgradeBelow
|
||||||
for _, upgrade in ipairs(availableUpgrades) do
|
for _, upgrade in ipairs(availableUpgrades) do
|
||||||
printTable(upgrade)
|
local collX, collY = 75, 21
|
||||||
local collX, collY = 75, 30
|
|
||||||
y = y - collY - 15
|
y = y - collY - 15
|
||||||
playdate.timer.new(delay, function(ee, ccollX, ccollY, yy, ii, ssystem, ccollectable)
|
local upgradeEntity = {
|
||||||
ssystem.world:addEntity({
|
onSelect = upgrade.apply,
|
||||||
drawAsText = {
|
drawAsText = {
|
||||||
text = upgrade.name,
|
text = upgrade.name,
|
||||||
},
|
style = TextStyle.Inverted,
|
||||||
size = { x = ccollX, y = ccollY / 2 },
|
},
|
||||||
mass = 0.5,
|
size = { x = collX, y = collY },
|
||||||
velocity = { x = 0, y = 0 },
|
mass = 0.5,
|
||||||
position = { x = ee.position.x - (ccollX / 2), y = yy },
|
velocity = { x = 0, y = 0 },
|
||||||
canCollideWith = 2,
|
position = { x = e.position.x, y = y },
|
||||||
canBeCollidedBy = 2,
|
canCollideWith = 2,
|
||||||
isSolid = true,
|
canBeCollidedBy = 2,
|
||||||
stopMovingOnCollision = true,
|
isSolid = true,
|
||||||
onCollidingRemove = onCollidingRemove,
|
stopMovingOnCollision = true,
|
||||||
focusOnCollide = ii,
|
onCollidingRemove = onCollidingRemove,
|
||||||
})
|
focusOnCollide = i,
|
||||||
end, e, collX, collY, y, i, system, collectable)
|
navigateDown = upgradeBelow,
|
||||||
|
highlighted = true,
|
||||||
|
}
|
||||||
|
if upgradeBelow then
|
||||||
|
upgradeBelow.navigateUp = upgradeEntity
|
||||||
|
upgradeBelow.highlighted = false
|
||||||
|
upgradeBelow.drawAsText.style = TextStyle.Bordered
|
||||||
|
end
|
||||||
|
upgradeBelow = upgradeEntity
|
||||||
|
menuEntity.menuItems[#menuEntity.menuItems + 1] = upgradeEntity
|
||||||
|
playdate.timer.new(delay, function(_system, _upgradeEntity)
|
||||||
|
_system.world:addEntity(_upgradeEntity)
|
||||||
|
end, system, upgradeEntity)
|
||||||
delay = delay + delayPerDrop
|
delay = delay + delayPerDrop
|
||||||
|
system.world:addEntity(menuEntity)
|
||||||
end
|
end
|
||||||
system.world:removeEntity(e)
|
system.world:removeEntity(e)
|
||||||
end
|
end
|
||||||
|
|
|
@ -109,7 +109,7 @@ function getAvailableSpawnerUpgrades()
|
||||||
local upgrades = {}
|
local upgrades = {}
|
||||||
for _, spawner in pairs(spawnerSystem.entities) do
|
for _, spawner in pairs(spawnerSystem.entities) do
|
||||||
if spawner.hasUpgradeSpeed then
|
if spawner.hasUpgradeSpeed then
|
||||||
upgrades[#upgrades + 1] = { hasUpgradeSpeed = spawner.hasUpgradeSpeed }
|
-- upgrades[#upgrades + 1] = { hasUpgradeSpeed = spawner.hasUpgradeSpeed }
|
||||||
end
|
end
|
||||||
|
|
||||||
if spawner.canSpawn.entity.score then
|
if spawner.canSpawn.entity.score then
|
||||||
|
@ -117,7 +117,7 @@ function getAvailableSpawnerUpgrades()
|
||||||
name = "Double " .. spawner.name .. " value",
|
name = "Double " .. spawner.name .. " value",
|
||||||
apply = function()
|
apply = function()
|
||||||
spawner.canSpawn.entity.score = spawner.canSpawn.entity.score * 2
|
spawner.canSpawn.entity.score = spawner.canSpawn.entity.score * 2
|
||||||
end
|
end,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -126,7 +126,8 @@ function getAvailableSpawnerUpgrades()
|
||||||
name = "Double " .. spawner.name .. " frequency",
|
name = "Double " .. spawner.name .. " frequency",
|
||||||
apply = function()
|
apply = function()
|
||||||
spawner.odds = spawner.odds * 2
|
spawner.odds = spawner.odds * 2
|
||||||
end
|
-- addEntity({ roundAction = "NEXT_ROUND" })
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- if not spawner.canSpawn.entity.velocity then
|
-- if not spawner.canSpawn.entity.velocity then
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
local sqrt = math.sqrt
|
local sqrt = math.sqrt
|
||||||
|
|
||||||
velocitySystem = filteredSystem({ position = T.XyPair, velocity = T.XyPair }, function(e, dt, system)
|
velocitySystem = filteredSystem({ position = T.XyPair, velocity = T.XyPair }, function(e, dt, system)
|
||||||
if not e.velocity then
|
if sqrt((e.velocity.x * e.velocity.x) + (e.velocity.y * e.velocity.y)) < 2 then
|
||||||
return
|
|
||||||
end
|
|
||||||
if sqrt((e.velocity.x * e.velocity.x) + (e.velocity.y * e.velocity.y)) < 1.5 then
|
|
||||||
e.velocity = nil
|
e.velocity = nil
|
||||||
if e.spawnEntitiesWhenStopped then
|
if e.spawnEntitiesWhenStopped then
|
||||||
e:spawnEntitiesWhenStopped(system.world)
|
e:spawnEntitiesWhenStopped(system.world)
|
||||||
|
|
|
@ -25,4 +25,4 @@ function Utils.getNDifferentValues(fromArr, n)
|
||||||
randoms[#randoms + 1] = fromArr[i]
|
randoms[#randoms + 1] = fromArr[i]
|
||||||
end
|
end
|
||||||
return randoms
|
return randoms
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue