mirror of
https://github.com/tanema/light_world.lua.git
synced 2024-12-24 20:24:19 +00:00
Merge pull request #43 from xiejiangzhi/master
love11.2 It's based on other PRs
This commit is contained in:
commit
7c0d9a604b
2
conf.lua
2
conf.lua
@ -1,6 +1,6 @@
|
|||||||
function love.conf(t)
|
function love.conf(t)
|
||||||
t.identity = nil -- The name of the save directory (string)
|
t.identity = nil -- The name of the save directory (string)
|
||||||
t.version = "0.10.0" -- The LÖVE version this game was made for (string)
|
t.version = "11.2" -- The LÖVE version this game was made for (string)
|
||||||
t.console = true -- Attach a console (boolean, Windows only)
|
t.console = true -- Attach a console (boolean, Windows only)
|
||||||
|
|
||||||
t.window.title = "Untitled" -- The window title (string)
|
t.window.title = "Untitled" -- The window title (string)
|
||||||
|
@ -96,7 +96,7 @@ function love.load()
|
|||||||
shadowBlur = 2.0
|
shadowBlur = 2.0
|
||||||
})
|
})
|
||||||
|
|
||||||
mouseLight = lightWorld:newLight(0, 0, 255, 191, 127, lightRange)
|
mouseLight = lightWorld:newLight(0, 0, 1, 191/ 255, 0.5, lightRange)
|
||||||
mouseLight:setGlowStrength(0.3)
|
mouseLight:setGlowStrength(0.3)
|
||||||
mouseLight:setSmooth(lightSmooth)
|
mouseLight:setSmooth(lightSmooth)
|
||||||
mouseLight.z = 63
|
mouseLight.z = 63
|
||||||
@ -162,19 +162,19 @@ function love.update(dt)
|
|||||||
|
|
||||||
tileX = tileX + dt * 32.0
|
tileX = tileX + dt * 32.0
|
||||||
tileY = tileY + dt * 8.0
|
tileY = tileY + dt * 8.0
|
||||||
for i = 1, phyCnt do
|
for i = 1, phyCnt do
|
||||||
if phyLight[i]:getType() == "refraction" then
|
if phyLight[i]:getType() == "refraction" then
|
||||||
phyLight[i]:setNormalTileOffset(tileX, tileY)
|
phyLight[i]:setNormalTileOffset(tileX, tileY)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- draw shader
|
-- draw shader
|
||||||
if colorAberration > 0.0 then
|
if colorAberration > 0.0 then
|
||||||
-- vert / horz blur
|
-- vert / horz blur
|
||||||
lightWorld.post_shader:addEffect("blur", 2.0, 2.0)
|
lightWorld.post_shader:addEffect("blur", 2.0, 2.0)
|
||||||
lightWorld.post_shader:addEffect("chromatic_aberration",
|
lightWorld.post_shader:addEffect("chromatic_aberration",
|
||||||
{math.sin(lightDirection * 10.0) * colorAberration, math.cos(lightDirection * 10.0) * colorAberration},
|
{math.sin(lightDirection * 10.0) * colorAberration, math.cos(lightDirection * 10.0) * colorAberration},
|
||||||
{math.cos(lightDirection * 10.0) * colorAberration, math.sin(lightDirection * 10.0) * -colorAberration},
|
{math.cos(lightDirection * 10.0) * colorAberration, math.sin(lightDirection * 10.0) * -colorAberration},
|
||||||
{math.sin(lightDirection * 10.0) * colorAberration, math.cos(lightDirection * 10.0) * -colorAberration})
|
{math.sin(lightDirection * 10.0) * colorAberration, math.cos(lightDirection * 10.0) * -colorAberration})
|
||||||
else
|
else
|
||||||
lightWorld.post_shader:removeEffect("blur")
|
lightWorld.post_shader:removeEffect("blur")
|
||||||
@ -199,10 +199,10 @@ function love.draw()
|
|||||||
lightWorld:draw(function(l, t, w, h, s)
|
lightWorld:draw(function(l, t, w, h, s)
|
||||||
love.graphics.setBlendMode("alpha")
|
love.graphics.setBlendMode("alpha")
|
||||||
if normalOn then
|
if normalOn then
|
||||||
love.graphics.setColor(127, 127, 255)
|
love.graphics.setColor(0.5, 0.5, 1)
|
||||||
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
|
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
if textureOn then
|
if textureOn then
|
||||||
love.graphics.draw(imgFloor, quadScreen, 0,0)
|
love.graphics.draw(imgFloor, quadScreen, 0,0)
|
||||||
else
|
else
|
||||||
@ -214,7 +214,7 @@ function love.draw()
|
|||||||
if phyLight[i]:getType() == "refraction" then
|
if phyLight[i]:getType() == "refraction" then
|
||||||
if not normalOn then
|
if not normalOn then
|
||||||
love.graphics.setBlendMode("alpha")
|
love.graphics.setBlendMode("alpha")
|
||||||
love.graphics.setColor(255, 255, 255, 191)
|
love.graphics.setColor(1, 1, 1, 191/255)
|
||||||
love.graphics.draw(water, phyLight[i].x - phyLight[i].ox, phyLight[i].y - phyLight[i].oy)
|
love.graphics.draw(water, phyLight[i].x - phyLight[i].ox, phyLight[i].y - phyLight[i].oy)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -224,20 +224,22 @@ function love.draw()
|
|||||||
for i = 1, phyCnt do
|
for i = 1, phyCnt do
|
||||||
if phyLight[i]:getType() == "polygon" then
|
if phyLight[i]:getType() == "polygon" then
|
||||||
math.randomseed(i)
|
math.randomseed(i)
|
||||||
love.graphics.setColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
love.graphics.setColor(math.random(), math.random(), math.random())
|
||||||
love.graphics.polygon("fill", phyLight[i]:getPoints())
|
love.graphics.polygon("fill", phyLight[i]:getPoints())
|
||||||
elseif phyLight[i]:getType() == "circle" then
|
elseif phyLight[i]:getType() == "circle" then
|
||||||
math.randomseed(i)
|
math.randomseed(i)
|
||||||
love.graphics.setColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
love.graphics.setColor(math.random(), math.random(), math.random())
|
||||||
local cx, cy = phyLight[i]:getPosition()
|
local cx, cy = phyLight[i]:getPosition()
|
||||||
love.graphics.circle("fill", cx, cy, phyLight[i]:getRadius())
|
love.graphics.circle("fill", cx, cy, phyLight[i]:getRadius())
|
||||||
elseif phyLight[i]:getType() == "image" then
|
elseif phyLight[i]:getType() == "image" then
|
||||||
if normalOn and phyLight[i].normal then
|
if normalOn and phyLight[i].normal then
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
love.graphics.draw(phyLight[i].normal, phyLight[i].x - phyLight[i].nx, phyLight[i].y - phyLight[i].ny)
|
love.graphics.draw(phyLight[i].normal, phyLight[i].x - phyLight[i].nx, phyLight[i].y - phyLight[i].ny)
|
||||||
elseif not phyLight[i].material then
|
elseif not phyLight[i].material then
|
||||||
math.randomseed(i)
|
math.randomseed(i)
|
||||||
love.graphics.setColor(math.random(127, 255), math.random(127, 255), math.random(127, 255))
|
love.graphics.setColor(
|
||||||
|
math.random(127, 255) / 255, math.random(127, 255)/ 255, math.random(127, 255) / 255
|
||||||
|
)
|
||||||
love.graphics.draw(phyLight[i].img, phyLight[i].x - phyLight[i].ix, phyLight[i].y - phyLight[i].iy)
|
love.graphics.draw(phyLight[i].img, phyLight[i].x - phyLight[i].ix, phyLight[i].y - phyLight[i].iy)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -254,65 +256,65 @@ function love.draw()
|
|||||||
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), 44)
|
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), 44)
|
||||||
love.graphics.rectangle("fill", 0, love.graphics.getHeight() - 68, 240, 68)
|
love.graphics.rectangle("fill", 0, love.graphics.getHeight() - 68, 240, 68)
|
||||||
love.graphics.rectangle("fill", love.graphics.getWidth() - 244, love.graphics.getHeight() - 84, 244, 84)
|
love.graphics.rectangle("fill", love.graphics.getWidth() - 244, love.graphics.getHeight() - 84, 244, 84)
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F1: Help (on)", 4 + 152 * 0, 4)
|
love.graphics.print("F1: Help (on)", 4 + 152 * 0, 4)
|
||||||
if shadowBlur >= 1.0 then
|
if shadowBlur >= 1.0 then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F5: Shadowblur (" .. shadowBlur .. ")", 4 + 152 * 4, 4)
|
love.graphics.print("F5: Shadowblur (" .. shadowBlur .. ")", 4 + 152 * 4, 4)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F5: Shadowblur (off)", 4 + 152 * 4, 4)
|
love.graphics.print("F5: Shadowblur (off)", 4 + 152 * 4, 4)
|
||||||
end
|
end
|
||||||
if bloomOn > 0.0 then
|
if bloomOn > 0.0 then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F6: Bloom (" .. (bloomOn * 4) .. ")", 4 + 152 * 0, 4 + 20 * 1)
|
love.graphics.print("F6: Bloom (" .. (bloomOn * 4) .. ")", 4 + 152 * 0, 4 + 20 * 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F6: Bloom (off)", 4 + 152 * 0, 4 + 20 * 1)
|
love.graphics.print("F6: Bloom (off)", 4 + 152 * 0, 4 + 20 * 1)
|
||||||
end
|
end
|
||||||
if textureOn then
|
if textureOn then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F7: Texture (on)", 4 + 152 * 1, 4 + 20 * 1)
|
love.graphics.print("F7: Texture (on)", 4 + 152 * 1, 4 + 20 * 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F7: Texture (off)", 4 + 152 * 1, 4 + 20 * 1)
|
love.graphics.print("F7: Texture (off)", 4 + 152 * 1, 4 + 20 * 1)
|
||||||
end
|
end
|
||||||
if normalOn then
|
if normalOn then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F8: Normal (on)", 4 + 152 * 2, 4 + 20 * 1)
|
love.graphics.print("F8: Normal (on)", 4 + 152 * 2, 4 + 20 * 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F8: Normal (off)", 4 + 152 * 2, 4 + 20 * 1)
|
love.graphics.print("F8: Normal (off)", 4 + 152 * 2, 4 + 20 * 1)
|
||||||
end
|
end
|
||||||
if glowBlur >= 1.0 then
|
if glowBlur >= 1.0 then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F9: Glow Blur (" .. glowBlur .. ")", 4 + 152 * 3, 4 + 20 * 1)
|
love.graphics.print("F9: Glow Blur (" .. glowBlur .. ")", 4 + 152 * 3, 4 + 20 * 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F9: Glow Blur (off)", 4 + 152 * 3, 4 + 20 * 1)
|
love.graphics.print("F9: Glow Blur (off)", 4 + 152 * 3, 4 + 20 * 1)
|
||||||
end
|
end
|
||||||
if effectOn >= 1.0 then
|
if effectOn >= 1.0 then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
love.graphics.print("F10: Effects (" .. effectOn .. ")", 4 + 152 * 4, 4 + 20 * 1)
|
love.graphics.print("F10: Effects (" .. effectOn .. ")", 4 + 152 * 4, 4 + 20 * 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
love.graphics.print("F10: Effects (off)", 4 + 152 * 4, 4 + 20 * 1)
|
love.graphics.print("F10: Effects (off)", 4 + 152 * 4, 4 + 20 * 1)
|
||||||
end
|
end
|
||||||
love.graphics.setColor(255, 0, 255)
|
love.graphics.setColor(1, 0, 1)
|
||||||
love.graphics.print("F11: Clear obj.", 4 + 152 * 4, 4 + 20 * 2)
|
love.graphics.print("F11: Clear obj.", 4 + 152 * 4, 4 + 20 * 2)
|
||||||
love.graphics.print("F12: Clear lights", 4 + 152 * 4, 4 + 20 * 3)
|
love.graphics.print("F12: Clear lights", 4 + 152 * 4, 4 + 20 * 3)
|
||||||
love.graphics.setColor(0, 127, 255)
|
love.graphics.setColor(0, 0.5, 1)
|
||||||
love.graphics.print("WASD Keys: Move objects", 4, love.graphics.getHeight() - 20 * 3)
|
love.graphics.print("WASD Keys: Move objects", 4, love.graphics.getHeight() - 20 * 3)
|
||||||
love.graphics.print("Arrow Keys: Move map", 4, love.graphics.getHeight() - 20 * 2)
|
love.graphics.print("Arrow Keys: Move map", 4, love.graphics.getHeight() - 20 * 2)
|
||||||
love.graphics.print("0-9 Keys: Add object", 4, love.graphics.getHeight() - 20 * 1)
|
love.graphics.print("0-9 Keys: Add object", 4, love.graphics.getHeight() - 20 * 1)
|
||||||
love.graphics.setColor(255, 127, 0)
|
love.graphics.setColor(1, 0.5, 0)
|
||||||
love.graphics.print("M.left: Add cube", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 4)
|
love.graphics.print("M.left: Add cube", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 4)
|
||||||
love.graphics.print("M.middle: Add light", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 3)
|
love.graphics.print("M.middle: Add light", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 3)
|
||||||
love.graphics.print("M.right: Add circle", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 2)
|
love.graphics.print("M.right: Add circle", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 2)
|
||||||
love.graphics.print("M.scroll: Change smooth", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 1)
|
love.graphics.print("M.scroll: Change smooth", love.graphics.getWidth() - 240, love.graphics.getHeight() - 20 * 1)
|
||||||
love.graphics.setColor(255, 127, 0)
|
love.graphics.setColor(1, 0.5, 0)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 255, 255, 191)
|
love.graphics.setColor(1, 1, 1, 191/255)
|
||||||
love.graphics.print("F1: Help", 4, 4)
|
love.graphics.print("F1: Help", 4, 4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -324,11 +326,11 @@ function love.mousepressed(x, y, c)
|
|||||||
local light
|
local light
|
||||||
|
|
||||||
if r == 0 then
|
if r == 0 then
|
||||||
light = lightWorld:newLight(x, y, 31, 127, 63, lightRange)
|
light = lightWorld:newLight(x, y, 31/ 255, 0.5, 63/ 255, lightRange)
|
||||||
elseif r == 1 then
|
elseif r == 1 then
|
||||||
light = lightWorld:newLight(x, y, 127, 63, 31, lightRange)
|
light = lightWorld:newLight(x, y, 0.5, 63/255, 31/255, lightRange)
|
||||||
else
|
else
|
||||||
light = lightWorld:newLight(x, y, 31, 63, 127, lightRange)
|
light = lightWorld:newLight(x, y, 31/255, 63/255, 127/255, lightRange)
|
||||||
end
|
end
|
||||||
light:setSmooth(lightSmooth)
|
light:setSmooth(lightSmooth)
|
||||||
light:setGlowStrength(0.3)
|
light:setGlowStrength(0.3)
|
||||||
@ -424,7 +426,7 @@ function love.keypressed(k, u)
|
|||||||
initScene()
|
initScene()
|
||||||
elseif k == "f12" then
|
elseif k == "f12" then
|
||||||
lightWorld:clearLights()
|
lightWorld:clearLights()
|
||||||
mouseLight = lightWorld:newLight(0, 0, 255, 191, 127, lightRange)
|
mouseLight = lightWorld:newLight(0, 0, 1, 191/255, 0.5, lightRange)
|
||||||
mouseLight:setGlowStrength(0.3)
|
mouseLight:setGlowStrength(0.3)
|
||||||
mouseLight:setSmooth(lightSmooth)
|
mouseLight:setSmooth(lightSmooth)
|
||||||
elseif k == "1" then
|
elseif k == "1" then
|
||||||
@ -498,7 +500,7 @@ function love.keypressed(k, u)
|
|||||||
phyCnt = phyCnt + 1
|
phyCnt = phyCnt + 1
|
||||||
phyLight[phyCnt] = lightWorld:newImage(blopp, mx, my, 42, 16, 21, 0)
|
phyLight[phyCnt] = lightWorld:newImage(blopp, mx, my, 42, 16, 21, 0)
|
||||||
phyLight[phyCnt]:generateNormalMapGradient("gradient", "gradient")
|
phyLight[phyCnt]:generateNormalMapGradient("gradient", "gradient")
|
||||||
phyLight[phyCnt]:setAlpha(255 * 0.5)
|
phyLight[phyCnt]:setAlpha(0.5)
|
||||||
elseif k == "7" then
|
elseif k == "7" then
|
||||||
-- add image
|
-- add image
|
||||||
phyCnt = phyCnt + 1
|
phyCnt = phyCnt + 1
|
||||||
@ -517,24 +519,24 @@ function love.keypressed(k, u)
|
|||||||
mx+w, my+h,
|
mx+w, my+h,
|
||||||
mx, my+h
|
mx, my+h
|
||||||
)
|
)
|
||||||
phyLight[phyCnt]:setAlpha(255 * 0.5)
|
phyLight[phyCnt]:setAlpha(0.5)
|
||||||
phyLight[phyCnt]:setGlowStrength(1.0)
|
phyLight[phyCnt]:setGlowStrength(1.0)
|
||||||
math.randomseed(phyCnt)
|
math.randomseed(phyCnt)
|
||||||
phyLight[phyCnt]:setGlowColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
phyLight[phyCnt]:setGlowColor(math.random(), math.random(), math.random())
|
||||||
math.randomseed(phyCnt)
|
math.randomseed(phyCnt)
|
||||||
phyLight[phyCnt]:setColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
phyLight[phyCnt]:setColor(math.random(), math.random(), math.random())
|
||||||
elseif k == "9" then
|
elseif k == "9" then
|
||||||
-- add circle
|
-- add circle
|
||||||
math.randomseed(love.timer.getTime())
|
math.randomseed(love.timer.getTime())
|
||||||
cRadius = math.random(8, 32)
|
cRadius = math.random(8, 32)
|
||||||
phyCnt = phyCnt + 1
|
phyCnt = phyCnt + 1
|
||||||
phyLight[phyCnt] = lightWorld:newCircle(mx, my, cRadius)
|
phyLight[phyCnt] = lightWorld:newCircle(mx, my, cRadius)
|
||||||
phyLight[phyCnt]:setAlpha(255 * 0.5)
|
phyLight[phyCnt]:setAlpha(0.5)
|
||||||
phyLight[phyCnt]:setGlowStrength(1.0)
|
phyLight[phyCnt]:setGlowStrength(1.0)
|
||||||
math.randomseed(phyCnt)
|
math.randomseed(phyCnt)
|
||||||
phyLight[phyCnt]:setGlowColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
phyLight[phyCnt]:setGlowColor(math.random(), math.random(), math.random())
|
||||||
math.randomseed(phyCnt)
|
math.randomseed(phyCnt)
|
||||||
phyLight[phyCnt]:setColor(math.random(0, 255), math.random(0, 255), math.random(0, 255))
|
phyLight[phyCnt]:setColor(math.random(), math.random(), math.random())
|
||||||
elseif k == "0" then
|
elseif k == "0" then
|
||||||
phyCnt = phyCnt + 1
|
phyCnt = phyCnt + 1
|
||||||
phyLight[phyCnt] = lightWorld:newRefraction(refraction_normal, mx, my)
|
phyLight[phyCnt] = lightWorld:newRefraction(refraction_normal, mx, my)
|
||||||
@ -545,11 +547,11 @@ function love.keypressed(k, u)
|
|||||||
local light
|
local light
|
||||||
|
|
||||||
if r == 0 then
|
if r == 0 then
|
||||||
light = lightWorld:newLight(mx, my, 31, 127, 63, lightRange)
|
light = lightWorld:newLight(mx, my, 31/255, 127 / 255, 63 / 255, lightRange)
|
||||||
elseif r == 1 then
|
elseif r == 1 then
|
||||||
light = lightWorld:newLight(mx, my, 127, 63, 31, lightRange)
|
light = lightWorld:newLight(mx, my, 127 / 255, 63 / 255, 31 / 255, lightRange)
|
||||||
else
|
else
|
||||||
light = lightWorld:newLight(mx, my, 31, 63, 127, lightRange)
|
light = lightWorld:newLight(mx, my, 31 / 255, 63 / 255, 127 / 255, lightRange)
|
||||||
end
|
end
|
||||||
light:setSmooth(lightSmooth)
|
light:setSmooth(lightSmooth)
|
||||||
light:setGlowStrength(0.3)
|
light:setGlowStrength(0.3)
|
||||||
@ -559,9 +561,9 @@ function love.keypressed(k, u)
|
|||||||
local light
|
local light
|
||||||
|
|
||||||
if r == 0 then
|
if r == 0 then
|
||||||
light = lightWorld:newLight(mx, my, 31, 127, 63, lightRange)
|
light = lightWorld:newLight(mx, my, 31/255, 127/255, 63/255, lightRange)
|
||||||
elseif r == 1 then
|
elseif r == 1 then
|
||||||
light = lightWorld:newLight(mx, my, 127, 63, 31, lightRange)
|
light = lightWorld:newLight(mx, my, 127/255, 63/255, 31/255, lightRange)
|
||||||
else
|
else
|
||||||
light = lightWorld:newLight(mx, my, 31, 63, 127, lightRange)
|
light = lightWorld:newLight(mx, my, 31, 63, 127, lightRange)
|
||||||
end
|
end
|
||||||
|
@ -70,13 +70,13 @@ end
|
|||||||
function love.draw()
|
function love.draw()
|
||||||
cam:attach()
|
cam:attach()
|
||||||
lightWorld:draw(function()
|
lightWorld:draw(function()
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
love.graphics.rectangle("fill", -x/scale, -y/scale, love.graphics.getWidth()/scale, love.graphics.getHeight()/scale)
|
love.graphics.rectangle("fill", -x/scale, -y/scale, love.graphics.getWidth()/scale, love.graphics.getHeight()/scale)
|
||||||
love.graphics.setColor(63, 255, 127)
|
love.graphics.setColor(63/ 255, 1, 0.5)
|
||||||
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())
|
||||||
love.graphics.polygon("fill", rectangleTest:getPoints())
|
love.graphics.polygon("fill", rectangleTest:getPoints())
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
love.graphics.draw(image, 64 - image:getWidth() * 0.5, 64 - image:getHeight() * 0.5)
|
love.graphics.draw(image, 64 - image:getWidth() * 0.5, 64 - image:getHeight() * 0.5)
|
||||||
end)
|
end)
|
||||||
cam:detach()
|
cam:detach()
|
||||||
|
104
lib/body.lua
104
lib/body.lua
@ -20,9 +20,9 @@ local function new(id, type, ...)
|
|||||||
obj.green = 1.0
|
obj.green = 1.0
|
||||||
obj.blue = 1.0
|
obj.blue = 1.0
|
||||||
obj.alpha = 1.0
|
obj.alpha = 1.0
|
||||||
obj.glowRed = 255
|
obj.glowRed = 1
|
||||||
obj.glowGreen = 255
|
obj.glowGreen = 1
|
||||||
obj.glowBlue = 255
|
obj.glowBlue = 1
|
||||||
obj.glowStrength = 0.0
|
obj.glowStrength = 0.0
|
||||||
obj.tileX = 0
|
obj.tileX = 0
|
||||||
obj.tileY = 0
|
obj.tileY = 0
|
||||||
@ -31,7 +31,7 @@ local function new(id, type, ...)
|
|||||||
obj.rotation = 0
|
obj.rotation = 0
|
||||||
obj.scalex = 1
|
obj.scalex = 1
|
||||||
obj.scaley = 1
|
obj.scaley = 1
|
||||||
|
|
||||||
obj.castsNoShadow = false
|
obj.castsNoShadow = false
|
||||||
obj.visible = true
|
obj.visible = true
|
||||||
obj.is_on_screen = true
|
obj.is_on_screen = true
|
||||||
@ -41,10 +41,10 @@ local function new(id, type, ...)
|
|||||||
obj.y = args[2] or 0
|
obj.y = args[2] or 0
|
||||||
|
|
||||||
circle_canvas = love.graphics.newCanvas(args[3]*2, args[3]*2)
|
circle_canvas = love.graphics.newCanvas(args[3]*2, args[3]*2)
|
||||||
util.drawto(circle_canvas, 0, 0, 1, function()
|
util.drawto(circle_canvas, 0, 0, 1, false, function()
|
||||||
love.graphics.circle('fill', args[3], args[3], args[3])
|
love.graphics.circle('fill', args[3], args[3], args[3])
|
||||||
end)
|
end)
|
||||||
obj.img = love.graphics.newImage(circle_canvas:newImageData())
|
obj.img = love.graphics.newImage(circle_canvas:newImageData())
|
||||||
obj.imgWidth = obj.img:getWidth()
|
obj.imgWidth = obj.img:getWidth()
|
||||||
obj.imgHeight = obj.img:getHeight()
|
obj.imgHeight = obj.img:getHeight()
|
||||||
obj.ix = obj.imgWidth * 0.5
|
obj.ix = obj.imgWidth * 0.5
|
||||||
@ -130,13 +130,13 @@ function body:refresh()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function body:has_changed()
|
function body:has_changed()
|
||||||
return self:position_changed() or
|
return self:position_changed() or
|
||||||
self:rotation_changed() or
|
self:rotation_changed() or
|
||||||
self:scale_changed()
|
self:scale_changed()
|
||||||
end
|
end
|
||||||
|
|
||||||
function body:position_changed()
|
function body:position_changed()
|
||||||
return self.old_x ~= self.x or
|
return self.old_x ~= self.x or
|
||||||
self.old_y ~= self.y
|
self.old_y ~= self.y
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -157,12 +157,12 @@ end
|
|||||||
|
|
||||||
function body:newGrid(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border)
|
function body:newGrid(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border)
|
||||||
return anim8.newGrid(
|
return anim8.newGrid(
|
||||||
frameWidth, frameHeight,
|
frameWidth, frameHeight,
|
||||||
imageWidth or self.img:getWidth(), imageHeight or self.img:getHeight(),
|
imageWidth or self.img:getWidth(), imageHeight or self.img:getHeight(),
|
||||||
left, top, border
|
left, top, border
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
-- frameWidth, frameHeight, imageWidth, imageHeight, left, top, border
|
-- frameWidth, frameHeight, imageWidth, imageHeight, left, top, border
|
||||||
function body:addAnimation(name, frames, durations, onLoop)
|
function body:addAnimation(name, frames, durations, onLoop)
|
||||||
self.animations[name] = anim8.newAnimation(frames, durations, onLoop)
|
self.animations[name] = anim8.newAnimation(frames, durations, onLoop)
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ function body:update(dt)
|
|||||||
local frame = self.animation.frames[self.animation.position]
|
local frame = self.animation.frames[self.animation.position]
|
||||||
_,_,self.width, self.height = frame:getViewport()
|
_,_,self.width, self.height = frame:getViewport()
|
||||||
self.imgWidth, self.imgHeight = self.width, self.height
|
self.imgWidth, self.imgHeight = self.width, self.height
|
||||||
self.normalWidth, self.normalHeight = self.width, self.height
|
self.normalWidth, self.normalHeight = self.width, self.height
|
||||||
self.ix, self.iy = self.imgWidth * 0.5,self.imgHeight * 0.5
|
self.ix, self.iy = self.imgWidth * 0.5,self.imgHeight * 0.5
|
||||||
self.nx, self.ny = self.ix, self.iy
|
self.nx, self.ny = self.ix, self.iy
|
||||||
self.animation:update(dt)
|
self.animation:update(dt)
|
||||||
@ -286,10 +286,14 @@ function body:setNormalOffset(nx, ny)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set glow color
|
-- set glow color
|
||||||
function body:setGlowColor(red, green, blue)
|
function body:setGlowColor(r, g, b)
|
||||||
self.glowRed = red
|
if r > 1 then r = r / 255 end
|
||||||
self.glowGreen = green
|
if g > 1 then g = r / 255 end
|
||||||
self.glowBlue = blue
|
if b > 1 then b = r / 255 end
|
||||||
|
|
||||||
|
self.glowRed = r
|
||||||
|
self.glowGreen = g
|
||||||
|
self.glowBlue = b
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set glow alpha
|
-- set glow alpha
|
||||||
@ -337,8 +341,8 @@ function body:setPoints(...)
|
|||||||
self.y = self.y + (self.height * 0.5)
|
self.y = self.y + (self.height * 0.5)
|
||||||
|
|
||||||
local poly_canvas = love.graphics.newCanvas(self.width, self.height)
|
local poly_canvas = love.graphics.newCanvas(self.width, self.height)
|
||||||
util.drawto(poly_canvas, 0, 0, 1, function()
|
util.drawto(poly_canvas, 0, 0, 1, false, function()
|
||||||
love.graphics.polygon('fill', self.unit_data)
|
love.graphics.polygon('fill', self.unit_data)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
--normalize points to be around the center x y
|
--normalize points to be around the center x y
|
||||||
@ -347,14 +351,14 @@ function body:setPoints(...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not self.img then
|
if not self.img then
|
||||||
self.img = love.graphics.newImage(poly_canvas:newImageData())
|
self.img = love.graphics.newImage(poly_canvas:newImageData())
|
||||||
self.imgWidth = self.img:getWidth()
|
self.imgWidth = self.img:getWidth()
|
||||||
self.imgHeight = self.img:getHeight()
|
self.imgHeight = self.img:getHeight()
|
||||||
self.ix = self.imgWidth * 0.5
|
self.ix = self.imgWidth * 0.5
|
||||||
self.iy = self.imgHeight * 0.5
|
self.iy = self.imgHeight * 0.5
|
||||||
self:generateNormalMapFlat("top")
|
self:generateNormalMapFlat("top")
|
||||||
end
|
end
|
||||||
--wrapping with polygon normals causes edges to show
|
--wrapping with polygon normals causes edges to show
|
||||||
--also we do not need wrapping for this default normal map
|
--also we do not need wrapping for this default normal map
|
||||||
self.normal:setWrap("clamp", "clamp")
|
self.normal:setWrap("clamp", "clamp")
|
||||||
self.shadowType = "polygon"
|
self.shadowType = "polygon"
|
||||||
@ -377,10 +381,10 @@ function body:setShine(b)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set glass color
|
-- set glass color
|
||||||
function body:setColor(red, green, blue)
|
function body:setColor(r, g, b)
|
||||||
self.red = red
|
self.red = r
|
||||||
self.green = green
|
self.green = g
|
||||||
self.blue = blue
|
self.blue = b
|
||||||
end
|
end
|
||||||
|
|
||||||
-- set glass alpha
|
-- set glass alpha
|
||||||
@ -544,7 +548,7 @@ function body:isVisible()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function body:inLightRange(light)
|
function body:inLightRange(light)
|
||||||
local l, t, w = light.x - light.range, light.y - light.range, light.range*2
|
local l, t, w = light.x - light.range, light.y - light.range, light.range*2
|
||||||
return self:inRange(l,t,w,w,1)
|
return self:inRange(l,t,w,w,1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -557,7 +561,7 @@ function body:inRange(l, t, w, h, s)
|
|||||||
local sh = (self.height * self.scaley)
|
local sh = (self.height * self.scaley)
|
||||||
radius = (sw > sh and sw or sh)
|
radius = (sw > sh and sw or sh)
|
||||||
end
|
end
|
||||||
|
|
||||||
local bx, by, bw, bh = self.x - radius, self.y - radius, radius * 2, radius * 2
|
local bx, by, bw, bh = self.x - radius, self.y - radius, radius * 2, radius * 2
|
||||||
|
|
||||||
return self.visible and (bx+bw) > (l/s) and bx < (l+w)/s and (by+bh) > (t/s) and by < (t+h)/s
|
return self.visible and (bx+bw) > (l/s) and bx < (l+w)/s and (by+bh) > (t/s) and by < (t+h)/s
|
||||||
@ -569,7 +573,7 @@ end
|
|||||||
|
|
||||||
function body:drawNormal()
|
function body:drawNormal()
|
||||||
if not self.refraction and not self.reflection and self.normalMesh then
|
if not self.refraction and not self.reflection and self.normalMesh then
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
if self.type == 'animation' then
|
if self.type == 'animation' then
|
||||||
self.animation:draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
self.animation:draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
||||||
else
|
else
|
||||||
@ -579,7 +583,9 @@ function body:drawNormal()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function body:drawGlow()
|
function body:drawGlow()
|
||||||
love.graphics.setColor(self.glowRed * self.glowStrength, self.glowGreen * self.glowStrength, self.glowBlue * self.glowStrength)
|
love.graphics.setColor(
|
||||||
|
self.glowRed * self.glowStrength, self.glowGreen * self.glowStrength, self.glowBlue * self.glowStrength
|
||||||
|
)
|
||||||
|
|
||||||
if self.type == "circle" then
|
if self.type == "circle" then
|
||||||
love.graphics.circle("fill", self.x, self.y, self.radius * self.scalex)
|
love.graphics.circle("fill", self.x, self.y, self.radius * self.scalex)
|
||||||
@ -590,7 +596,7 @@ function body:drawGlow()
|
|||||||
love.graphics.setShader(self.glowShader)
|
love.graphics.setShader(self.glowShader)
|
||||||
self.glowShader:send("glowImage", self.glow)
|
self.glowShader:send("glowImage", self.glow)
|
||||||
self.glowShader:send("glowTime", love.timer.getTime() * 0.5)
|
self.glowShader:send("glowTime", love.timer.getTime() * 0.5)
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(0, 0, 0)
|
love.graphics.setColor(0, 0, 0)
|
||||||
end
|
end
|
||||||
@ -607,7 +613,7 @@ end
|
|||||||
|
|
||||||
function body:drawRefraction()
|
function body:drawRefraction()
|
||||||
if self.refraction and self.normal then
|
if self.refraction and self.normal then
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
if self.tileX == 0.0 and self.tileY == 0.0 then
|
if self.tileX == 0.0 and self.tileY == 0.0 then
|
||||||
love.graphics.draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
love.graphics.draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
||||||
else
|
else
|
||||||
@ -633,12 +639,12 @@ end
|
|||||||
|
|
||||||
function body:drawReflection()
|
function body:drawReflection()
|
||||||
if self.reflection and self.normal then
|
if self.reflection and self.normal then
|
||||||
love.graphics.setColor(255, 0, 0)
|
love.graphics.setColor(1, 0, 0)
|
||||||
self.normalMesh:setVertices(self.normalVert)
|
self.normalMesh:setVertices(self.normalVert)
|
||||||
love.graphics.draw(self.normalMesh, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
love.graphics.draw(self.normalMesh, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
||||||
end
|
end
|
||||||
if self.reflective and self.img then
|
if self.reflective and self.img then
|
||||||
love.graphics.setColor(0, 255, 0)
|
love.graphics.setColor(0, 1, 0)
|
||||||
if self.type == 'animation' then
|
if self.type == 'animation' then
|
||||||
self.animation:draw(self.img, self.x, self.y, self.rotation, self.scalex, self.scaley, self.ix, self.iy)
|
self.animation:draw(self.img, self.x, self.y, self.rotation, self.scalex, self.scaley, self.ix, self.iy)
|
||||||
else
|
else
|
||||||
@ -657,7 +663,7 @@ end
|
|||||||
function body:drawMaterial()
|
function body:drawMaterial()
|
||||||
if self.material and self.normal then
|
if self.material and self.normal then
|
||||||
love.graphics.setShader(self.materialShader)
|
love.graphics.setShader(self.materialShader)
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
self.materialShader:send("material", self.material)
|
self.materialShader:send("material", self.material)
|
||||||
if self.type == 'animation' then
|
if self.type == 'animation' then
|
||||||
self.animation:draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
self.animation:draw(self.normal, self.x, self.y, self.rotation, self.scalex, self.scaley, self.nx, self.ny)
|
||||||
@ -678,8 +684,8 @@ function body:drawShadow(light)
|
|||||||
if self.castsNoShadow or (self.zheight - light.z) > 0 then
|
if self.castsNoShadow or (self.zheight - light.z) > 0 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
love.graphics.setColor(self.red, self.green, self.blue, self.alpha)
|
love.graphics.setColor(self.red / 255, self.green / 255, self.blue / 255, self.alpha / 255)
|
||||||
if self.shadowType == "polygon" then
|
if self.shadowType == "polygon" then
|
||||||
self:drawPolyShadow(light)
|
self:drawPolyShadow(light)
|
||||||
elseif self.shadowType == "circle" then
|
elseif self.shadowType == "circle" then
|
||||||
@ -695,7 +701,7 @@ function body:drawPolyShadow(light)
|
|||||||
local lightPosition = vector(light.x, light.y)
|
local lightPosition = vector(light.x, light.y)
|
||||||
local lh = lightPosition * self.zheight
|
local lh = lightPosition * self.zheight
|
||||||
|
|
||||||
local height_diff = (self.zheight - light.z)
|
local height_diff = (self.zheight - light.z)
|
||||||
if height_diff == 0 then -- prevent inf
|
if height_diff == 0 then -- prevent inf
|
||||||
height_diff = -0.001
|
height_diff = -0.001
|
||||||
end
|
end
|
||||||
@ -707,8 +713,8 @@ function body:drawPolyShadow(light)
|
|||||||
if vector(startToEnd.y, -startToEnd.x) * (vertex - lightPosition) > 0 then
|
if vector(startToEnd.y, -startToEnd.x) * (vertex - lightPosition) > 0 then
|
||||||
local point1 = (lh - (vertex * light.z))/height_diff
|
local point1 = (lh - (vertex * light.z))/height_diff
|
||||||
local point2 = (lh - (nextVertex * light.z))/height_diff
|
local point2 = (lh - (nextVertex * light.z))/height_diff
|
||||||
love.graphics.polygon("fill",
|
love.graphics.polygon("fill",
|
||||||
vertex.x, vertex.y, point1.x, point1.y,
|
vertex.x, vertex.y, point1.x, point1.y,
|
||||||
point2.x, point2.y, nextVertex.x, nextVertex.y)
|
point2.x, point2.y, nextVertex.x, nextVertex.y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -720,7 +726,7 @@ function body:drawCircleShadow(light)
|
|||||||
local selfPos = vector(self.x - self.ox, self.y - self.oy)
|
local selfPos = vector(self.x - self.ox, self.y - self.oy)
|
||||||
local lightPosition = vector(light.x, light.y)
|
local lightPosition = vector(light.x, light.y)
|
||||||
local lh = lightPosition * self.zheight
|
local lh = lightPosition * self.zheight
|
||||||
local height_diff = (self.zheight - light.z)
|
local height_diff = (self.zheight - light.z)
|
||||||
local radius = self.radius * self.scalex
|
local radius = self.radius * self.scalex
|
||||||
if height_diff == 0 then -- prevent inf
|
if height_diff == 0 then -- prevent inf
|
||||||
height_diff = -0.001
|
height_diff = -0.001
|
||||||
@ -733,15 +739,15 @@ function body:drawCircleShadow(light)
|
|||||||
selfPos.y + math.cos(angle) * radius)
|
selfPos.y + math.cos(angle) * radius)
|
||||||
local point3 = (lh - (point1 * light.z))/height_diff
|
local point3 = (lh - (point1 * light.z))/height_diff
|
||||||
local point4 = (lh - (point2 * light.z))/height_diff
|
local point4 = (lh - (point2 * light.z))/height_diff
|
||||||
|
|
||||||
local shadow_radius = point3:dist(point4)/2
|
local shadow_radius = point3:dist(point4)/2
|
||||||
local circleCenter = (point3 + point4)/2
|
local circleCenter = (point3 + point4)/2
|
||||||
|
|
||||||
if lightPosition:dist(selfPos) <= radius then
|
if lightPosition:dist(selfPos) <= radius then
|
||||||
love.graphics.circle("fill", circleCenter.x, circleCenter.y, shadow_radius)
|
love.graphics.circle("fill", circleCenter.x, circleCenter.y, shadow_radius)
|
||||||
else
|
else
|
||||||
love.graphics.polygon("fill", point1.x, point1.y,
|
love.graphics.polygon("fill", point1.x, point1.y,
|
||||||
point2.x, point2.y,
|
point2.x, point2.y,
|
||||||
point4.x, point4.y,
|
point4.x, point4.y,
|
||||||
point3.x, point3.y)
|
point3.x, point3.y)
|
||||||
if lightPosition:dist(circleCenter) < light.range then -- dont draw circle if way off screen
|
if lightPosition:dist(circleCenter) < light.range then -- dont draw circle if way off screen
|
||||||
@ -757,7 +763,7 @@ function body:drawCircleShadow(light)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function body:drawImageShadow(light)
|
function body:drawImageShadow(light)
|
||||||
local height_diff = (light.z - self.zheight)
|
local height_diff = (light.z - self.zheight)
|
||||||
if height_diff <= 0.1 then -- prevent shadows from leaving thier person like peter pan.
|
if height_diff <= 0.1 then -- prevent shadows from leaving thier person like peter pan.
|
||||||
height_diff = 0.1
|
height_diff = 0.1
|
||||||
end
|
end
|
||||||
@ -769,10 +775,10 @@ function body:drawImageShadow(light)
|
|||||||
local shadowY = (length * math.cos(shadowRotation) + 1.0) * shadowStartY
|
local shadowY = (length * math.cos(shadowRotation) + 1.0) * shadowStartY
|
||||||
|
|
||||||
self.shadowMesh:setVertices({
|
self.shadowMesh:setVertices({
|
||||||
{shadowX, shadowY, 0, 0, self.red, self.green, self.blue, self.alpha},
|
{shadowX, shadowY, 0, 0, self.red / 255, self.green / 255, self.blue / 255, self.alpha / 255},
|
||||||
{shadowX + self.imgWidth, shadowY, 1, 0, self.red, self.green, self.blue, self.alpha},
|
{shadowX + self.imgWidth, shadowY, 1, 0, self.red / 255, self.green / 255, self.blue / 255, self.alpha / 255},
|
||||||
{self.imgWidth, shadowStartY, 1, 1, self.red, self.green, self.blue, self.alpha},
|
{self.imgWidth, shadowStartY, 1, 1, self.red / 255, self.green / 255, self.blue / 255, self.alpha / 255},
|
||||||
{0, shadowStartY, 0, 1, self.red, self.green, self.blue, self.alpha}
|
{0, shadowStartY, 0, 1, self.red / 255, self.green / 255, self.blue / 255, self.alpha / 255}
|
||||||
})
|
})
|
||||||
|
|
||||||
love.graphics.draw(self.shadowMesh, self.x, self.y, self.rotation, self.scalex, self.scaley, self.ox, self.oy)
|
love.graphics.draw(self.shadowMesh, self.x, self.y, self.rotation, self.scalex, self.scaley, self.ox, self.oy)
|
||||||
|
32
lib/init.lua
32
lib/init.lua
@ -59,6 +59,7 @@ local function new(options)
|
|||||||
|
|
||||||
options = options or {}
|
options = options or {}
|
||||||
for k, v in pairs(options) do obj[k] = v end
|
for k, v in pairs(options) do obj[k] = v end
|
||||||
|
for i, v in ipairs(obj.ambient) do if v > 1 then obj.ambient[i] = v / 255 end end
|
||||||
|
|
||||||
local world = setmetatable(obj, light_world)
|
local world = setmetatable(obj, light_world)
|
||||||
world:refreshScreenSize()
|
world:refreshScreenSize()
|
||||||
@ -94,8 +95,8 @@ function light_world:update(dt)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function light_world:draw(cb)
|
function light_world:draw(cb)
|
||||||
util.drawto(self.render_buffer, self.l, self.t, self.s, function()
|
util.drawto(self.render_buffer, self.l, self.t, self.s, false, function()
|
||||||
cb( self.l,self.t,self.w,self.h,self.s)
|
cb(self.l,self.t,self.w,self.h,self.s)
|
||||||
_ = self.disableMaterial or self:drawMaterial( self.l,self.t,self.w,self.h,self.s)
|
_ = self.disableMaterial or self:drawMaterial( self.l,self.t,self.w,self.h,self.s)
|
||||||
self:drawShadows( self.l,self.t,self.w,self.h,self.s)
|
self:drawShadows( self.l,self.t,self.w,self.h,self.s)
|
||||||
_ = self.disableGlow or self:drawGlow( self.l,self.t,self.w,self.h,self.s)
|
_ = self.disableGlow or self:drawGlow( self.l,self.t,self.w,self.h,self.s)
|
||||||
@ -110,7 +111,7 @@ function light_world:drawShadows(l,t,w,h,s)
|
|||||||
love.graphics.setCanvas( self.normalMap )
|
love.graphics.setCanvas( self.normalMap )
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas()
|
love.graphics.setCanvas()
|
||||||
util.drawto(self.normalMap, l, t, s, function()
|
util.drawto(self.normalMap, l, t, s, false, function()
|
||||||
for i = 1, #self.bodies do
|
for i = 1, #self.bodies do
|
||||||
if self.bodies[i]:isVisible() then
|
if self.bodies[i]:isVisible() then
|
||||||
self.bodies[i]:drawNormal()
|
self.bodies[i]:drawNormal()
|
||||||
@ -131,7 +132,8 @@ function light_world:drawShadows(l,t,w,h,s)
|
|||||||
love.graphics.setCanvas( self.shadowMap )
|
love.graphics.setCanvas( self.shadowMap )
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas()
|
love.graphics.setCanvas()
|
||||||
util.drawto(self.shadowMap, l, t, s, function()
|
|
||||||
|
util.drawto(self.shadowMap, l, t, s, true, function()
|
||||||
--I dont know if it uses both or just calls both
|
--I dont know if it uses both or just calls both
|
||||||
love.graphics.stencil(function()
|
love.graphics.stencil(function()
|
||||||
local angle = light.direction - (light.angle / 2.0)
|
local angle = light.direction - (light.angle / 2.0)
|
||||||
@ -154,9 +156,10 @@ function light_world:drawShadows(l,t,w,h,s)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- draw scene for this light using normals and shadowmap
|
-- draw scene for this light using normals and shadowmap
|
||||||
self.shadowShader:send('lightColor', {light.red / 255.0, light.green / 255.0, light.blue / 255.0})
|
self.shadowShader:send('lightColor', {light.red, light.green, light.blue})
|
||||||
self.shadowShader:send("lightPosition", {(light.x + l/s) * s, (light.y + t/s) * s, (light.z * 10) / 255.0})
|
self.shadowShader:send("lightPosition", {(light.x + l/s) * s, (light.y + t/s) * s, (light.z * 10) / 255})
|
||||||
self.shadowShader:send('lightRange',light.range * s)
|
self.shadowShader:send('lightRange',light.range * s)
|
||||||
self.shadowShader:send("lightSmooth", light.smooth)
|
self.shadowShader:send("lightSmooth", light.smooth)
|
||||||
self.shadowShader:send("lightGlow", {1.0 - light.glowSize, light.glowStrength})
|
self.shadowShader:send("lightGlow", {1.0 - light.glowSize, light.glowStrength})
|
||||||
@ -165,14 +168,16 @@ function light_world:drawShadows(l,t,w,h,s)
|
|||||||
shader = self.shadowShader,
|
shader = self.shadowShader,
|
||||||
stencil = function()
|
stencil = function()
|
||||||
local angle = light.direction - (light.angle / 2.0)
|
local angle = light.direction - (light.angle / 2.0)
|
||||||
love.graphics.arc("fill", (light.x + l/s) * s, (light.y + t/s) * s, light.range, angle, angle + light.angle)
|
love.graphics.arc(
|
||||||
|
"fill", (light.x + l/s) * s, (light.y + t/s) * s, light.range, angle, angle + light.angle
|
||||||
|
)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- add in ambient color
|
-- add in ambient color
|
||||||
util.drawto(self.shadow_buffer, l, t, s, function()
|
util.drawto(self.shadow_buffer, l, t, s, false, function()
|
||||||
love.graphics.setBlendMode("add")
|
love.graphics.setBlendMode("add")
|
||||||
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)
|
||||||
@ -209,7 +214,7 @@ function light_world:drawGlow(l,t,w,h,s)
|
|||||||
love.graphics.setCanvas( self.glowMap )
|
love.graphics.setCanvas( self.glowMap )
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas()
|
love.graphics.setCanvas()
|
||||||
util.drawto(self.glowMap, l, t, s, function()
|
util.drawto(self.glowMap, l, t, s, false, function()
|
||||||
for i = 1, #self.bodies do
|
for i = 1, #self.bodies do
|
||||||
if self.bodies[i]:isVisible() and self.bodies[i].glowStrength > 0.0 then
|
if self.bodies[i]:isVisible() and self.bodies[i].glowStrength > 0.0 then
|
||||||
has_glow = true
|
has_glow = true
|
||||||
@ -229,7 +234,7 @@ function light_world:drawRefraction(l,t,w,h,s)
|
|||||||
love.graphics.setCanvas( self.refractionMap )
|
love.graphics.setCanvas( self.refractionMap )
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas()
|
love.graphics.setCanvas()
|
||||||
util.drawto(self.refractionMap, l, t, s, function()
|
util.drawto(self.refractionMap, l, t, s, false, function()
|
||||||
for i = 1, #self.bodies do
|
for i = 1, #self.bodies do
|
||||||
if self.bodies[i]:isVisible() then
|
if self.bodies[i]:isVisible() then
|
||||||
self.bodies[i]:drawRefraction()
|
self.bodies[i]:drawRefraction()
|
||||||
@ -248,7 +253,7 @@ function light_world:drawReflection(l,t,w,h,s)
|
|||||||
love.graphics.setCanvas( self.reflectionMap )
|
love.graphics.setCanvas( self.reflectionMap )
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas()
|
love.graphics.setCanvas()
|
||||||
util.drawto(self.reflectionMap, l, t, s, function()
|
util.drawto(self.reflectionMap, l, t, s, false, function()
|
||||||
for i = 1, #self.bodies do
|
for i = 1, #self.bodies do
|
||||||
if self.bodies[i]:isVisible() then
|
if self.bodies[i]:isVisible() then
|
||||||
self.bodies[i]:drawReflection()
|
self.bodies[i]:drawReflection()
|
||||||
@ -280,7 +285,10 @@ end
|
|||||||
function light_world:setScale(s) self.s = s end
|
function light_world:setScale(s) self.s = s end
|
||||||
function light_world:clearLights() self.lights = {} end
|
function light_world:clearLights() self.lights = {} end
|
||||||
function light_world:clearBodies() self.bodies = {} end
|
function light_world:clearBodies() self.bodies = {} end
|
||||||
function light_world:setAmbientColor(red, green, blue) self.ambient = {red, green, blue} end
|
function light_world:setAmbientColor(red, green, blue)
|
||||||
|
self.ambient = {red, green, blue}
|
||||||
|
for i, v in ipairs(self.ambient) do if v > 1 then self.ambient[i] = v / 255 end end
|
||||||
|
end
|
||||||
function light_world:setShadowBlur(blur) self.shadowBlur = blur end
|
function light_world:setShadowBlur(blur) self.shadowBlur = blur end
|
||||||
function light_world:setGlowStrength(strength) self.glowBlur = strength end
|
function light_world:setGlowStrength(strength) self.glowBlur = strength end
|
||||||
function light_world:setRefractionStrength(strength) self.refractionStrength = strength end
|
function light_world:setRefractionStrength(strength) self.refractionStrength = strength end
|
||||||
|
@ -5,15 +5,19 @@ local light = {}
|
|||||||
light.__index = light
|
light.__index = light
|
||||||
|
|
||||||
local function new(x, y, r, g, b, range)
|
local function new(x, y, r, g, b, range)
|
||||||
|
if r and r > 1 then r = r / 255 end
|
||||||
|
if g and g > 1 then g = g / 255 end
|
||||||
|
if b and b > 1 then b = b / 255 end
|
||||||
|
|
||||||
local obj = {
|
local obj = {
|
||||||
direction = 0,
|
direction = 0,
|
||||||
angle = math.pi * 2.0,
|
angle = math.pi * 2.0,
|
||||||
x = x or 0,
|
x = x or 0,
|
||||||
y = y or 0,
|
y = y or 0,
|
||||||
z = 1,
|
z = 1,
|
||||||
red = r or 255,
|
red = r or 1,
|
||||||
green = g or 255,
|
green = g or 1,
|
||||||
blue = b or 255,
|
blue = b or 1,
|
||||||
range = range or 300,
|
range = range or 300,
|
||||||
smooth = 1.0,
|
smooth = 1.0,
|
||||||
glowSize = 0.1,
|
glowSize = 0.1,
|
||||||
@ -55,10 +59,14 @@ function light:getPosition()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set color
|
-- set color
|
||||||
function light:setColor(red, green, blue)
|
function light:setColor(r, g, b)
|
||||||
self.red = red
|
if r > 1 then r = r / 255 end
|
||||||
self.green = green
|
if g > 1 then g = g / 255 end
|
||||||
self.blue = blue
|
if b > 1 then b = b / 255 end
|
||||||
|
|
||||||
|
self.red = r
|
||||||
|
self.green = g
|
||||||
|
self.blue = b
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get range
|
-- get range
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
local normal_map = {}
|
local normal_map = {}
|
||||||
|
|
||||||
function normal_map.fromHeightMap(heightMap, strength)
|
function normal_map.fromHeightMap(heightMap, strength)
|
||||||
local imgData = heightMap:getData()
|
local imgData = normal_map.getImgData(heightMap)
|
||||||
local imgData2 = love.image.newImageData(heightMap:getWidth(), heightMap:getHeight())
|
local imgData2 = love.image.newImageData(heightMap:getWidth(), heightMap:getHeight())
|
||||||
local red, green, blue, alpha
|
local red, green, blue, alpha
|
||||||
local x, y
|
local x, y
|
||||||
@ -31,14 +31,14 @@ function normal_map.fromHeightMap(heightMap, strength)
|
|||||||
y = i + m - 1
|
y = i + m - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
local red, green, blue, alpha = imgData:getPixel(x, y)
|
local r, _g, _b, _a = imgData:getPixel(x, y)
|
||||||
matrix[l][m] = red
|
matrix[l][m] = r
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
red = (255 + ((matrix[1][2] - matrix[2][2]) + (matrix[2][2] - matrix[3][2])) * strength) / 2.0
|
red = (1 + ((matrix[1][2] - matrix[2][2]) + (matrix[2][2] - matrix[3][2])) * strength) / 2.0
|
||||||
green = (255 + ((matrix[2][2] - matrix[1][1]) + (matrix[2][3] - matrix[2][2])) * strength) / 2.0
|
green = (1 + ((matrix[2][2] - matrix[1][1]) + (matrix[2][3] - matrix[2][2])) * strength) / 2.0
|
||||||
blue = 192
|
blue = 192/255
|
||||||
|
|
||||||
imgData2:setPixel(k, i, red, green, blue)
|
imgData2:setPixel(k, i, red, green, blue)
|
||||||
end
|
end
|
||||||
@ -48,20 +48,20 @@ function normal_map.fromHeightMap(heightMap, strength)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function normal_map.generateFlat(img, mode)
|
function normal_map.generateFlat(img, mode)
|
||||||
local imgData = img:getData()
|
local imgData = normal_map.getImgData(img)
|
||||||
local imgNormalData = love.image.newImageData(img:getWidth(), img:getHeight())
|
local imgNormalData = love.image.newImageData(img:getWidth(), img:getHeight())
|
||||||
local color
|
local color
|
||||||
|
|
||||||
if mode == "top" then
|
if mode == "top" then
|
||||||
color = {127, 127, 255}
|
color = {0.5, 0.5, 1}
|
||||||
elseif mode == "front" then
|
elseif mode == "front" then
|
||||||
color = {127, 0, 127}
|
color = {0.5, 0, 0.5}
|
||||||
elseif mode == "back" then
|
elseif mode == "back" then
|
||||||
color = {127, 255, 127}
|
color = {0.5, 1, 0.5}
|
||||||
elseif mode == "left" then
|
elseif mode == "left" then
|
||||||
color = {31, 0, 223}
|
color = {31/255, 0, 223/255}
|
||||||
elseif mode == "right" then
|
elseif mode == "right" then
|
||||||
color = {223, 0, 127}
|
color = {223/255, 0, 0.5}
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 0, img:getHeight() - 1 do
|
for i = 0, img:getHeight() - 1 do
|
||||||
@ -78,7 +78,7 @@ function normal_map.generateGradient(img, horizontalGradient, verticalGradient)
|
|||||||
horizontalGradient = horizontalGradient or "gradient"
|
horizontalGradient = horizontalGradient or "gradient"
|
||||||
verticalGradient = verticalGradient or horizontalGradient
|
verticalGradient = verticalGradient or horizontalGradient
|
||||||
|
|
||||||
local imgData = img:getData()
|
local imgData = normal_map.getImgData(img)
|
||||||
local imgWidth, imgHeight = img:getWidth(), img:getHeight()
|
local imgWidth, imgHeight = img:getWidth(), img:getHeight()
|
||||||
local imgNormalData = love.image.newImageData(imgWidth, imgHeight)
|
local imgNormalData = love.image.newImageData(imgWidth, imgHeight)
|
||||||
local dx = 255.0 / imgWidth
|
local dx = 255.0 / imgWidth
|
||||||
@ -94,23 +94,23 @@ function normal_map.generateGradient(img, horizontalGradient, verticalGradient)
|
|||||||
if horizontalGradient == "gradient" then
|
if horizontalGradient == "gradient" then
|
||||||
nx = i * dx
|
nx = i * dx
|
||||||
elseif horizontalGradient == "inverse" then
|
elseif horizontalGradient == "inverse" then
|
||||||
nx = 255 - i * dx
|
nx = 1 - i * dx
|
||||||
else
|
else
|
||||||
nx = 127
|
nx = 0.5
|
||||||
end
|
end
|
||||||
|
|
||||||
if verticalGradient == "gradient" then
|
if verticalGradient == "gradient" then
|
||||||
ny = 127 - k * dy * 0.5
|
ny = 0.5 - k * dy * 0.5
|
||||||
nz = 255 - k * dy * 0.5
|
nz = 1 - k * dy * 0.5
|
||||||
elseif verticalGradient == "inverse" then
|
elseif verticalGradient == "inverse" then
|
||||||
ny = 127 + k * dy * 0.5
|
ny = 0.5 + k * dy * 0.5
|
||||||
nz = 127 - k * dy * 0.25
|
nz = 0.5 - k * dy * 0.25
|
||||||
else
|
else
|
||||||
ny = 255
|
ny = 1
|
||||||
nz = 127
|
nz = 0.5
|
||||||
end
|
end
|
||||||
|
|
||||||
imgNormalData:setPixel(i, k, nx, ny, nz, 255)
|
imgNormalData:setPixel(i, k, nx, ny, nz, 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -118,4 +118,10 @@ function normal_map.generateGradient(img, horizontalGradient, verticalGradient)
|
|||||||
return love.graphics.newImage(imgNormalData)
|
return love.graphics.newImage(imgNormalData)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function normal_map.getImgData(img)
|
||||||
|
local canvas = love.graphics.newCanvas(img:getWidth(), img:getHeight())
|
||||||
|
canvas:renderTo(function() love.graphics.draw(img, 0, 0) end)
|
||||||
|
return canvas:newImageData()
|
||||||
|
end
|
||||||
|
|
||||||
return normal_map
|
return normal_map
|
||||||
|
@ -27,12 +27,12 @@ local util = require(_PACKAGE..'/util')
|
|||||||
local post_shader = {}
|
local post_shader = {}
|
||||||
post_shader.__index = post_shader
|
post_shader.__index = post_shader
|
||||||
|
|
||||||
local files = love.filesystem.getDirectoryItems(_PACKAGE.."/shaders/postshaders")
|
local files = love.filesystem.getDirectoryItems(_PACKAGE .. "/shaders/postshaders")
|
||||||
local shaders = {}
|
local shaders = {}
|
||||||
|
|
||||||
for i,v in ipairs(files) do
|
for i,v in ipairs(files) do
|
||||||
local name = _PACKAGE.."/shaders/postshaders".."/"..v
|
local name = _PACKAGE.."/shaders/postshaders".."/"..v
|
||||||
if love.filesystem.isFile(name) then
|
if love.filesystem.getInfo(name).type == "file" and string.sub(v, 1, 1) ~= '.' then
|
||||||
local str = love.filesystem.read(name)
|
local str = love.filesystem.read(name)
|
||||||
local effect = util.loadShader(name)
|
local effect = util.loadShader(name)
|
||||||
local defs = {}
|
local defs = {}
|
||||||
@ -94,7 +94,9 @@ function post_shader:drawBloom(canvas, args)
|
|||||||
util.process(self.back_buffer, {shader = shaders['blurh'][1]})
|
util.process(self.back_buffer, {shader = shaders['blurh'][1]})
|
||||||
util.process(self.back_buffer, {shader = shaders['contrast'][1]})
|
util.process(self.back_buffer, {shader = shaders['contrast'][1]})
|
||||||
util.process(canvas, {shader = shaders['contrast'][1]})
|
util.process(canvas, {shader = shaders['contrast'][1]})
|
||||||
util.drawCanvasToCanvas(self.back_buffer, canvas, {blendmode = "add", color = {255, 255, 255, (args[2] or 0.25) * 255}})
|
util.drawCanvasToCanvas(self.back_buffer, canvas, {
|
||||||
|
blendmode = "add", color = {1, 1, 1, (args[2] or 0.25)}
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function post_shader:drawBlur(canvas, args)
|
function post_shader:drawBlur(canvas, args)
|
||||||
@ -151,7 +153,7 @@ function post_shader:drawShader(shaderName, canvas, args)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function process_tint(r, g, b)
|
function process_tint(r, g, b)
|
||||||
return (r and r/255.0 or 1.0), (g and g/255.0 or 1.0), (b and b/255.0 or 1.0)
|
return (r or 1.0), (g or 1.0), (b or 1.0)
|
||||||
end
|
end
|
||||||
|
|
||||||
function process_palette(palette)
|
function process_palette(palette)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
// 0.5 = the spot stays inside the original pixel
|
// 0.5 = the spot stays inside the original pixel
|
||||||
// 1.0 = the spot bleeds up to the center of next pixel
|
// 1.0 = the spot bleeds up to the center of next pixel
|
||||||
|
|
||||||
#define PHOSPHOR_WIDTH 0.9
|
#define PHOSPHOR_WIDTH 0.9
|
||||||
#define PHOSPHOR_HEIGHT 0.65
|
#define PHOSPHOR_HEIGHT 0.65
|
||||||
|
|
||||||
@ -61,6 +62,7 @@ vec4 A_IN = vec4( 12.0/(InputGamma+1.0)-3.0 );
|
|||||||
vec4 B_IN = vec4(1.0) - A_IN;
|
vec4 B_IN = vec4(1.0) - A_IN;
|
||||||
vec4 A_OUT = vec4(6.0 - 15.0 * OutputGamma / 2.0 / (OutputGamma+1.0));
|
vec4 A_OUT = vec4(6.0 - 15.0 * OutputGamma / 2.0 / (OutputGamma+1.0));
|
||||||
vec4 B_OUT = vec4(1.0) - A_OUT;
|
vec4 B_OUT = vec4(1.0) - A_OUT;
|
||||||
|
|
||||||
#define GAMMA_IN(color) ( (A_IN + B_IN * color) * color * color )
|
#define GAMMA_IN(color) ( (A_IN + B_IN * color) * color * color )
|
||||||
#define GAMMA_OUT(color) ( A_OUT * sqrt(color) + B_OUT * sqrt( sqrt(color) ) )
|
#define GAMMA_OUT(color) ( A_OUT * sqrt(color) + B_OUT * sqrt( sqrt(color) ) )
|
||||||
|
|
||||||
@ -76,25 +78,26 @@ vec4 B_IN = vec4(1.0) - A_IN;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
vec4 grid_color( vec2 coords )
|
vec4 grid_color(Image tex, vec2 coords )
|
||||||
{
|
{
|
||||||
vec2 snes = floor( coords * love_ScreenSize );
|
vec2 snes = floor( coords * love_ScreenSize.xy );
|
||||||
if ( (mod(snes.x, 3.0) == 0.0) && (mod(snes.y, 3.0) == 0.0) )
|
if ( (mod(snes.x, 3.0) == 0.0) && (mod(snes.y, 3.0) == 0.0) ) {
|
||||||
return texture2D(_tex0_, coords);
|
return texture2D(tex, coords);
|
||||||
else
|
} else {
|
||||||
return vec4(0.0);
|
return vec4(0.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#define TEX2D(coords) GAMMA_IN( grid_color( coords ) )
|
#define TEX2D(tex, coords) GAMMA_IN( grid_color(tex, coords) )
|
||||||
|
|
||||||
#else // DEBUG
|
#else // DEBUG
|
||||||
#define TEX2D(coords) GAMMA_IN( texture2D(_tex0_, coords) )
|
#define TEX2D(tex, coords) GAMMA_IN( texture2D(tex, coords) )
|
||||||
|
|
||||||
#endif // DEBUG
|
#endif // DEBUG
|
||||||
|
|
||||||
vec2 onex = vec2( 1.0/love_ScreenSize.x, 0.0 );
|
vec2 onex = vec2( 1.0/love_ScreenSize.x, 0.0 );
|
||||||
vec2 oney = vec2( 0.0, 1.0/love_ScreenSize.y );
|
vec2 oney = vec2( 0.0, 1.0/love_ScreenSize.y );
|
||||||
|
|
||||||
vec4 effect(vec4 vcolor, Image texture, highp vec2 texCoord, vec2 pixel_coords)
|
vec4 effect(vec4 vcolor, Image tex, highp vec2 texCoord, vec2 pixel_coords)
|
||||||
{
|
{
|
||||||
highp vec2 coords = (texCoord * love_ScreenSize.xy);
|
highp vec2 coords = (texCoord * love_ScreenSize.xy);
|
||||||
highp vec2 pixel_start = floor(coords);
|
highp vec2 pixel_start = floor(coords);
|
||||||
@ -121,9 +124,8 @@ vec4 effect(vec4 vcolor, Image texture, highp vec2 texCoord, vec2 pixel_coords)
|
|||||||
if (vweight !=0.0 ) {
|
if (vweight !=0.0 ) {
|
||||||
for ( i = -1.0; i<=1.0; i++ ) {
|
for ( i = -1.0; i<=1.0; i++ ) {
|
||||||
pixel = TEX2D(
|
pixel = TEX2D(
|
||||||
texture_coords
|
tex,
|
||||||
+ i * onex
|
texture_coords + i * onex + j * oney
|
||||||
+ j * oney
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Evaluate the distance (in x) from
|
/* Evaluate the distance (in x) from
|
||||||
|
13
lib/util.lua
13
lib/util.lua
@ -11,8 +11,10 @@ end
|
|||||||
function util.drawCanvasToCanvas(canvas, other_canvas, options)
|
function util.drawCanvasToCanvas(canvas, other_canvas, options)
|
||||||
options = options or {}
|
options = options or {}
|
||||||
|
|
||||||
util.drawto(other_canvas, 0, 0, 1, function()
|
util.drawto(other_canvas, 0, 0, 1, options['stencil'] or options['istencil'] and true or false, function()
|
||||||
if options["blendmode"] then
|
if options["blendmode"] == 'multiply' then
|
||||||
|
love.graphics.setBlendMode(options["blendmode"], 'premultiplied')
|
||||||
|
elseif options["blendmode"] then
|
||||||
love.graphics.setBlendMode(options["blendmode"])
|
love.graphics.setBlendMode(options["blendmode"])
|
||||||
end
|
end
|
||||||
if options["shader"] then
|
if options["shader"] then
|
||||||
@ -29,7 +31,7 @@ function util.drawCanvasToCanvas(canvas, other_canvas, options)
|
|||||||
if options["color"] then
|
if options["color"] then
|
||||||
love.graphics.setColor(unpack(options["color"]))
|
love.graphics.setColor(unpack(options["color"]))
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255,255,255)
|
love.graphics.setColor(1,1,1)
|
||||||
end
|
end
|
||||||
if love.graphics.getCanvas() ~= canvas then
|
if love.graphics.getCanvas() ~= canvas then
|
||||||
love.graphics.draw(canvas,0,0)
|
love.graphics.draw(canvas,0,0)
|
||||||
@ -47,11 +49,11 @@ function util.drawCanvasToCanvas(canvas, other_canvas, options)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
function util.drawto(canvas, x, y, scale, cb)
|
function util.drawto(canvas, x, y, scale, stencil, cb)
|
||||||
local last_buffer = love.graphics.getCanvas()
|
local last_buffer = love.graphics.getCanvas()
|
||||||
love.graphics.push()
|
love.graphics.push()
|
||||||
love.graphics.origin()
|
love.graphics.origin()
|
||||||
love.graphics.setCanvas(canvas)
|
love.graphics.setCanvas({ canvas, stencil = stencil })
|
||||||
love.graphics.translate(x, y)
|
love.graphics.translate(x, y)
|
||||||
love.graphics.scale(scale)
|
love.graphics.scale(scale)
|
||||||
cb()
|
cb()
|
||||||
@ -96,4 +98,5 @@ function util.loadShader(name)
|
|||||||
return effect
|
return effect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
return util
|
return util
|
||||||
|
46
main.lua
46
main.lua
@ -27,7 +27,7 @@ function love.load()
|
|||||||
local n = 0
|
local n = 0
|
||||||
|
|
||||||
for i, v in ipairs(files) do
|
for i, v in ipairs(files) do
|
||||||
is_file = love.filesystem.isFile("examples/".. v )
|
is_file = (love.filesystem.getInfo("examples/".. v ).type == "file")
|
||||||
if is_file then
|
if is_file then
|
||||||
n = n + 1
|
n = n + 1
|
||||||
table.insert(exf.available, v);
|
table.insert(exf.available, v);
|
||||||
@ -63,10 +63,10 @@ function exf.draw()
|
|||||||
lightWorld:draw(function()
|
lightWorld:draw(function()
|
||||||
love.graphics.setBackgroundColor(0, 0, 0)
|
love.graphics.setBackgroundColor(0, 0, 0)
|
||||||
|
|
||||||
love.graphics.setColor(48, 156, 225)
|
love.graphics.setColor(48/255, 156/255, 225/255)
|
||||||
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
|
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
|
||||||
|
|
||||||
love.graphics.setColor(255, 255, 255, 191)
|
love.graphics.setColor(1, 1, 1, 191/255)
|
||||||
love.graphics.setFont(exf.bigfont)
|
love.graphics.setFont(exf.bigfont)
|
||||||
love.graphics.print("Examples:", 50, 50)
|
love.graphics.print("Examples:", 50, 50)
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ function exf.draw()
|
|||||||
|
|
||||||
exf.list:draw()
|
exf.list:draw()
|
||||||
|
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
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)
|
||||||
end
|
end
|
||||||
@ -121,7 +121,7 @@ function exf.start(item, file)
|
|||||||
local unused1, unused2, n = string.find(item, "(%s)%.lua")
|
local unused1, unused2, n = string.find(item, "(%s)%.lua")
|
||||||
|
|
||||||
if exf.intable(exf.available, file) then
|
if exf.intable(exf.available, file) then
|
||||||
if not love.filesystem.exists("examples/" .. file) then
|
if not love.filesystem.getInfo("examples/" .. file) then
|
||||||
print("Could not load game .. " .. file)
|
print("Could not load game .. " .. file)
|
||||||
else
|
else
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ end
|
|||||||
|
|
||||||
function exf.clear()
|
function exf.clear()
|
||||||
love.graphics.setBackgroundColor(0,0,0)
|
love.graphics.setBackgroundColor(0,0,0)
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1)
|
||||||
love.graphics.setLineWidth(1)
|
love.graphics.setLineWidth(1)
|
||||||
love.graphics.setLineStyle("smooth")
|
love.graphics.setLineStyle("smooth")
|
||||||
love.graphics.setBlendMode("alpha")
|
love.graphics.setBlendMode("alpha")
|
||||||
@ -182,11 +182,11 @@ function exf.resume()
|
|||||||
|
|
||||||
-- create light world
|
-- create light world
|
||||||
lightWorld = LightWorld({
|
lightWorld = LightWorld({
|
||||||
ambient = {127, 127, 127}
|
ambient = {127/255, 127/255, 127/255}
|
||||||
})
|
})
|
||||||
|
|
||||||
-- create light
|
-- create light
|
||||||
lightMouse = lightWorld:newLight(0, 0, 255, 127, 63, 500)
|
lightMouse = lightWorld:newLight(0, 0, 1, 127/255, 63/255, 500)
|
||||||
lightMouse:setSmooth(2)
|
lightMouse:setSmooth(2)
|
||||||
|
|
||||||
-- create shadow bodys
|
-- create shadow bodys
|
||||||
@ -292,13 +292,13 @@ 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
|
if self.bar_pos > self.bar_max_pos then
|
||||||
self.bar_pos = self.bar_max_pos
|
self.bar_pos = self.bar_max_pos
|
||||||
end
|
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
|
if self.bar_pos < 0 then
|
||||||
self.bar_pos = 0
|
self.bar_pos = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -337,16 +337,16 @@ function List:draw()
|
|||||||
love.graphics.setLineStyle("rough")
|
love.graphics.setLineStyle("rough")
|
||||||
love.graphics.setFont(self.font)
|
love.graphics.setFont(self.font)
|
||||||
|
|
||||||
love.graphics.setColor(48, 156, 225)
|
love.graphics.setColor(48/255, 156/255, 225 / 255)
|
||||||
|
|
||||||
local mx, my = love.mouse.getPosition()
|
local mx, my = love.mouse.getPosition()
|
||||||
|
|
||||||
-- 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
|
if end_i > self.items.n then
|
||||||
end_i = self.items.n
|
end_i = self.items.n
|
||||||
end
|
end
|
||||||
|
|
||||||
love.graphics.setScissor(self.x, self.y, self.width, self.height)
|
love.graphics.setScissor(self.x, self.y, self.width, self.height)
|
||||||
@ -357,17 +357,17 @@ function List:draw()
|
|||||||
local hover = inside(mx, my, x, y, w, h)
|
local hover = inside(mx, my, x, y, w, h)
|
||||||
|
|
||||||
if hover then
|
if hover then
|
||||||
love.graphics.setColor(0, 0, 0, 127)
|
love.graphics.setColor(0, 0, 0, 127/255)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(0, 0, 0, 63)
|
love.graphics.setColor(0, 0, 0, 63/255)
|
||||||
end
|
end
|
||||||
|
|
||||||
love.graphics.rectangle("fill", x+1, y+i+1, w-3, h)
|
love.graphics.rectangle("fill", x+1, y+i+1, w-3, h)
|
||||||
|
|
||||||
if hover then
|
if hover then
|
||||||
love.graphics.setColor(255, 255, 255)
|
love.graphics.setColor(1, 1, 1, 1)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(255, 255, 255, 127)
|
love.graphics.setColor(1, 1, 1, 127/255)
|
||||||
end
|
end
|
||||||
|
|
||||||
local e_id = string.sub(self.items[i], 1, 5)
|
local e_id = string.sub(self.items[i], 1, 5)
|
||||||
@ -385,15 +385,15 @@ function List:draw()
|
|||||||
local hover = inside(mx, my, x, y, w, h)
|
local hover = inside(mx, my, x, y, w, h)
|
||||||
|
|
||||||
if hover or self.bar_lock then
|
if hover or self.bar_lock then
|
||||||
love.graphics.setColor(0, 0, 0, 127)
|
love.graphics.setColor(0, 0, 0, 127/255)
|
||||||
else
|
else
|
||||||
love.graphics.setColor(0, 0, 0, 63)
|
love.graphics.setColor(0, 0, 0, 63/255)
|
||||||
end
|
end
|
||||||
love.graphics.rectangle("fill", x, y, w, h)
|
love.graphics.rectangle("fill", x, y, w, h)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Border.
|
-- Border.
|
||||||
love.graphics.setColor(0, 0, 0, 63)
|
love.graphics.setColor(0, 0, 0, 63/255)
|
||||||
love.graphics.rectangle("line", self.x+self.width, self.y, self.bar_width, self.height)
|
love.graphics.rectangle("line", self.x+self.width, self.y, self.bar_width, self.height)
|
||||||
love.graphics.rectangle("line", self.x, self.y, self.width, self.height)
|
love.graphics.rectangle("line", self.x, self.y, self.width, self.height)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user