Merge pull request #1 from tanema/master

Updated stuffs
This commit is contained in:
Paul Liverman 2014-11-10 13:00:47 -08:00
commit d81a656812
12 changed files with 284 additions and 232 deletions

View File

@ -10,12 +10,12 @@ only it has been largely refactored and edited to allow for scaling and proper t
## How to use ## How to use
```lua ```lua
local LightWorld = require "lib/light_world" local LightWorld = require "lib" --the path to where light_world is (in this repo "lib")
-- create light world -- create light world
lightWorld = LightWorld({ lightWorld = LightWorld({
drawBackground = drawBackground, --the callback to use for drawing the background drawBackground = drawBackground, --the callback to use for drawing the background
drawForground = drawForground, --the callback to use for drawing the foreground drawForeground = drawForeground, --the callback to use for drawing the foreground
ambient = {55,55,55}, --the general ambient light in the environment ambient = {55,55,55}, --the general ambient light in the environment
}) })

View File

@ -1,5 +1,5 @@
-- Example: Complex Example -- Example: Complex Example
local LightWorld = require "lib/light_world" local LightWorld = require "lib"
function initScene() function initScene()
-- physic world -- physic world
@ -94,7 +94,7 @@ function love.load()
refractionStrength = 16.0, refractionStrength = 16.0,
reflectionVisibility = 0.75, reflectionVisibility = 0.75,
drawBackground = drawBackground, drawBackground = drawBackground,
drawForground = drawForground drawForeground = drawForeground
}) })
mouseLight = lightWorld:newLight(0, 0, 255, 191, 127, lightRange) mouseLight = lightWorld:newLight(0, 0, 255, 191, 127, lightRange)
@ -131,9 +131,11 @@ end
function love.update(dt) function love.update(dt)
love.window.setTitle("Light vs. Shadow Engine (FPS:" .. love.timer.getFPS() .. ")") love.window.setTitle("Light vs. Shadow Engine (FPS:" .. love.timer.getFPS() .. ")")
mouseLight:setPosition(love.mouse.getX(), love.mouse.getY(), 16.0 + (math.sin(lightDirection) + 1.0) * 64.0)
mx = love.mouse.getX() mx, my = (love.mouse.getX() - offsetX)/scale, (love.mouse.getY() - offsetY)/scale
my = love.mouse.getY()
mouseLight:setPosition(mx, my, 16.0 + (math.sin(lightDirection) + 1.0) * 64.0)
lightDirection = lightDirection + dt lightDirection = lightDirection + dt
colorAberration = math.max(0.0, colorAberration - dt * 10.0) colorAberration = math.max(0.0, colorAberration - dt * 10.0)
@ -357,7 +359,7 @@ function drawBackground(l,t,w,h)
end end
end end
function drawForground(l,t,w,h) function drawForeground(l,t,w,h)
love.graphics.setBlendMode("alpha") love.graphics.setBlendMode("alpha")
for i = 1, phyCnt do for i = 1, phyCnt do
if phyLight[i]:getType() == "polygon" then if phyLight[i]:getType() == "polygon" then

View File

