Add basic functions

This commit is contained in:
백현웅 2024-12-30 19:32:56 +09:00
parent bc8308723b
commit 40fdba2588
9 changed files with 148 additions and 51 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.love

23
TODO.md Normal file
View file

@ -0,0 +1,23 @@
ui system
game system
seperated
simple, minimalistic solution
mousepressed = window.mousepressed(self, function(self,x, y, button)
end)
draw = window.draw(self, function (self)
end)
update
- game
+ screen
+ items
+ log
- node
+ x, y, width, height,
+ draw, update, mousepressed

View file

@ -1,19 +0,0 @@
local window = require("window")
local w = {}
function w.new(inner, x, y, w, h)
local mt = { __index = inner }
local a = {}
setmetatable(a, mt)
function a:draw()
inner:draw()
love.graphics.rectangle("line", 0, 0, w, h)
end
local r = window.new(a, x, y, h, w)
return r
end
return w

32
button.lua Normal file
View file

@ -0,0 +1,32 @@
local window = require('window')
local font = love.graphics.getFont()
local m = {}
function m.new(text, callback, x, y, width, height)
local tw = font:getWidth(text)
local th = font:getHeight(text)
local btn = {
text = text,
x = x,
y = y,
width = width,
height = height,
tx = (width - tw) / 2,
ty = (height - th) / 2
}
btn.mousepressed = window.mousepressed(function(self, x, y, button)
callback(x, y, button)
end)
btn.draw = window.draw(function(self)
love.graphics.printf(self.text, self.tx, self.ty, self.width)
window.draw_border(self.width, self.height)
end)
return btn
end
return m

8
conf.lua Normal file
View file

@ -0,0 +1,8 @@
WIDTH = 320
HEIGHT = 240
MULTIPLIER = 1.5
function love.conf(t)
t.window.width = MULTIPLIER * WIDTH
t.window.height = MULTIPLIER * HEIGHT
end

5
export.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
rm garden.love
zip garden.love *.lua
cp garden.love ~/storage/downloads/

View file

@ -1,20 +1,60 @@
local window = require("window")
local bwindow = require("bordered_window")
--local button = require("button")
local button = require("button")
function love.load()
b = {}
function b.draw()
love.graphics.print("A", 10, 10)
timer = 0
bx, by = 0, 0
cx, cy = 0, 0
main = {
x = 50,
y = 50,
rx = 50, ry = 50, width = 300, height = 200
}
function main:moverect()
self.rx = self.rx + 50
self.ry = self.ry + 50
end
ba = bwindow.new(b, 200, 200, 50, 50)
-- canvas = love.graphics.newCanvas()
local m = main
cback = function (x, y)
cx, cy = x, y
m:moverect()
end
btn = button.new('Move', cback, 10, 10, 50, 50)
main.draw = window.draw(function(self)
love.graphics.rectangle('fill', self.rx, self.ry, 50, 50)
love.graphics.print(string.format("x %d", self.rx), 50, 100)
btn:draw()
end)
main.mousepressed = window.mousepressed(function(self, x, y, button)
btn:mousepressed(x, y, button)
end)
end
function love.mousepressed(x, y, button)
local x, y = x / MULTIPLIER, y / MULTIPLIER
bx, by = x, y
main:mousepressed(x, y, button)
end
function love.update(dt)
timer = timer + dt
end
function love.draw()
ba:draw()
love.graphics.push()
love.graphics.scale(MULTIPLIER)
love.graphics.print(string.format("t: %d", timer), 0, 0)
love.graphics.print(string.format("%d %d", bx, by), 0, 20)
love.graphics.print(string.format("%d %d", cx, cy), 0, 40)
main:draw()
love.graphics.pop()
end

10
util.lua Normal file
View file

@ -0,0 +1,10 @@
local m = {}
function m.between(x, a, b)
return a <= x and x <= b
end
function m.inside(px, py, x, y, w, h)
return m.between(px, x, x+w) and
m.between(py, y, y+h)
end

View file

@ -1,33 +1,30 @@
-- primitive of drawing objects
local w = {}
function w.new(inner, x, y, w, h)
local r = {
transform = love.math.newTransform(x, y),
width = w,
height = h
}
function r:transformPoint(x, y)
local x, y = transform:transformPoint(x, y)
if 0 <= x and x <= width and 0 <= y and y <= height then
return x, y
else
return nil
end
end
function r:mousepressed(m, x, y)
return inner:mousepressed(m, x, y)
end
function r:draw()
function w.draw(f)
return function(self)
love.graphics.push()
love.graphics.applyTransform(self.transform)
inner:draw()
love.graphics.translate(self.x, self.y)
f(self)
love.graphics.pop()
end
end
function w.mousepressed(f)
return function(self, x, y, button)
local x, y = x - self.x, y - self.y
if 0 <= x and x <= self.width and 0 <= y and y <= self.height then
f(self, x, y, button)
end
end
end
function w.draw_border(width, height)
love.graphics.push('all')
love.graphics.setLineWidth(5)
love.graphics.rectangle('line', 0, 0, width, height, 5)
love.graphics.pop()
end
return r
end
return w