--- @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