libraries_setup #3
@ -1,9 +1,15 @@
|
|||||||
local world = {
|
local world = {
|
||||||
require("src.world.race")(),
|
["main_menu"] = require("src.world.main_menu")(),
|
||||||
require("src.world.train")()
|
["race"] = require("src.world.race")(),
|
||||||
|
["train"] = require("src.world.train")(),
|
||||||
};
|
};
|
||||||
|
|
||||||
local world_i = 1
|
local world_i = "main_menu"
|
||||||
|
|
||||||
|
function load_world(world_to_load)
|
||||||
|
world_i = world_to_load
|
||||||
|
world[world_i]:reload()
|
||||||
|
end
|
||||||
|
|
||||||
function love.load()
|
function love.load()
|
||||||
world[world_i]:load()
|
world[world_i]:load()
|
||||||
@ -18,13 +24,6 @@ function love.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function love.keyreleased(key, scancode)
|
function love.keyreleased(key, scancode)
|
||||||
if (key == "right") then
|
|
||||||
world_i = world_i + 1
|
|
||||||
if (world_i > 2) then
|
|
||||||
world_i = 1
|
|
||||||
end
|
|
||||||
world[world_i]:reload()
|
|
||||||
end
|
|
||||||
world[world_i]:keyreleased(key, scancode)
|
world[world_i]:keyreleased(key, scancode)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
30
game/src/world/common/component/button.lua
Normal file
30
game/src/world/common/component/button.lua
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
local components = {}
|
||||||
|
|
||||||
|
components.dict = {
|
||||||
|
collider = "button.collider",
|
||||||
|
func = "button.func",
|
||||||
|
label = "button.label"
|
||||||
|
}
|
||||||
|
|
||||||
|
function components.collider (c, x, y, w, h)
|
||||||
|
c.data = {
|
||||||
|
x = x or 0,
|
||||||
|
y = y or 0,
|
||||||
|
w = w or 0,
|
||||||
|
h = h or 0
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function default()
|
||||||
|
print("click")
|
||||||
|
end
|
||||||
|
|
||||||
|
function components.func (c, func)
|
||||||
|
c.data = func or default
|
||||||
|
end
|
||||||
|
|
||||||
|
function components.label (c, label)
|
||||||
|
c.data = label or ""
|
||||||
|
end
|
||||||
|
|
||||||
|
return components
|
||||||
81
game/src/world/common/system/trigger_button.lua
Normal file
81
game/src/world/common/system/trigger_button.lua
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
local system_constructor = require("wrapper.Concord.system")
|
||||||
|
local c_button = require("src.world.common.component.button")
|
||||||
|
|
||||||
|
local system = {}
|
||||||
|
|
||||||
|
system.__index = system
|
||||||
|
|
||||||
|
system.pool = {
|
||||||
|
pool = {
|
||||||
|
c_button.dict.collider,
|
||||||
|
c_button.dict.func,
|
||||||
|
c_button.dict.label
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
system.components = {
|
||||||
|
[c_button.dict.collider] = c_button.collider,
|
||||||
|
[c_button.dict.func] = c_button.func,
|
||||||
|
[c_button.dict.label] = c_button.label
|
||||||
|
}
|
||||||
|
|
||||||
|
function system.new()
|
||||||
|
local new_system = system_constructor.new("trigger_button", system.pool)
|
||||||
|
if (new_system) then
|
||||||
|
for k, v in pairs(system) do
|
||||||
|
new_system[k] = v
|
||||||
|
end
|
||||||
|
return new_system
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- x1 y1 -- (x1 + w1) y1
|
||||||
|
-- x2 y2
|
||||||
|
-- x1 (y1 + h1) -- (x1 + w1) (y1 + h1)
|
||||||
|
local function is_inside(x1,y1,w1,h1, x2,y2)
|
||||||
|
return x1 < x2 and
|
||||||
|
x2 < x1+w1 and
|
||||||
|
y1 < y2 and
|
||||||
|
y2 < y1+h1
|
||||||
|
end
|
||||||
|
|
||||||
|
function system:mousereleased(x, y, button, istouch, presses)
|
||||||
|
for _, e in ipairs(self.pool) do
|
||||||
|
local x1 = e[c_button.dict.collider].data.x
|
||||||
|
local y1 = e[c_button.dict.collider].data.y
|
||||||
|
local w1 = e[c_button.dict.collider].data.w
|
||||||
|
local h1 = e[c_button.dict.collider].data.h
|
||||||
|
local func = e[c_button.dict.func].data
|
||||||
|
if (is_inside(x1, y1, w1, h1, x, y) and button == 1) then
|
||||||
|
func()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function draw(text, x, y, w, h)
|
||||||
|
love.graphics.push()
|
||||||
|
love.graphics.line(
|
||||||
|
x, y,
|
||||||
|
x + w, y,
|
||||||
|
x + w, y + h,
|
||||||
|
x, y + h,
|
||||||
|
x, y
|
||||||
|
)
|
||||||
|
love.graphics.print(text, x, y)
|
||||||
|
love.graphics.pop()
|
||||||
|
end
|
||||||
|
|
||||||
|
function system:draw()
|
||||||
|
for _, e in ipairs(self.pool) do
|
||||||
|
local x = e[c_button.dict.collider].data.x
|
||||||
|
local y = e[c_button.dict.collider].data.y
|
||||||
|
local w = e[c_button.dict.collider].data.w
|
||||||
|
local h = e[c_button.dict.collider].data.h
|
||||||
|
local label = e[c_button.dict.label].data
|
||||||
|
draw(label, x, y, w, h)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return system
|
||||||
24
game/src/world/common/template/button.lua
Normal file
24
game/src/world/common/template/button.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
local button = require("src.world.common.component.button")
|
||||||
|
|
||||||
|
local template = {}
|
||||||
|
|
||||||
|
local function default()
|
||||||
|
end
|
||||||
|
|
||||||
|
template.default_data = {
|
||||||
|
collider = {
|
||||||
|
x = 0,
|
||||||
|
y = 0,
|
||||||
|
w = 20,
|
||||||
|
h = 20
|
||||||
|
},
|
||||||
|
func = default,
|
||||||
|
label = "debug"
|
||||||
|
}
|
||||||
|
function template.assemble(e, data)
|
||||||
|
e:give(button.dict.collider, data.collider.x, data.collider.y, data.collider.w, data.collider.h)
|
||||||
|
e:give(button.dict.func, data.func)
|
||||||
|
e:give(button.dict.label, data.label)
|
||||||
|
end
|
||||||
|
|
||||||
|
return template
|
||||||
47
game/src/world/main_menu/init.lua
Normal file
47
game/src/world/main_menu/init.lua
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
local reap = require("lib.reap")
|
||||||
|
|
||||||
|
local BASE = reap.base_path(...)
|
||||||
|
|
||||||
|
local world = require("wrapper.Concord.world")
|
||||||
|
|
||||||
|
local debug_entity = require("src.world.common.template.debug_entity")
|
||||||
|
local button = require("src.world.common.template.button")
|
||||||
|
|
||||||
|
local wrapper = world:extend()
|
||||||
|
|
||||||
|
local function button_func()
|
||||||
|
load_world("race")
|
||||||
|
end
|
||||||
|
|
||||||
|
function wrapper:new()
|
||||||
|
wrapper.super.new(self, BASE, ".main_menu")
|
||||||
|
end
|
||||||
|
|
||||||
|
function wrapper:load(_args)
|
||||||
|
wrapper.super.load(self, {
|
||||||
|
"src/world/common/system/"
|
||||||
|
}, {
|
||||||
|
{
|
||||||
|
assemblage = debug_entity.assembleDebug,
|
||||||
|
data = {
|
||||||
|
position = {0, 0},
|
||||||
|
label = "main_menu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
assemblage = button.assemble,
|
||||||
|
data = {
|
||||||
|
collider = {
|
||||||
|
x = 20,
|
||||||
|
y = 20,
|
||||||
|
w = 20,
|
||||||
|
h = 20
|
||||||
|
},
|
||||||
|
func = button_func,
|
||||||
|
label = "race"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
return wrapper
|
||||||
Loading…
x
Reference in New Issue
Block a user