Initial commit
This commit is contained in:
115
addons/mantle_darkfated_ultracode/lua/mantle/modules/shadows.lua
Normal file
115
addons/mantle_darkfated_ultracode/lua/mantle/modules/shadows.lua
Normal file
@@ -0,0 +1,115 @@
|
||||
local math_sin = math.sin
|
||||
local math_cos = math.cos
|
||||
local math_rad = math.rad
|
||||
local math_ceil = math.ceil
|
||||
|
||||
local function CreateBShadows()
|
||||
BShadows = {}
|
||||
|
||||
local resStr = Mantle.func.sw .. Mantle.func.sh
|
||||
|
||||
BShadows.RenderTarget = GetRenderTarget('BShadows_original_' .. resStr, Mantle.func.sw, Mantle.func.sh)
|
||||
BShadows.RenderTarget2 = GetRenderTarget('BShadows_shadow_' .. resStr, Mantle.func.sw, Mantle.func.sh)
|
||||
BShadows.ShadowMaterial = CreateMaterial('BShadows', 'UnlitGeneric', {
|
||||
['$translucent'] = 1,
|
||||
['$vertexalpha'] = 1,
|
||||
['alpha'] = 1
|
||||
})
|
||||
|
||||
BShadows.ShadowMaterialGrayscale = CreateMaterial('BShadows_grayscale', 'UnlitGeneric', {
|
||||
['$translucent'] = 1,
|
||||
['$vertexalpha'] = 1,
|
||||
['$alpha'] = 1,
|
||||
['$color'] = '0 0 0',
|
||||
['$color2'] = '0 0 0'
|
||||
})
|
||||
|
||||
BShadows.BeginShadow = function()
|
||||
render.PushRenderTarget(BShadows.RenderTarget)
|
||||
|
||||
render.OverrideAlphaWriteEnable(true, true)
|
||||
render.Clear(0, 0, 0, 0)
|
||||
render.OverrideAlphaWriteEnable(false, false)
|
||||
|
||||
cam.Start2D()
|
||||
end
|
||||
|
||||
BShadows.EndShadow = function(intensity, spread, blur, opacity, direction, distance, bool_shadow_only)
|
||||
opacity = opacity or 255
|
||||
direction = direction or 0
|
||||
distance = distance or 0
|
||||
bool_shadow_only = bool_shadow_only or false
|
||||
|
||||
render.CopyRenderTargetToTexture(BShadows.RenderTarget2)
|
||||
|
||||
if blur > 0 then
|
||||
render.OverrideAlphaWriteEnable(true, true)
|
||||
render.BlurRenderTarget(BShadows.RenderTarget2, spread, spread, blur)
|
||||
render.OverrideAlphaWriteEnable(false, false)
|
||||
end
|
||||
|
||||
render.PopRenderTarget()
|
||||
|
||||
BShadows.ShadowMaterial:SetTexture('$basetexture', BShadows.RenderTarget)
|
||||
BShadows.ShadowMaterialGrayscale:SetTexture('$basetexture', BShadows.RenderTarget2)
|
||||
|
||||
local xOffset = math_sin(math_rad(direction)) * distance
|
||||
local yOffset = math_cos(math_rad(direction)) * distance
|
||||
|
||||
BShadows.ShadowMaterialGrayscale:SetFloat('$alpha', opacity / 255)
|
||||
render.SetMaterial(BShadows.ShadowMaterialGrayscale)
|
||||
|
||||
for i = 1, math_ceil(intensity) do
|
||||
render.DrawScreenQuadEx(xOffset, yOffset, Mantle.func.sw, Mantle.func.sh)
|
||||
end
|
||||
|
||||
if !bool_shadow_only then
|
||||
BShadows.ShadowMaterial:SetTexture('$basetexture', BShadows.RenderTarget)
|
||||
render.SetMaterial(BShadows.ShadowMaterial)
|
||||
render.DrawScreenQuad()
|
||||
end
|
||||
|
||||
cam.End2D()
|
||||
end
|
||||
|
||||
BShadows.DrawShadowTexture = function(texture, intensity, spread, blur, opacity, direction, distance, bool_shadow_only)
|
||||
opacity = opacity or 255
|
||||
direction = direction or 0
|
||||
distance = distance or 0
|
||||
bool_shadow_only = bool_shadow_only or false
|
||||
|
||||
render.CopyTexture(texture, BShadows.RenderTarget2)
|
||||
|
||||
if blur > 0 then
|
||||
render.PushRenderTarget(BShadows.RenderTarget2)
|
||||
render.OverrideAlphaWriteEnable(true, true)
|
||||
render.BlurRenderTarget(BShadows.RenderTarget2, spread, spread, blur)
|
||||
render.OverrideAlphaWriteEnable(false, false)
|
||||
render.PopRenderTarget()
|
||||
end
|
||||
|
||||
BShadows.ShadowMaterialGrayscale:SetTexture('$basetexture', BShadows.RenderTarget2)
|
||||
|
||||
local xOffset = math_sin(math_rad(direction)) * distance
|
||||
local yOffset = math_cos(math_rad(direction)) * distance
|
||||
|
||||
BShadows.ShadowMaterialGrayscale:SetFloat('$alpha', opacity / 255)
|
||||
render.SetMaterial(BShadows.ShadowMaterialGrayscale)
|
||||
|
||||
for i = 1, math_ceil(intensity) do
|
||||
render.DrawScreenQuadEx(xOffset, yOffset, Mantle.func.sw, Mantle.func.sh)
|
||||
end
|
||||
|
||||
if !bool_shadow_only then
|
||||
BShadows.ShadowMaterial:SetTexture('$basetexture', texture)
|
||||
render.SetMaterial(BShadows.ShadowMaterial)
|
||||
render.DrawScreenQuad()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
CreateBShadows()
|
||||
|
||||
hook.Add('OnScreenSizeChanged', 'Mantle.Shadows', function()
|
||||
CreateBShadows()
|
||||
end)
|
||||
Reference in New Issue
Block a user