Compare commits
2 Commits
9561db2847
...
7cfffde56d
| Author | SHA1 | Date | |
|---|---|---|---|
| 7cfffde56d | |||
| 3f821d4258 |
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 9.9 KiB |
@@ -28,7 +28,7 @@ function BaseMenu:_init(parent, name, index, bckg)
|
|||||||
|
|
||||||
-- Create background sprite and container.
|
-- Create background sprite and container.
|
||||||
self.background = Sprite(bckg)
|
self.background = Sprite(bckg)
|
||||||
self.container = VBox(15, 5, love.graphics.getWidth())
|
self.container = VBox(15, 5, love.graphics.getWidth() - 15)
|
||||||
|
|
||||||
-- Register the background and container into the asset manager.
|
-- Register the background and container into the asset manager.
|
||||||
assets:register(self.name, self.background)
|
assets:register(self.name, self.background)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ local make_class = require 'src.utils.classes'
|
|||||||
local constants = require 'src.gstates.menus.const'
|
local constants = require 'src.gstates.menus.const'
|
||||||
local BaseMenu = require 'src.gstates.menus.base'
|
local BaseMenu = require 'src.gstates.menus.base'
|
||||||
local Color = require 'src.utils.color'
|
local Color = require 'src.utils.color'
|
||||||
|
local Label = require 'src.ui.label'
|
||||||
|
local TextButton = require 'src.ui.textbtn'
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@@ -23,12 +25,12 @@ function MainMenu:_init(parent, title_font, button_font)
|
|||||||
BaseMenu._init(self, parent, "Main Menu", constants.MAIN_MENU, 'imgs/concb03.png')
|
BaseMenu._init(self, parent, "Main Menu", constants.MAIN_MENU, 'imgs/concb03.png')
|
||||||
|
|
||||||
-- Create UI elements of the main menu.
|
-- Create UI elements of the main menu.
|
||||||
self.container:add_label('LoveDOS', title_font, Color(215, 0, 0), true)
|
self.container:add(Label(nil, nil, 'LoveDOS', title_font, Color(215, 0, 0), true))
|
||||||
self.container:add_text_button('New Game', button_font)
|
self.container:add(TextButton('New Game', button_font))
|
||||||
self.container:add_text_button('Load Game', button_font)
|
self.container:add(TextButton('Load Game', button_font))
|
||||||
self.container:add_text_button('Options', button_font, function() parent.next_menu = constants.OPTIONS_MENU end)
|
self.container:add(TextButton('Options', button_font, nil, nil, function() parent.next_menu = constants.OPTIONS_MENU end))
|
||||||
self.container:add_text_button('Help & Story', button_font)
|
self.container:add(TextButton('Help & Story', button_font))
|
||||||
self.container:add_text_button('Quit', button_font, function() parent.next_state = -1 end)
|
self.container:add(TextButton('Quit', button_font, nil, nil, function() parent.next_state = -1 end))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,12 @@
|
|||||||
|
|
||||||
local make_class = require 'src.utils.classes'
|
local make_class = require 'src.utils.classes'
|
||||||
local constants = require 'src.gstates.menus.const'
|
local constants = require 'src.gstates.menus.const'
|
||||||
|
local settings = require 'src.utils.settings'
|
||||||
local BaseMenu = require 'src.gstates.menus.base'
|
local BaseMenu = require 'src.gstates.menus.base'
|
||||||
local Color = require 'src.utils.color'
|
local Color = require 'src.utils.color'
|
||||||
|
local HBox = require 'src.ui.hbox'
|
||||||
|
local Label = require 'src.ui.label'
|
||||||
|
local TextButton = require 'src.ui.textbtn'
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@@ -23,12 +27,28 @@ function OptionsMenu:_init(parent, title_font, button_font)
|
|||||||
BaseMenu._init(self, parent, "Options Menu", constants.OPTIONS_MENU, 'imgs/cpu.png')
|
BaseMenu._init(self, parent, "Options Menu", constants.OPTIONS_MENU, 'imgs/cpu.png')
|
||||||
|
|
||||||
-- Create UI elements of the main menu.
|
-- Create UI elements of the main menu.
|
||||||
self.container:add_label('Options', title_font, Color(215, 0, 0), true)
|
self.container:add(Label(nil, nil, 'Options', title_font, Color(215, 0, 0), true))
|
||||||
self.container:add_label('Enable Permadeath', button_font)
|
|
||||||
self.container:add_label('Controls', button_font)
|
local box = HBox()
|
||||||
self.container:add_label('Sound Volume', button_font)
|
box:add(Label(nil, nil, 'Enable Permadeath', button_font))
|
||||||
self.container:add_label('Music Volume', button_font)
|
box:add(Label(nil, nil, 'X', button_font))
|
||||||
self.container:add_text_button('Go Back', button_font, function() parent.next_menu = constants.MAIN_MENU end)
|
self.container:add(box)
|
||||||
|
|
||||||
|
box = HBox()
|
||||||
|
box:add(Label(nil, nil, 'Controls', button_font))
|
||||||
|
self.container:add(box)
|
||||||
|
|
||||||
|
box = HBox()
|
||||||
|
box:add(Label(nil, nil, 'Sound Volume', button_font))
|
||||||
|
self.container:add(box)
|
||||||
|
|
||||||
|
box = HBox()
|
||||||
|
box:add(Label(nil, nil, 'Music Volume', button_font))
|
||||||
|
self.container:add(box)
|
||||||
|
|
||||||
|
box = HBox()
|
||||||
|
box:add(TextButton('Go Back', button_font, nil, nil, function() parent.next_menu = constants.MAIN_MENU end))
|
||||||
|
self.container:add(box)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
62
src/ui/hbox.lua
Normal file
62
src/ui/hbox.lua
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Imports
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local make_class = require 'src.utils.classes'
|
||||||
|
local Layout = require 'src.ui.layout'
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Class definitions
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local HBox = make_class(Layout)
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Class methods
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function HBox:_init(x, y, w, h, spacing)
|
||||||
|
Layout._init(self, x, y, w, h, spacing)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function HBox:load()
|
||||||
|
Layout.load(self)
|
||||||
|
|
||||||
|
local _x = self.x
|
||||||
|
|
||||||
|
-- Load required assets if needed and then compute the coordinates of each button.
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v.y = self.y
|
||||||
|
|
||||||
|
v.x = _x
|
||||||
|
_x = _x + v.w + self.s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function HBox:set_dimensions()
|
||||||
|
if self.w == nil then
|
||||||
|
self.w = 0
|
||||||
|
for i, v in pairs(self.elements) do
|
||||||
|
self.w = self.w + v.w
|
||||||
|
if i < #self.elements then self.w = self.w + self.s end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.h == nil then
|
||||||
|
self.h = 0
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
if v.h > self.h then self.h = v.h end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Module return
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return HBox
|
||||||
96
src/ui/layout.lua
Normal file
96
src/ui/layout.lua
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Imports
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local make_class = require 'src.utils.classes'
|
||||||
|
local UIElement = require 'src.ui.element'
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Class definitions
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local Layout = make_class(UIElement)
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Class methods
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function Layout:_init(x, y, w, h, spacing, float)
|
||||||
|
UIElement._init(self, x, y, float)
|
||||||
|
self.x = x ~= nil and x or 0
|
||||||
|
self.y = y ~= nil and y or 0
|
||||||
|
self.w = w
|
||||||
|
self.h = h
|
||||||
|
self.s = spacing ~= nil and spacing or 10
|
||||||
|
self.elements = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:add(element)
|
||||||
|
table.insert(self.elements, element)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:load()
|
||||||
|
-- Load required assets if needed and then compute the coordinates of each button.
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
if v.is_a[UIElement] then
|
||||||
|
v:load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self:set_dimensions()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:unload()
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
if v.is_a[UIElement] then
|
||||||
|
v:unload()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:update(dt)
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v:update(dt)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:draw()
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v:draw()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:mousemoved(x, y, dx, dy)
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v:mousemoved(x, y, dx, dy)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:mousepressed(x, y, btn)
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v:mousepressed(x, y, btn)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Layout:mousereleased(x, y, btn)
|
||||||
|
for _, v in pairs(self.elements) do
|
||||||
|
v:mousereleased(x, y, btn)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Module return
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return Layout
|
||||||
@@ -3,17 +3,14 @@
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
local make_class = require 'src.utils.classes'
|
local make_class = require 'src.utils.classes'
|
||||||
local Asset = require 'src.utils.asset'
|
local Layout = require 'src.ui.layout'
|
||||||
local Drawable = require 'src.graphics.drawable'
|
|
||||||
local Label = require 'src.ui.label'
|
|
||||||
local TextButton = require 'src.ui.textbtn'
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Class definitions
|
-- Class definitions
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
local VBox = make_class(Drawable, Asset)
|
local VBox = make_class(Layout)
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@@ -21,36 +18,19 @@ local VBox = make_class(Drawable, Asset)
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
function VBox:_init(x, y, w, h, spacing)
|
function VBox:_init(x, y, w, h, spacing)
|
||||||
self.x = x ~= nil and x or 0
|
Layout._init(self, x, y, w, h, spacing)
|
||||||
self.y = y ~= nil and y or 0
|
|
||||||
self.w = w ~= nil and w or 0
|
|
||||||
self.h = h ~= nil and h or 0
|
|
||||||
self.s = spacing ~= nil and spacing or 10
|
|
||||||
self.elements = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:add_text_button(text, font, callback, float, base_col, sel_color, press_col)
|
|
||||||
table.insert(self.elements, TextButton(text, font, 0, 0, callback, float, base_col, sel_color, press_col))
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:add_label(text, font, color, float)
|
|
||||||
table.insert(self.elements, Label(0, 0, text, font, color, float))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function VBox:load()
|
function VBox:load()
|
||||||
|
Layout.load(self)
|
||||||
|
|
||||||
local _y = self.y
|
local _y = self.y
|
||||||
|
|
||||||
-- Load required assets if needed and then compute the coordinates of each button.
|
-- Load required assets if needed and then compute the coordinates of each button.
|
||||||
for _, v in pairs(self.elements) do
|
for _, v in pairs(self.elements) do
|
||||||
if v.is_a[Asset] then
|
|
||||||
v:load()
|
|
||||||
end
|
|
||||||
|
|
||||||
if v.float_right then
|
if v.float_right then
|
||||||
v.x = self.w - self.x - v.w
|
v.x = self.w - v.w
|
||||||
else
|
else
|
||||||
v.x = self.x
|
v.x = self.x
|
||||||
end
|
end
|
||||||
@@ -61,50 +41,23 @@ function VBox:load()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function VBox:unload()
|
function VBox:set_dimensions()
|
||||||
for _, v in pairs(self.elements) do
|
if self.w == nil then
|
||||||
if v.is_a[Asset] then
|
self.w = 0
|
||||||
v:unload()
|
for _, v in pairs(self.elements) do
|
||||||
|
if v.w > self.w then self.w = v.w end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.h == nil then
|
||||||
|
self.h = 0
|
||||||
|
for i, v in pairs(self.elements) do
|
||||||
|
self.h = self.h + v.h
|
||||||
|
if i < #self.elements then self.h = self.h + self.s end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function VBox:update(dt)
|
|
||||||
for _, v in pairs(self.elements) do
|
|
||||||
v:update(dt)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:draw()
|
|
||||||
for _, v in pairs(self.elements) do
|
|
||||||
v:draw()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:mousemoved(x, y, dx, dy)
|
|
||||||
for _, v in pairs(self.elements) do
|
|
||||||
v:mousemoved(x, y, dx, dy)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:mousepressed(x, y, btn)
|
|
||||||
for _, v in pairs(self.elements) do
|
|
||||||
v:mousepressed(x, y, btn)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function VBox:mousereleased(x, y, btn)
|
|
||||||
for _, v in pairs(self.elements) do
|
|
||||||
v:mousereleased(x, y, btn)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Module return
|
-- Module return
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user