summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-03-16 15:10:30 +0800
committerEltrac <hi@guhub.cn>2025-03-16 15:10:30 +0800
commitdfdb1023f6513014fc0f955142d2667d7bda80c9 (patch)
treececb9113f5da747ffe3398701a1dd089bc4697ee
parentd6a4ca82a3874f2fca58ea7948185d697acf078a (diff)
feat(controller): easier bullet management
old approach: press number keys to put specific heart to the end of the line new approach: press Q or E to move the next bullet index
-rw-r--r--logic/controller.lua16
-rw-r--r--objects/Player.lua9
-rw-r--r--render/draws/objects.lua1
-rw-r--r--render/draws/ui.lua5
4 files changed, 18 insertions, 13 deletions
diff --git a/logic/controller.lua b/logic/controller.lua
index 0159ebd..44867bf 100644
--- a/logic/controller.lua
+++ b/logic/controller.lua
@@ -7,15 +7,11 @@ function controller.ctrlKeyPressed()
return keydown("lgui") or keydown("rgui") or keydown("lctrl") or keydown("rctrl")
end
-local function playerPressKeysToArrangeHearts(key)
- -- rearrange heart sequence with number keys
- local i = tonumber(key)
- local hearts = G.player.hearts
- local length = #hearts
- if i ~= nil and hearts[i] then
- -- move selected heart to the end
- local temp = table.remove(hearts, i)
- table.insert(hearts, temp)
+local function playerChangeNextBullet(key)
+ if key == "q" then
+ G.player.nextBullet = G.player.nextBullet -1
+ elseif key == "e" then
+ G.player.nextBullet = G.player.nextBullet +1
end
end
@@ -77,7 +73,7 @@ end
-- controller that requires one key press
function controller.keypressed(key)
- playerPressKeysToArrangeHearts(key)
+ playerChangeNextBullet(key)
switchLanguageSetting(key)
end
diff --git a/objects/Player.lua b/objects/Player.lua
index aabc9e2..89b1b54 100644
--- a/objects/Player.lua
+++ b/objects/Player.lua
@@ -19,11 +19,13 @@ function Player.new()
hearts = { "purpleheart", "redheart", "redheart", "redheart", "shinyheart", "shinyheart", "stickyheart" },
facing = Direction.DOWN,
moving = false,
- frameTimer = FrameTimer:new(config.frameRate, 2)
+ frameTimer = FrameTimer:new(config.frameRate, 2),
}, Player)
physics.bodifyObject(G.world, player)
+ player.nextBullet = #player.hearts
+
return player
end
@@ -68,7 +70,7 @@ end
function Player:shoot(target)
local hearts = self.hearts
- local currentBullet = hearts[#hearts]
+ local currentBullet = hearts[self.nextBullet]
-- red hearts and the last heart will take some more time to shoot
if currentBullet == "redheart" or #hearts == 1 then
@@ -89,7 +91,8 @@ function Player:shoot(target)
-- shoot the bullet
bullets.fire(currentBullet, target, self)
- table.remove(self.hearts)
+ table.remove(self.hearts, self.nextBullet)
+ self.nextBullet = self.nextBullet - 1
self.shootCooldown = G.time + config.player.shoot.cooldown
end
diff --git a/render/draws/objects.lua b/render/draws/objects.lua
index 11192ad..a4b9ba4 100644
--- a/render/draws/objects.lua
+++ b/render/draws/objects.lua
@@ -1,6 +1,7 @@
local enemyData = require "data.enemyData"
local graphics = require "utils.graphics"
require "data.directions"
+require "render.sprite"
local draws = {}
diff --git a/render/draws/ui.lua b/render/draws/ui.lua
index c75e9cd..8ec4acb 100644
--- a/render/draws/ui.lua
+++ b/render/draws/ui.lua
@@ -24,6 +24,11 @@ function ui.ammoBar()
utils.resetGraphics()
end
+ if i == G.player.nextBullet then
+ heartR = heartR * 1.2
+ utils.resetGraphics()
+ end
+
-- draw heart
sprite.drawSquare(v, position, heartR)
end