summaryrefslogtreecommitdiff
path: root/message.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-02-26 05:04:34 +0100
committerAki <nthirtyone@gmail.com>2017-02-26 05:04:34 +0100
commit72533c0efb9d5659cd2c1fb0e9f067696d759812 (patch)
tree9fd29c0700c182de5e787af45c4277ee62140787 /message.lua
downloadvisitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.zip
visitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.tar.gz
visitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.tar.bz2
Initial commit, after jam
Diffstat (limited to 'message.lua')
-rw-r--r--message.lua101
1 files changed, 101 insertions, 0 deletions
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