46 lines
1.4 KiB
Lua

--- @class LightBehavior : Behavior
--- @field intensity number
--- @field color Vec3
--- @field position Vec3
--- @field seed integer
local behavior = {}
behavior.__index = behavior
behavior.id = "light"
---@param values {intensity: number?, color: Vec3?, position: Vec3?, seed: integer?}
---@return LightBehavior
function behavior.new(values)
return setmetatable({
intensity = values.intensity or 1,
color = values.color or Vec3 { 1, 1, 1 },
position = values.position or Vec3 {},
seed = values.seed or math.random(math.pow(2, 16))
}, behavior)
end
function behavior:update()
local mx, my = love.mouse.getX(), love.mouse.getY()
self.position = Tree.level.camera:toWorldPosition(Vec3 { mx, my })
end
function behavior:draw()
Tree.level.camera:attach()
love.graphics.setCanvas(Tree.level.render.textures.lightLayer)
local shader = Tree.assets.files.shaders.light
shader:send("color", { self.color.x, self.color.y, self.color.z })
shader:send("time", love.timer.getTime() + self.seed)
love.graphics.setShader(shader)
-- love.graphics.setBlendMode("add")
love.graphics.draw(Tree.assets.files.masks.circle128, self.position.x - self.intensity / 2,
self.position.y - self.intensity / 2, 0, self.intensity / 128,
self.intensity / 128)
love.graphics.setBlendMode("alpha")
love.graphics.setShader()
love.graphics.setCanvas()
Tree.level.camera:detach()
end
return behavior