allow window resizing again
This commit is contained in:
parent
7394249cb8
commit
615738d06a
@ -65,6 +65,8 @@ function barElement:draw()
|
||||
self.bounds.y, self.bounds.width, "center")
|
||||
end
|
||||
|
||||
self:drawBorder("inner")
|
||||
|
||||
self:drawGradientOverlay()
|
||||
end
|
||||
|
||||
@ -109,7 +111,7 @@ function bottomBars.new(cid)
|
||||
end
|
||||
|
||||
function bottomBars:update(dt)
|
||||
local height = 14
|
||||
local height = 16
|
||||
local margin = 2
|
||||
|
||||
self.bounds.height = height
|
||||
@ -117,16 +119,16 @@ function bottomBars:update(dt)
|
||||
|
||||
self.hpBar.bounds = Rect {
|
||||
width = -2 * margin + self.bounds.width / 2,
|
||||
height = height,
|
||||
height = height - margin,
|
||||
x = self.bounds.x + margin,
|
||||
y = self.bounds.y
|
||||
y = self.bounds.y + margin
|
||||
}
|
||||
|
||||
self.manaBar.bounds = Rect {
|
||||
width = -2 * margin + self.bounds.width / 2,
|
||||
height = height,
|
||||
height = height - margin,
|
||||
x = self.bounds.x + margin + self.bounds.width / 2,
|
||||
y = self.bounds.y
|
||||
y = self.bounds.y + margin
|
||||
}
|
||||
|
||||
self.hpBar:update(dt)
|
||||
@ -148,8 +150,6 @@ function bottomBars:draw()
|
||||
self.manaBar:draw()
|
||||
end
|
||||
|
||||
local c = love.graphics.newCanvas(1280, 720) --- @TODO: выставлять канвасу правильный размер в зависимости от окна
|
||||
|
||||
--- @class CharacterPanel : UIElement
|
||||
--- @field animationNode AnimationNode
|
||||
--- @field state "show" | "idle" | "hide"
|
||||
@ -193,6 +193,9 @@ function characterPanel:hide()
|
||||
}:run()
|
||||
end
|
||||
|
||||
--- @type love.Canvas
|
||||
local characterPanelCanvas;
|
||||
|
||||
function characterPanel:update(dt)
|
||||
if self.animationNode then self.animationNode:update(dt) end
|
||||
self.skillRow:update(dt)
|
||||
@ -210,6 +213,10 @@ function characterPanel:update(dt)
|
||||
height = self.bars.bounds.height + self.skillRow.bounds.height
|
||||
}
|
||||
|
||||
if not characterPanelCanvas then
|
||||
characterPanelCanvas = love.graphics.newCanvas(self.bounds.width, self.bounds.height)
|
||||
end
|
||||
|
||||
--- анимация появления
|
||||
local alpha = 1
|
||||
if self.state == "show" then
|
||||
@ -222,19 +229,33 @@ function characterPanel:update(dt)
|
||||
end
|
||||
|
||||
function characterPanel:draw()
|
||||
love.graphics.setCanvas(c)
|
||||
love.graphics.clear()
|
||||
self.skillRow:draw()
|
||||
self.bars:draw()
|
||||
|
||||
--- @TODO: переписать этот ужас с жонглированием координатами, а то слишком хардкод (skillRow рисуется относительно нуля и не закрывает канвас)
|
||||
love.graphics.push()
|
||||
local canvas = love.graphics.getCanvas()
|
||||
love.graphics.translate(0, self.bars.bounds.height)
|
||||
love.graphics.setCanvas(characterPanelCanvas)
|
||||
love.graphics.clear()
|
||||
love.graphics.draw(canvas)
|
||||
love.graphics.pop()
|
||||
|
||||
love.graphics.push()
|
||||
love.graphics.translate(-self.bounds.x, -self.bounds.y)
|
||||
self.bars:draw()
|
||||
self:drawBorder("outer")
|
||||
love.graphics.pop()
|
||||
|
||||
--- рисуем текстуру шейдером появления
|
||||
love.graphics.setCanvas()
|
||||
love.graphics.setShader(Tree.assets.files.shaders.reveal)
|
||||
love.graphics.setColor(1, 1, 1, 1)
|
||||
love.graphics.draw(c)
|
||||
|
||||
love.graphics.push()
|
||||
love.graphics.translate(self.bounds.x, self.bounds.y)
|
||||
love.graphics.draw(characterPanelCanvas)
|
||||
love.graphics.setColor(1, 1, 1)
|
||||
love.graphics.pop()
|
||||
love.graphics.setShader()
|
||||
end
|
||||
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
local UI_SCALE = 0.8 -- выдуманное значение для dependency injection
|
||||
local UI_SCALE = 0.75 -- выдуманное значение для dependency injection, надо подбирать так, чтобы UI_SCALE * 64 было целым числом
|
||||
return UI_SCALE
|
||||
|
||||
@ -103,8 +103,11 @@ function skillRow.new(characterId)
|
||||
return t
|
||||
end
|
||||
|
||||
--- @type love.Canvas
|
||||
local c;
|
||||
|
||||
function skillRow:update(dt)
|
||||
local iconSize = 64 * UI_SCALE
|
||||
local iconSize = math.floor(64 * UI_SCALE)
|
||||
local screenW, screenH = love.graphics.getDimensions()
|
||||
local padding, margin = 8, 4
|
||||
local count = #self.children -- слоты под скиллы
|
||||
@ -121,54 +124,63 @@ function skillRow:update(dt)
|
||||
y = self.bounds.y + margin, height = iconSize, width = iconSize }
|
||||
skb:update(dt)
|
||||
end
|
||||
|
||||
if not c then
|
||||
c = love.graphics.newCanvas(self.bounds.width, self.bounds.height)
|
||||
end
|
||||
end
|
||||
|
||||
local c = love.graphics.newCanvas(1280, 720) --- @TODO: выставлять канвасу правильный размер в зависимости от окна
|
||||
|
||||
function skillRow:draw()
|
||||
local oldCanvas = love.graphics.getCanvas()
|
||||
love.graphics.setCanvas({ c, stencil = true })
|
||||
love.graphics.clear()
|
||||
love.graphics.setColor(1, 1, 1)
|
||||
|
||||
-- сначала иконки скиллов
|
||||
for _, skb in ipairs(self.children) do
|
||||
skb:draw()
|
||||
do
|
||||
--- рисуем в локальных координатах текстурки
|
||||
love.graphics.push()
|
||||
love.graphics.translate(-self.bounds.x, -self.bounds.y)
|
||||
|
||||
-- сначала иконки скиллов
|
||||
for _, skb in ipairs(self.children) do
|
||||
skb:draw()
|
||||
end
|
||||
|
||||
-- маска для вырезов под иконки
|
||||
love.graphics.setShader(Tree.assets.files.shaders.alpha_mask)
|
||||
love.graphics.stencil(function()
|
||||
local mask = Tree.assets.files.masks.rrect32
|
||||
local maskSize = mask:getWidth()
|
||||
for _, skb in ipairs(self.children) do
|
||||
love.graphics.draw(mask, skb.bounds.x, skb.bounds.y, 0,
|
||||
skb.bounds.width / maskSize, skb.bounds.height / maskSize)
|
||||
end
|
||||
end, "replace", 1)
|
||||
love.graphics.setShader()
|
||||
|
||||
|
||||
-- дальше рисуем панель, перекрывая иконки
|
||||
love.graphics.setStencilTest("less", 1)
|
||||
-- шум
|
||||
love.graphics.setShader(Tree.assets.files.shaders.soft_uniform_noise)
|
||||
love.graphics.rectangle("fill", self.bounds.x, self.bounds.y, self.bounds.width, self.bounds.height)
|
||||
love.graphics.setShader()
|
||||
|
||||
-- фон
|
||||
love.graphics.setColor(38 / 255, 50 / 255, 56 / 255)
|
||||
love.graphics.setBlendMode("multiply", "premultiplied")
|
||||
love.graphics.rectangle("fill", self.bounds.x, self.bounds.y, self.bounds.width, self.bounds.height)
|
||||
love.graphics.setBlendMode("alpha")
|
||||
|
||||
love.graphics.setStencilTest()
|
||||
|
||||
--затенение
|
||||
self:drawGradientOverlay()
|
||||
love.graphics.pop()
|
||||
end
|
||||
|
||||
-- маска для вырезов под иконки
|
||||
love.graphics.setShader(Tree.assets.files.shaders.alpha_mask)
|
||||
love.graphics.stencil(function()
|
||||
local mask = Tree.assets.files.masks.rrect32
|
||||
local maskSize = mask:getWidth()
|
||||
for _, skb in ipairs(self.children) do
|
||||
love.graphics.draw(mask, skb.bounds.x, skb.bounds.y, 0,
|
||||
skb.bounds.width / maskSize, skb.bounds.height / maskSize)
|
||||
end
|
||||
end, "replace", 1)
|
||||
love.graphics.setShader()
|
||||
|
||||
-- дальше рисуем панель, перекрывая иконки
|
||||
love.graphics.setStencilTest("less", 1)
|
||||
-- шум
|
||||
love.graphics.setShader(Tree.assets.files.shaders.soft_uniform_noise)
|
||||
love.graphics.rectangle("fill", self.bounds.x, self.bounds.y, self.bounds.width, self.bounds.height)
|
||||
love.graphics.setShader()
|
||||
|
||||
-- фон
|
||||
love.graphics.setColor(38 / 255, 50 / 255, 56 / 255)
|
||||
love.graphics.setBlendMode("multiply", "premultiplied")
|
||||
love.graphics.rectangle("fill", self.bounds.x, self.bounds.y, self.bounds.width, self.bounds.height)
|
||||
love.graphics.setBlendMode("alpha")
|
||||
|
||||
love.graphics.setStencilTest()
|
||||
|
||||
--затенение
|
||||
self:drawGradientOverlay()
|
||||
|
||||
love.graphics.setColor(1, 1, 1)
|
||||
love.graphics.setCanvas(oldCanvas)
|
||||
love.graphics.draw(c)
|
||||
-- love.graphics.setCanvas(oldCanvas)
|
||||
-- love.graphics.draw(c)
|
||||
end
|
||||
|
||||
return skillRow.new
|
||||
|
||||
2
main.lua
2
main.lua
@ -18,7 +18,7 @@ function love.load()
|
||||
end
|
||||
Tree.level.turnOrder:endRound()
|
||||
print("Now playing:", Tree.level.turnOrder.current)
|
||||
love.window.setMode(1280, 720, { resizable = false, msaa = 0, vsync = true })
|
||||
love.window.setMode(1280, 720, { resizable = true, msaa = 4, vsync = true })
|
||||
end
|
||||
|
||||
local lt = "0"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user