@ -1,18 +1,18 @@
-- Example: Normal map Example -- Example: Normal map Example
local LightWorld = require "lib/light_world" local LightWorld = require "lib"
function love.load() function love.load()
x = 0 x = 0
y = 0 y = 0
scale = 1 scale = 1
-- load images -- load images
image = love.graphics.newImage("gfx/crossColor.jpg") image = love.graphics.newImage("gfx/rock.png")
image_normal = love.graphics.newImage("gfx/crossnrm.jpg") image_normal = love.graphics.newImage("gfx/rock_n.png")
-- create light world -- create light world
lightWorld = LightWorld({ lightWorld = LightWorld({
drawBackground = drawBackground, drawBackground = drawBackground,
drawForground = drawForground, drawForeground = drawForeground,
ambient = {55,55,55}, ambient = {55,55,55},
refractionStrength = 32.0, refractionStrength = 32.0,
reflectionVisibility = 0.75, reflectionVisibility = 0.75,
@ -21,6 +21,7 @@ function love.load()
-- create light -- create light
lightMouse = lightWorld:newLight(0, 0, 160, 160, 160, 300) lightMouse = lightWorld:newLight(0, 0, 160, 160, 160, 300)
lightMouse:setGlowStrength(0.3) lightMouse:setGlowStrength(0.3)
--lightMouse.normalInvert = true
-- create shadow bodys -- create shadow bodys
local w, h = love.graphics.getWidth(), love.graphics.getHeight() local w, h = love.graphics.getWidth(), love.graphics.getHeight()
@ -65,7 +66,7 @@ function drawBackground(l,t,w,h)
love.graphics.rectangle("fill", -l/scale, -t/scale, w/scale, h/scale) love.graphics.rectangle("fill", -l/scale, -t/scale, w/scale, h/scale)
end end
function drawForground(l,t,w,h) function drawForeground(l,t,w,h)
love.graphics.setColor(255, 255, 255) love.graphics.setColor(255, 255, 255)
local w, h = love.graphics.getWidth(), love.graphics.getHeight() local w, h = love.graphics.getWidth(), love.graphics.getHeight()
love.graphics.draw(image, w/2-(image:getWidth()/2), h/2-(image:getHeight()/2)) love.graphics.draw(image, w/2-(image:getWidth()/2), h/2-(image:getHeight()/2))

View File

@ -1,5 +1,5 @@
-- Example: Short Example -- Example: Short Example
local LightWorld = require "lib/light_world" local LightWorld = require "lib"
function love.load() function love.load()
testShader = 0 testShader = 0
@ -16,7 +16,7 @@ function love.load()
-- create light world -- create light world
lightWorld = LightWorld({ lightWorld = LightWorld({
drawBackground = drawBackground, drawBackground = drawBackground,
drawForground = drawForground, drawForeground = drawForeground,
ambient = {55,55,55}, ambient = {55,55,55},
refractionStrength = 32.0, refractionStrength = 32.0,
reflectionVisibility = 0.75, reflectionVisibility = 0.75,
@ -77,6 +77,12 @@ function love.keypressed(k)
if colorAberration == 0.0 then if colorAberration == 0.0 then
colorAberration = 3.0 colorAberration = 3.0
end end
elseif k == "f" then
lightWorld:remove(lightMouse)
elseif k == "g" then
lightWorld:remove(circleTest)
elseif k == "h" then
lightWorld:remove(rectangleTest)
end end
end end
@ -110,7 +116,7 @@ function love.update(dt)
lightWorld.post_shader:removeEffect("chromatic_aberration") lightWorld.post_shader:removeEffect("chromatic_aberration")
end end
lightMouse:setPosition(love.mouse.getX()/scale, love.mouse.getY()/scale) lightMouse:setPosition((love.mouse.getX() - x)/scale, (love.mouse.getY() - y)/scale)
end end
function love.draw() function love.draw()
@ -132,7 +138,7 @@ function drawBackground(l,t,w,h)
love.graphics.rectangle("fill", -l/scale, -t/scale, w/scale, h/scale) love.graphics.rectangle("fill", -l/scale, -t/scale, w/scale, h/scale)
end end
function drawForground(l,t,w,h) function drawForeground(l,t,w,h)
love.graphics.setColor(63, 255, 127) love.graphics.setColor(63, 255, 127)
local cx, cy = circleTest:getPosition() local cx, cy = circleTest:getPosition()
love.graphics.circle("fill", cx, cy, circleTest:getRadius()) love.graphics.circle("fill", cx, cy, circleTest:getRadius())

BIN
gfx/rock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
gfx/rock_n.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View File

@ -109,6 +109,17 @@ function body:setPosition(x, y)
end end
end end
-- move position
function body:move(x, y)
if x then
self.x = self.x + x
end
if y then
self.y = self.y + y
end
self:refresh()
end
-- get x position -- get x position
function body:getPosition() function body:getPosition()
return self.x, self.y return self.x, self.y
@ -617,10 +628,12 @@ function body:calculateCircleShadow(light)
curShadowGeometry[6] = y3 - (light.y - y3) * shadowLength curShadowGeometry[6] = y3 - (light.y - y3) * shadowLength
curShadowGeometry[7] = x2 - (light.x - x2) * shadowLength curShadowGeometry[7] = x2 - (light.x - x2) * shadowLength
curShadowGeometry[8] = y2 - (light.y - y2) * shadowLength curShadowGeometry[8] = y2 - (light.y - y2) * shadowLength
curShadowGeometry.alpha = self.alpha
curShadowGeometry.red = self.red curShadowGeometry.red = self.red
curShadowGeometry.green = self.green curShadowGeometry.green = self.green
curShadowGeometry.blue = self.blue curShadowGeometry.blue = self.blue
curShadowGeometry.alpha = self.alpha
return curShadowGeometry return curShadowGeometry
else else
return nil return nil

View File

@ -21,21 +21,24 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
]] ]]
local _PACKAGE = (...):match("^(.+)[%./][^%./]+") or "" local _PACKAGE = string.gsub(...,"%.","/") or ""
local class = require(_PACKAGE..'/class') if string.len(_PACKAGE) > 0 then
local Light = require(_PACKAGE..'/light') _PACKAGE = _PACKAGE .. "/"
local Body = require(_PACKAGE..'/body') end
local util = require(_PACKAGE..'/util') local class = require(_PACKAGE..'class')
local normal_map = require(_PACKAGE..'/normal_map') local Light = require(_PACKAGE..'light')
local PostShader = require(_PACKAGE..'/postshader') local Body = require(_PACKAGE..'body')
require(_PACKAGE..'/postshader') local util = require(_PACKAGE..'util')
local normal_map = require(_PACKAGE..'normal_map')
local PostShader = require(_PACKAGE..'postshader')
require(_PACKAGE..'postshader')
local light_world = class() local light_world = class()
light_world.blurv = love.graphics.newShader(_PACKAGE.."/shaders/blurv.glsl") light_world.blurv = love.graphics.newShader(_PACKAGE.."shaders/blurv.glsl")
light_world.blurh = love.graphics.newShader(_PACKAGE.."/shaders/blurh.glsl") light_world.blurh = love.graphics.newShader(_PACKAGE.."shaders/blurh.glsl")
light_world.refractionShader = love.graphics.newShader(_PACKAGE.."/shaders/refraction.glsl") light_world.refractionShader = love.graphics.newShader(_PACKAGE.."shaders/refraction.glsl")
light_world.reflectionShader = love.graphics.newShader(_PACKAGE.."/shaders/reflection.glsl") light_world.reflectionShader = love.graphics.newShader(_PACKAGE.."shaders/reflection.glsl")
function light_world:init(options) function light_world:init(options)
self.lights = {} self.lights = {}
@ -55,7 +58,7 @@ function light_world:init(options)
self.glowDown = false self.glowDown = false
self.drawBackground = function() end self.drawBackground = function() end
self.drawForground = function() end self.drawForeground = function() end
options = options or {} options = options or {}
for k, v in pairs(options) do self[k] = v end for k, v in pairs(options) do self[k] = v end
@ -99,7 +102,7 @@ function light_world:draw(l,t,s)
util.drawto(self.render_buffer, l, t, s, function() util.drawto(self.render_buffer, l, t, s, function()
self.drawBackground( l,t,w,h,s) self.drawBackground( l,t,w,h,s)
self:drawShadow( l,t,w,h,s) self:drawShadow( l,t,w,h,s)
self.drawForground( l,t,w,h,s) self.drawForeground( l,t,w,h,s)
self:drawMaterial( l,t,w,h,s) self:drawMaterial( l,t,w,h,s)
self:drawShine( l,t,w,h,s) self:drawShine( l,t,w,h,s)
self:drawPixelShadow(l,t,w,h,s) self:drawPixelShadow(l,t,w,h,s)
@ -177,7 +180,7 @@ function light_world:drawPixelShadow(l,t,w,h,s)
self.pixelShadow2:clear() self.pixelShadow2:clear()
for i = 1, #self.lights do for i = 1, #self.lights do
self.lights[i]:drawPixelShadow(l,t,w,h, self.normalMap, self.pixelShadow2) self.lights[i]:drawPixelShadow(l,t,w,h,s, self.normalMap, self.pixelShadow2)
end end
self.pixelShadow:clear(255, 255, 255) self.pixelShadow:clear(255, 255, 255)
@ -185,7 +188,7 @@ function light_world:drawPixelShadow(l,t,w,h,s)
util.drawto(self.pixelShadow, l, t, s, function() util.drawto(self.pixelShadow, l, t, s, function()
love.graphics.setBlendMode("additive") love.graphics.setBlendMode("additive")
love.graphics.setColor({self.ambient[1], self.ambient[2], self.ambient[3]}) love.graphics.setColor({self.ambient[1], self.ambient[2], self.ambient[3]})
love.graphics.rectangle("fill", l/s,t/s,w/s,h/s) love.graphics.rectangle("fill", -l/s, -t/s, w/s,h/s)
end) end)
util.drawCanvasToCanvas(self.pixelShadow, self.render_buffer, {blendmode = "multiplicative"}) util.drawCanvasToCanvas(self.pixelShadow, self.render_buffer, {blendmode = "multiplicative"})
@ -277,7 +280,7 @@ end
function light_world:clear() function light_world:clear()
light_world:clearLights() light_world:clearLights()
light_world:clearBodys() light_world:clearBodies()
end end
-- clear lights -- clear lights
@ -287,7 +290,7 @@ function light_world:clearLights()
end end
-- clear objects -- clear objects
function light_world:clearBodys() function light_world:clearBodies()
self.body = {} self.body = {}
self.isShadows = false self.isShadows = false
self.isRefraction = false self.isRefraction = false
@ -299,7 +302,7 @@ function light_world:setBackgroundMethod(fn)
end end
function light_world:setForegroundMethod(fn) function light_world:setForegroundMethod(fn)
self.drawForground = fn or function() end self.drawForeground = fn or function() end
end end
-- set ambient color -- set ambient color
@ -340,7 +343,7 @@ end
-- new rectangle -- new rectangle
function light_world:newRectangle(x, y, w, h) function light_world:newRectangle(x, y, w, h)
self.isShadows = true self.isShadows = true
return self:newBody("rectangle", x, y, width, height) return self:newBody("rectangle", x, y, w, h)
end end
-- new circle -- new circle
@ -414,4 +417,25 @@ function light_world:getLight(n)
return self.lights[n] return self.lights[n]
end end
function light_world:remove(to_kill)
if to_kill:is_a(Body) then
for i = 1, #self.body do
if self.body[i] == to_kill then
table.remove(self.body, i)
return true
end
end
elseif to_kill:is_a(Light) then
for i = 1, #self.lights do
if self.lights[i] == to_kill then
table.remove(self.lights, i)
return true
end
end
end
-- failed to find it
return false
end
return light_world return light_world

View File

@ -32,6 +32,8 @@ function light:refresh(w, h)
self.shadow = love.graphics.newCanvas(w, h) self.shadow = love.graphics.newCanvas(w, h)
self.shine = love.graphics.newCanvas(w, h) self.shine = love.graphics.newCanvas(w, h)
self.normalInvertShader:send('screenResolution', {w, h})
self.normalShader:send('screenResolution', {w, h})
end end
-- set position -- set position
@ -47,7 +49,7 @@ end
-- get x -- get x
function light:getPosition() function light:getPosition()
return self.x, self.y return self.x, self.y, self.z
end end
-- set color -- set color
@ -105,15 +107,17 @@ function light:setGlowStrength(strength)
self.glowStrength = strength self.glowStrength = strength
end end
function light:inRange(l,t,w,h) function light:inRange(l,t,w,h,s)
return self.x + self.range > l and local lx, ly, rs = (self.x + l/s) * s, (self.y + t/s) * s, self.range * s
self.x - self.range < (l+w) and
self.y + self.range > t and return (lx + rs) > 0 and
self.y - self.range < (t+h) (lx - rs) < w/s and
(ly + rs) > 0 and
(ly - rs) < h/s
end end
function light:drawShadow(l,t,w,h,s,bodies, canvas) function light:drawShadow(l,t,w,h,s,bodies, canvas)
if self.visible and self:inRange(l,t,w,h) then if self.visible and self:inRange(l,t,w,h,s) then
-- calculate shadows -- calculate shadows
local shadow_geometry = {} local shadow_geometry = {}
for i = 1, #bodies do for i = 1, #bodies do
@ -126,7 +130,8 @@ function light:drawShadow(l,t,w,h,s,bodies, canvas)
-- draw shadow -- draw shadow
self.shadow:clear() self.shadow:clear()
util.drawto(self.shadow, l, t, s, function() util.drawto(self.shadow, l, t, s, function()
self.shader:send("lightPosition", {self.x*s, (h/s - self.y)*s, self.z})
self.shader:send("lightPosition", {(self.x + l/s) * s, (h/s - (self.y + t/s)) * s, self.z/255.0})
self.shader:send("lightRange", self.range*s) self.shader:send("lightRange", self.range*s)
self.shader:send("lightColor", {self.red / 255.0, self.green / 255.0, self.blue / 255.0}) self.shader:send("lightColor", {self.red / 255.0, self.green / 255.0, self.blue / 255.0})
self.shader:send("lightSmooth", self.smooth) self.shader:send("lightSmooth", self.smooth)
@ -164,7 +169,7 @@ function light:drawShadow(l,t,w,h,s,bodies, canvas)
end end
function light:drawShine(l,t,w,h,s,bodies,canvas) function light:drawShine(l,t,w,h,s,bodies,canvas)
if self.visible then if self.visible and self:inRange(l,t,w,h,s) then
--update shine --update shine
self.shine:clear(255, 255, 255) self.shine:clear(255, 255, 255)
util.drawto(self.shine, l, t, s, function() util.drawto(self.shine, l, t, s, function()
@ -179,21 +184,19 @@ function light:drawShine(l,t,w,h,s,bodies,canvas)
end end
end end
function light:drawPixelShadow(l,t,w,h, normalMap, canvas) function light:drawPixelShadow(l,t,w,h,s, normalMap, canvas)
if self.visible then if self.visible and self:inRange(l,t,w,h,s) then
if self.normalInvert then if self.normalInvert then
self.normalInvertShader:send('screenResolution', {w, h})
self.normalInvertShader:send('lightColor', {self.red / 255.0, self.green / 255.0, self.blue / 255.0}) self.normalInvertShader:send('lightColor', {self.red / 255.0, self.green / 255.0, self.blue / 255.0})
self.normalInvertShader:send('lightPosition',{self.x, lh - self.y, self.z / 255.0}) self.normalInvertShader:send("lightPosition", {(self.x + l/s) * s, (h/s - (self.y + t/s)) * s, self.z / 255.0})
self.normalInvertShader:send('lightRange',{self.range}) self.normalInvertShader:send('lightRange',{self.range})
self.normalInvertShader:send("lightSmooth", self.smooth) self.normalInvertShader:send("lightSmooth", self.smooth)
self.normalInvertShader:send("lightAngle", math.pi - self.angle / 2.0) self.normalInvertShader:send("lightAngle", math.pi - self.angle / 2.0)
self.normalInvertShader:send("lightDirection", self.direction) self.normalInvertShader:send("lightDirection", self.direction)
util.drawCanvasToCanvas(normalMap, canvas, {shader = self.normalInvertShader}) util.drawCanvasToCanvas(normalMap, canvas, {shader = self.normalInvertShader})
else else
self.normalShader:send('screenResolution', {w, h})
self.normalShader:send('lightColor', {self.red / 255.0, self.green / 255.0, self.blue / 255.0}) self.normalShader:send('lightColor', {self.red / 255.0, self.green / 255.0, self.blue / 255.0})
self.normalShader:send('lightPosition',{self.x, h - self.y, self.z / 255.0}) self.normalShader:send("lightPosition", {(self.x + l/s) * s, (h/s - (self.y + t/s)) * s, self.z / 255.0})
self.normalShader:send('lightRange',{self.range}) self.normalShader:send('lightRange',{self.range})
self.normalShader:send("lightSmooth", self.smooth) self.normalShader:send("lightSmooth", self.smooth)
self.normalShader:send("lightAngle", math.pi - self.angle / 2.0) self.normalShader:send("lightAngle", math.pi - self.angle / 2.0)
@ -203,4 +206,8 @@ function light:drawPixelShadow(l,t,w,h, normalMap, canvas)
end end
end end
function light:setVisible(visible)
self.visible = visible
end
return light return light

View File

@ -1,5 +1,4 @@
extern Image glowImage; extern Image glowImage;
extern float glowTime; extern float glowTime;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) { vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) {

View File

@ -7,7 +7,7 @@
-- Updated by Dresenpai -- Updated by Dresenpai
require "lib/postshader" require "lib/postshader"
local LightWorld = require "lib/light_world" local LightWorld = require "lib"
exf = {} exf = {}
exf.current = nil exf.current = nil
@ -49,7 +49,6 @@ function love.keypressed(k) end
function love.keyreleased(k) end function love.keyreleased(k) end
function love.mousepressed(x, y, b) end function love.mousepressed(x, y, b) end
function love.mousereleased(x, y, b) end function love.mousereleased(x, y, b) end
function exf.empty() end function exf.empty() end
function exf.update(dt) function exf.update(dt)
@ -77,7 +76,7 @@ function exf.drawBackground()
exf.list:draw() exf.list:draw()
end end
function exf.drawForground() function exf.drawForeground()
love.graphics.setColor(255, 255, 255) love.graphics.setColor(255, 255, 255)
love.graphics.draw(exf.bigball, 800 - 128, 600 - 128, love.timer.getTime(), 1, 1, exf.bigball:getWidth() * 0.5, exf.bigball:getHeight() * 0.5) love.graphics.draw(exf.bigball, 800 - 128, 600 - 128, love.timer.getTime(), 1, 1, exf.bigball:getWidth() * 0.5, exf.bigball:getHeight() * 0.5)
end end
@ -163,8 +162,6 @@ function exf.clear()
love.graphics.setColor(255, 255, 255) love.graphics.setColor(255, 255, 255)
love.graphics.setLineWidth(1) love.graphics.setLineWidth(1)
love.graphics.setLineStyle("smooth") love.graphics.setLineStyle("smooth")
--love.graphics.setLine(1, "smooth")
--love.graphics.setColorMode("replace")
love.graphics.setBlendMode("alpha") love.graphics.setBlendMode("alpha")
love.mouse.setVisible(true) love.mouse.setVisible(true)
end end
@ -184,7 +181,7 @@ function exf.resume()
-- create light world -- create light world
lightWorld = LightWorld({ lightWorld = LightWorld({
drawBackground = exf.drawBackground, drawBackground = exf.drawBackground,
drawForground = exf.drawForground drawForeground = exf.drawForeground
}) })
lightWorld:setAmbientColor(127, 127, 127) lightWorld:setAmbientColor(127, 127, 127)
@ -278,7 +275,6 @@ function List:update(dt)
end end
self.bar_lock.y = love.mouse.getY() self.bar_lock.y = love.mouse.getY()
end end
end end
@ -296,10 +292,14 @@ function List:mousepressed(mx, my, b)
if b == "wd" then if b == "wd" then
self.bar_pos = self.bar_pos + bar_pixel_dt self.bar_pos = self.bar_pos + bar_pixel_dt
if self.bar_pos > self.bar_max_pos then self.bar_pos = self.bar_max_pos end if self.bar_pos > self.bar_max_pos then
self.bar_pos = self.bar_max_pos
end
elseif b == "wu" then elseif b == "wu" then
self.bar_pos = self.bar_pos - bar_pixel_dt self.bar_pos = self.bar_pos - bar_pixel_dt
if self.bar_pos < 0 then self.bar_pos = 0 end if self.bar_pos < 0 then
self.bar_pos = 0
end
end end
end end
@ -323,14 +323,12 @@ function List:mousereleased(x, y, b)
end end
function List:getBarRect() function List:getBarRect()
return return self.x+self.width+2, self.y+1+self.bar_pos,
self.x+self.width+2, self.y+1+self.bar_pos,
self.bar_width-3, self.bar_size self.bar_width-3, self.bar_size
end end
function List:getItemRect(i) function List:getItemRect(i)
return return self.x+2, self.y+((self.item_height+1)*(i-1)+1)-self:getOffset(),
self.x+2, self.y+((self.item_height+1)*(i-1)+1)-self:getOffset(),
self.width-3, self.item_height self.width-3, self.item_height
end end
@ -346,8 +344,10 @@ function List:draw()
-- Get interval to display. -- Get interval to display.
local start_i = math.floor( self:getOffset()/(self.item_height+1) ) + 1 local start_i = math.floor( self:getOffset()/(self.item_height+1) ) + 1
local end_i = start_i+math.floor( self.height/(self.item_height+1) ) + 1 local end_i = start_i+math.floor( self.height/(self.item_height+1) ) + 1
if end_i > self.items.n then end_i = self.items.n end
if end_i > self.items.n then
end_i = self.items.n
end
love.graphics.setScissor(self.x, self.y, self.width, self.height) love.graphics.setScissor(self.x, self.y, self.width, self.height)