From: Randy McShandy Date: Wed, 11 Mar 2026 03:47:53 +0000 (-0500) Subject: Root pass on messaging X-Git-Url: http://git.mcshandy.xyz/gitweb.cgi?a=commitdiff_plain;h=12589c225b25a583929f8dd7bd3f7761a50f0c72;p=sumeriangame Root pass on messaging --- diff --git a/main/handlers.lua b/main/handlers.lua index c730186..51238ba 100644 --- a/main/handlers.lua +++ b/main/handlers.lua @@ -28,6 +28,3 @@ end function love.handlers.collision(focus, pos) end - -function love.handlers.collision(collider, tile) -end diff --git a/main/main.lua b/main/main.lua index e9fdbfe..c84d21b 100644 --- a/main/main.lua +++ b/main/main.lua @@ -8,20 +8,25 @@ local lovebird = require('plugin.lovebird') -- Debugging tool http://127.0.0.1:8 local handlers = require('handlers') local conf = require('conf') local assets = require('assets') +local message = require('message') local player_module = require('player') local control = require('control') local render = require('render') player = player_module.player +local test_text = nil + function love.load() love.setDeprecationOutput(false) - love.graphics.setFont(assets.get_font('Cuneiform36')) love.audio.play(assets.get_source('intro')) render.activate_map('side_scroll') player = assets.get_object('Player') player_module.init_controls(player, render.map.active_map) + + test_text = love.graphics.newText(assets.get_font('Cuneiform36'), IntroMessage) + message.send(test_text, { frame = false }) end function love.update(dt) @@ -41,6 +46,7 @@ function love.draw() w = render.map.active_map.tilewidth * render.map.scale, h = render.map.active_map.tileheight * render.map.scale, } + local last_color = { love.graphics.getColor() } love.graphics.stencil( function() @@ -55,8 +61,6 @@ function love.draw() render.map.active_map:draw(render.map.active_map.topleft.x, render.map.active_map.topleft.y, render.map.scale) - last_color = { love.graphics.getColor() } - love.graphics.setColor(render.color.dark) - love.graphics.print(IntroMessage, math.floor((conf.window.width/16) * 1), math.floor((conf.window.height/16) * 1)) love.graphics.setColor(last_color) + message.draw() end diff --git a/main/message.lua b/main/message.lua new file mode 100644 index 0000000..ad4a6ec --- /dev/null +++ b/main/message.lua @@ -0,0 +1,61 @@ +-- message.lua + +local message = {} + +-- Try to queue a message for display. +-- For now, only allow showing one message at a time. +function message.send(textItem, opts) + if message.active_message then + else + message.active_message = { item = textItem, opts = opts } + end +end + +function message.draw() + if not message.active_message then + return + end + + local textItem, opts = message.active_message.item, message.active_message.opts + local x, y = opts.x, opts.y + local width, height = textItem:getDimensions() + local last_color = { love.graphics.getColor() } + local tile = render.viewport.tile + local halftile = utils.shallow_copy(tile) + + halftile.w = halftile.w / 2 + halftile.h = halftile.h / 2 + + -- If a position is not provided, + -- find a nice position for it + if (not x) or (not y) then + x = render.viewport.ox + halftile.w + y = render.viewport.oy + halftile.h + width = render.viewport.ex - render.viewport.ox - (2 * tile.w) - halftile.w + end + + if opts.frame then + love.graphics.setColor(render.color.dark_trans60) + love.graphics.rectangle('fill', + x, y, + x + width + tile.w, + y + height + tile.h) + love.graphics.setColor(render.color.really_dark) + love.graphics.rectangle('line', + x, y, + x + width + tile.w, + y + height + tile.h) + else + -- No more tasteful framing offsets + halftile.w = 0 + halftile.h = 0 + end + + -- A tasteful offset + love.graphics.setColor(render.color.really_dark) + love.graphics.draw(textItem, x + halftile.w, y + halftile.h) + love.graphics.setColor(last_color) +end + + +return message diff --git a/main/plugin/sti/init.lua b/main/plugin/sti/init.lua index 646a224..caba344 100644 --- a/main/plugin/sti/init.lua +++ b/main/plugin/sti/init.lua @@ -897,21 +897,21 @@ function Map:draw(tx, ty, sx, sy) -- Map is translated to correct position so the right section is drawn lg.push() lg.origin() - + --[[ This snippet comes from 'monolifed' on the Love2D forums, - however it was more or less exactly the same code I was already writing - to implement the same parallax scrolling. I found his before + however it was more or less exactly the same code I was already writing + to implement the same parallax scrolling. I found his before testing and polishing mine https://love2d.org/forums/viewtopic.php?p=238378#p238378 - previous code commented below the new. + previous code commented below the new. ]] tx, ty = tx or 0, ty or 0 - for _, layer in ipairs(self.layers) do + for k, layer in ipairs(self.layers) do if layer.visible and layer.opacity > 0 then local px, py = layer.parallaxx or 1, layer.parallaxy or 1 px, py = math.floor(tx * px), math.floor(ty * py) @@ -950,7 +950,7 @@ end function Map.drawLayer(_, layer) local r,g,b,a = lg.getColor() -- if the layer has a tintcolor set - if layer.tintcolor then + if layer.tintcolor then r, g, b, a = unpack(layer.tintcolor) a = a or 255 -- alpha may not be specified lg.setColor(r/255, g/255, b/255, a/255) -- Tiled uses 0-255 @@ -1078,12 +1078,12 @@ function Map:drawImageLayer(layer) if layer.repeaty then local x = imagewidth local y = imageheight - while y < self.height * self.tileheight do + while y < self.height * self.tileheight do lg.draw(layer.image, x, y) -- if we are *also* repeating on X - if layer.repeatx then + if layer.repeatx then x = x + imagewidth - while x < self.width * self.tilewidth do + while x < self.width * self.tilewidth do lg.draw(layer.image, x, y) x = x + imagewidth end @@ -1093,7 +1093,7 @@ function Map:drawImageLayer(layer) -- if we're repeating on X alone... elseif layer.repeatx then local x = imagewidth - while x < self.width * self.tilewidth do + while x < self.width * self.tilewidth do lg.draw(layer.image, x, layer.y) x = x + imagewidth end diff --git a/main/render.lua b/main/render.lua index 39c3131..900e403 100644 --- a/main/render.lua +++ b/main/render.lua @@ -24,8 +24,12 @@ render.ViewClassData["sidescroll"] = ViewClass.Sidescroll render.color = {} -- wrapping a function that returns multiple values in {} packs -- them into a single struct -render.color.dark = { love.math.colorFromBytes(54, 54, 54) } -render.color.light = { love.math.colorFromBytes(229, 229, 229) } +render.color.really_dark = { love.math.colorFromBytes(2, 2, 2, 255) } +render.color.dark = { love.math.colorFromBytes(54, 54, 54, 255) } +render.color.light = { love.math.colorFromBytes(229, 229, 229, 255) } + +render.color.dark_trans60 = utils.shallow_copy(render.color.dark) +render.color.dark_trans60[4] = 0.6 -- Map rendering info render.map = {} @@ -42,6 +46,7 @@ render.viewport = oy = 0, ex = conf.window.width, ey = conf.window.height, + tile = {}, } function render.activate_map(new_map_name) @@ -95,6 +100,8 @@ function render.update_viewport() new_viewport.ex = (conf.window.width) - (tile.w) - (backwidth) new_viewport.ey = (conf.window.height) - (tile.h) - (backheight) + new_viewport.tile = utils.shallow_copy(tile) + return new_viewport end diff --git a/main/utils.lua b/main/utils.lua index 7b18e40..38166b3 100644 --- a/main/utils.lua +++ b/main/utils.lua @@ -30,7 +30,11 @@ end function utils.shallow_dump(delim, ...) for vark,varv in pairs({...}) do print(delim..vark..':') - for k,v in pairs(varv) do + if type(varv) == 'table' then + for k,v in pairs(varv) do + print('\t'..k..':', v) + end + elseif type(varv) ~= 'userdata' then print('\t'..k..':', v) end end