From 72533c0efb9d5659cd2c1fb0e9f067696d759812 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 26 Feb 2017 05:04:34 +0100 Subject: Initial commit, after jam --- message.lua | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 message.lua (limited to 'message.lua') diff --git a/message.lua b/message.lua new file mode 100644 index 0000000..24662fc --- /dev/null +++ b/message.lua @@ -0,0 +1,101 @@ +-- Metatable. +local Message = { + text, -- actually added in constructor + opacity = 0, -- [0..3] + visible = true, +} +Message.__index = Message + +-- Constructor. +local function newMessage() + return setmetatable({text = love.graphics.newText(Game.font)}, Message) +end + +-- Dimensions related functions. +function Message:getDimensions() + local width = Game.getWidth() / self:getScale() + local height = 0 + if self.text then + height = self.text:getHeight() + end + return width, height +end + +-- Position related functions. +function Message:getPosition(scale) + local w, h = self:getDimensions() + local x = 2 * scale + local y = Game.getHeight() - (h+2) * scale + return x, y +end + +-- Internal scale for Message's text. +function Message:getScale() + return math.min(7, math.ceil(Game.getWidth() / 190)) +end + +-- Text, set it, motherfucker. +function Message:setText(speaker, content) + local width = self:getDimensions() + if self.text and speaker and content then + self.text:setf({{240,100,100}, speaker .. "\n" , {240,240,240}, content},width, "left") + end + return self +end + +-- Also set use, not seduce. +function Message:setUse(func) + if type(func) == "function" then + self.use = func + end + return self +end + +-- Manages Message's visibility. +function Message:isVisible() + if self.opacity > 0 then + return true + end + return false +end +function Message:hide() + self.visible = false + return self +end +function Message:show() + self.visible = true + return self +end + +-- Callback when mouse is pressed. +function Message:click() + self:hide() +end +function Message:use() +end + +-- LÖVE2D callbacks. +function Message:update(dt) + if self.visible and self.opacity < 3 then + self.opacity = self.opacity + 1 + end + if not self.visible and self.opacity > 0 then + self.opacity = self.opacity - 1 + end + if not self.visible and self.opacity == 0 then + self:use() + end +end +function Message:draw(scale) + if not self:isVisible() then return end + local scale = self:getScale() + local x,y = self:getPosition(scale) + local w, h = self:getDimensions() + love.graphics.push() + love.graphics.origin() + love.graphics.setColor(255,255,255,255/3*self.opacity) + love.graphics.draw(self.text, x,y, 0, scale, scale) + love.graphics.pop() +end + +return newMessage \ No newline at end of file -- cgit v1.1