-
Notifications
You must be signed in to change notification settings - Fork 20
Side Panel
This part is devoted to the panel on the right side of the game screen.
I do not use any pre-drawn image for the panel, and represent it with 3 (top, middle, and bottom) rectangular segments of uniform color. This can be implemented using love.graphics
primitives.
local side_panel = {}
local position_x = 608
local width = 200
local height_top = 160
local height_middle = 288
local height_bottom = 160
local position_top = vector( position_x, 0 )
local position_middle = vector( position_x, height_top )
local position_bottom = vector( position_x, height_top + height_middle )
function side_panel.draw()
side_panel.draw_background()
.....
end
function side_panel.draw_background()
local drawtype = 'fill'
local r, g, b, a = love.graphics.getColor( )
-- top
love.graphics.setColor( 255, 102, 0, 255 )
love.graphics.rectangle("fill",
position_top.x,
position_top.y,
width,
height_top )
love.graphics.setColor( 0, 0, 0, 255 )
love.graphics.rectangle("line",
position_top.x,
position_top.y,
width,
height_top )
-- middle
love.graphics.setColor( 255, 127, 42, 255 )
love.graphics.rectangle("fill",
position_middle.x,
position_middle.y,
width,
height_middle )
love.graphics.setColor( 0, 0, 0, 255 )
love.graphics.rectangle("line",
position_middle.x,
position_middle.y,
width,
height_middle )
-- bottom
love.graphics.setColor( 255, 102, 0, 255 )
love.graphics.rectangle("fill",
position_bottom.x,
position_bottom.y,
width,
height_bottom )
love.graphics.setColor( 0, 0, 0, 255 )
love.graphics.rectangle("line",
position_bottom.x,
position_bottom.y,
width,
height_bottom )
love.graphics.setColor( r, g, b, a )
end
- Side panel as a container for "lives_display".
local lives_display = require "lives_display"
side_panel.lives_display = lives_display
function side_panel.update( dt )
side_panel.lives_display.update( dt )
end
function side_panel.draw() --(*1)
side_panel.draw_background()
side_panel.lives_display.draw()
end
(*1): The drawing order is controlled by side_panel.draw
function.
The background is drawn below, and lives_display
on top of it.
This rearrangement requires certain updates in the "game" game state.
function game.enter( prev_state, ... )
.....
if prev_state == "gameover" or prev_state == "gamefinished" then
side_panel.lives_display.reset()
music:rewind()
end
if args and args.current_level then
bricks.clear_current_level_bricks()
bonuses.clear_current_level_bonuses()
levels.current_level = args.current_level
local level = levels.require_current_level()
bricks.construct_level( level )
balls.reset()
platform.remove_bonuses_effects()
walls.remove_bonuses_effects()
end
end
function game.update( dt )
.....
walls.update( dt )
side_panel.update( dt )
collisions.resolve_collisions( balls, platform,
walls, bricks,
bonuses, side_panel.lives_display )
game.check_no_more_balls( balls, side_panel.lives_display )
.....
end
function game.draw()
balls.draw()
.....
side_panel.draw()
end
function game.keyreleased( key, code )
.....
elseif key == 'escape' then
music:pause()
gamestates.set_state(
"gamepaused",
{ balls, platform, bricks, bonuses, walls, side_panel } )
end
end
function game.mousereleased( x, y, button, istouch )
.....
elseif button == 'r' or button == 2 then
music:pause()
gamestates.set_state(
"gamepaused",
{ balls, platform, bricks, bonuses, walls, side_panel } )
end
end
function game.check_no_more_balls( balls, lives_display )
if balls.no_more_balls then
.....
if lives_display.lives < 0 then
gamestates.set_state( "gameover",
{ balls, platform, bricks,
bonuses, walls, side_panel } )
else
.....
end
end
Feedback is crucial to improve the tutorial!
Let me know if you have any questions, critique, suggestions or just any other ideas.
Chapter 1: Prototype
- The Ball, The Brick, The Platform
- Game Objects as Lua Tables
- Bricks and Walls
- Detecting Collisions
- Resolving Collisions
- Levels
Appendix A: Storing Levels as Strings
Appendix B: Optimized Collision Detection (draft)
Chapter 2: General Code Structure
- Splitting Code into Several Files
- Loading Levels from Files
- Straightforward Gamestates
- Advanced Gamestates
- Basic Tiles
- Different Brick Types
- Basic Sound
- Game Over
Appendix C: Stricter Modules (draft)
Appendix D-1: Intro to Classes (draft)
Appendix D-2: Chapter 2 Using Classes.
Chapter 3 (deprecated): Details
- Improved Ball Rebounds
- Ball Launch From Platform (Two Objects Moving Together)
- Mouse Controls
- Spawning Bonuses
- Bonus Effects
- Glue Bonus
- Add New Ball Bonus
- Life and Next Level Bonuses
- Random Bonuses
- Menu Buttons
- Wall Tiles
- Side Panel
- Score
- Fonts
- More Sounds
- Final Screen
- Packaging
Appendix D: GUI Layouts
Appendix E: Love-release and Love.js
Beyond Programming: