otclient-redemption/modules/game_shaders/shaders.lua
2024-12-17 18:27:38 -03:00

181 lines
4.6 KiB
Lua

local HOTKEY = 'Ctrl+Y'
local MAP_SHADERS = { {
name = 'Map - Default',
frag = nil
}, {
name = 'Map - Fog',
frag = 'shaders/fragment/fog.frag',
tex1 = 'images/clouds'
}, {
name = 'Map - Rain',
frag = 'shaders/fragment/rain.frag'
}, {
name = 'Map - Snow',
frag = 'shaders/fragment/snow.frag',
tex1 = 'images/snow'
}, {
name = 'Map - Gray Scale',
frag = 'shaders/fragment/grayscale.frag'
}, {
name = 'Map - Bloom',
frag = 'shaders/fragment/bloom.frag'
}, {
name = 'Map - Sepia',
frag = 'shaders/fragment/sepia.frag'
}, {
name = 'Map - Pulse',
frag = 'shaders/fragment/pulse.frag',
drawViewportEdge = true
}, {
name = 'Map - Old Tv',
frag = 'shaders/fragment/oldtv.frag'
}, {
name = 'Map - Party',
frag = 'shaders/fragment/party.frag'
}, {
name = 'Map - Radial Blur',
frag = 'shaders/fragment/radialblur.frag',
drawViewportEdge = true
}, {
name = 'Map - Zomg',
frag = 'shaders/fragment/zomg.frag',
drawViewportEdge = true
}, {
name = 'Map - Heat',
frag = 'shaders/fragment/heat.frag',
drawViewportEdge = true
}, {
name = 'Map - Noise',
frag = 'shaders/fragment/noise.frag'
} }
OUTFIT_SHADERS = { {
name = 'Outfit - Default',
frag = nil
}, {
name = 'Outfit - Rainbow',
frag = 'shaders/fragment/party.frag'
}, {
name = 'Outfit - Ghost',
frag = 'shaders/fragment/radialblur.frag',
drawColor = false
}, {
name = 'Outfit - Jelly',
frag = 'shaders/fragment/heat.frag'
}, {
name = 'Outfit - Fragmented',
frag = 'shaders/fragment/noise.frag'
}, {
name = 'Outfit - cyclopedia-black',
frag = 'shaders/fragment/cyclopedia.frag'
}, {
name = 'Outfit - Outline',
useFramebuffer = true,
frag = 'shaders/fragment/outline.frag'
} }
MOUNT_SHADERS = { {
name = 'Mount - Default',
frag = nil
}, {
name = 'Mount - Rainbow',
frag = 'shaders/fragment/party.frag'
} }
local function attachShaders()
local map = modules.game_interface.getMapPanel()
map:setShader('Default')
local player = g_game.getLocalPlayer()
player:setShader('Default')
player:setMountShader('Default')
end
local registerShader = function(opts, method)
local fragmentShaderPath = resolvepath(opts.frag)
if fragmentShaderPath ~= nil then
-- local shader = g_shaders.createShader()
g_shaders.createFragmentShader(opts.name, opts.frag, opts.useFramebuffer or false)
if opts.tex1 then
g_shaders.addMultiTexture(opts.name, opts.tex1)
end
if opts.tex2 then
g_shaders.addMultiTexture(opts.name, opts.tex2)
end
-- Setup proper uniforms
g_shaders[method](opts.name)
end
end
ShaderController = Controller:new()
function ShaderController:onInit()
for _, opts in pairs(MAP_SHADERS) do
registerShader(opts, 'setupMapShader')
end
for _, opts in pairs(OUTFIT_SHADERS) do
registerShader(opts, 'setupOutfitShader')
end
for _, opts in pairs(MOUNT_SHADERS) do
registerShader(opts, 'setupMountShader')
end
Keybind.new('Windows', 'show/hide Shader Windows', HOTKEY, '')
Keybind.bind('Windows', 'show/hide Shader Windows', {
{
type = KEY_DOWN,
callback = function() ShaderController.ui:setVisible(not ShaderController.ui:isVisible()) end,
}
})
end
function ShaderController:onTerminate()
g_shaders.clear()
Keybind.delete('Windows', 'show/hide Shader Windows')
end
function ShaderController:onGameStart()
attachShaders()
self:loadHtml('shaders.html', modules.game_interface.getMapPanel())
for _, opts in pairs(MAP_SHADERS) do
self.ui.mapComboBox:addOption(opts.name, opts)
end
for _, opts in pairs(OUTFIT_SHADERS) do
self.ui.outfitComboBox:addOption(opts.name, opts)
end
for _, opts in pairs(MOUNT_SHADERS) do
self.ui.mountComboBox:addOption(opts.name, opts)
end
end
function ShaderController:onMapComboBoxChange(event)
local map = modules.game_interface.getMapPanel()
map:setShader(event.text)
local data = event.target:getCurrentOption().data
map:setDrawViewportEdge(data.drawViewportEdge == true)
end
function ShaderController:onOutfitComboBoxChange(event)
local player = g_game.getLocalPlayer()
if player then
player:setShader(event.text)
local data = event.target:getCurrentOption().data
player:setDrawOutfitColor(data.drawColor ~= false)
end
end
function ShaderController:onMountComboBoxChange(event)
local player = g_game.getLocalPlayer()
if player then
player:setMountShader(event.text)
end
end