zombiesurvival-evolved/gamemodes/zombiesurvival/gamemode/cl_postprocess.lua

254 lines
9 KiB
Lua
Raw Normal View History

2014-10-02 08:49:54 +08:00
function GM:RenderScreenspaceEffects()
end
GM.PostProcessingEnabled = CreateClientConVar("zs_postprocessing", 1, true, false):GetBool()
cvars.AddChangeCallback("zs_postprocessing", function(cvar, oldvalue, newvalue)
GAMEMODE.PostProcessingEnabled = tonumber(newvalue) == 1
end)
GM.FilmGrainEnabled = CreateClientConVar("zs_filmgrain", 1, true, false):GetBool()
cvars.AddChangeCallback("zs_filmgrain", function(cvar, oldvalue, newvalue)
GAMEMODE.FilmGrainEnabled = tonumber(newvalue) == 1
end)
GM.FilmGrainOpacity = CreateClientConVar("zs_filmgrainopacity", 50, true, false):GetInt()
cvars.AddChangeCallback("zs_filmgrainopacity", function(cvar, oldvalue, newvalue)
GAMEMODE.FilmGrainOpacity = math.Clamp(tonumber(newvalue) or 0, 0, 255)
end)
GM.ColorModEnabled = CreateClientConVar("zs_colormod", "1", true, false):GetBool()
cvars.AddChangeCallback("zs_colormod", function(cvar, oldvalue, newvalue)
GAMEMODE.ColorModEnabled = tonumber(newvalue) == 1
end)
GM.Auras = CreateClientConVar("zs_auras", 1, true, false):GetBool()
cvars.AddChangeCallback("zs_auras", function(cvar, oldvalue, newvalue)
GAMEMODE.Auras = tonumber(newvalue) == 1
end)
GM.AuraColorEmpty = Color(CreateClientConVar("zs_auracolor_empty_r", 255, true, false):GetInt(), CreateClientConVar("zs_auracolor_empty_g", 0, true, false):GetInt(), CreateClientConVar("zs_auracolor_empty_b", 0, true, false):GetInt(), 255)
GM.AuraColorFull = Color(CreateClientConVar("zs_auracolor_full_r", 20, true, false):GetInt(), CreateClientConVar("zs_auracolor_full_g", 255, true, false):GetInt(), CreateClientConVar("zs_auracolor_full_b", 20, true, false):GetInt(), 255)
cvars.AddChangeCallback("zs_auracolor_empty_r", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorEmpty.r = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
cvars.AddChangeCallback("zs_auracolor_empty_g", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorEmpty.g = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
cvars.AddChangeCallback("zs_auracolor_empty_b", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorEmpty.b = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
cvars.AddChangeCallback("zs_auracolor_full_r", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorFull.r = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
cvars.AddChangeCallback("zs_auracolor_full_g", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorFull.g = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
cvars.AddChangeCallback("zs_auracolor_full_b", function(cvar, oldvalue, newvalue)
GAMEMODE.AuraColorFull.b = math.Clamp(math.ceil(tonumber(newvalue) or 0), 0, 255)
end)
local DrawColorModify = DrawColorModify
local DrawSharpen = DrawSharpen
local EyePos = EyePos
local TEAM_HUMAN = TEAM_HUMAN
local TEAM_UNDEAD = TEAM_UNDEAD
local render_UpdateScreenEffectTexture = render.UpdateScreenEffectTexture
local render_SetMaterial = render.SetMaterial
local render_DrawScreenQuad = render.DrawScreenQuad
local render_DrawSprite = render.DrawSprite
local render_DrawBeam = render.DrawBeam
local render_GetLightRGB = render.GetLightRGB
local math_Approach = math.Approach
local FrameTime = FrameTime
local CurTime = CurTime
local math_sin = math.sin
local math_min = math.min
local math_max = math.max
local math_abs = math.abs
local team_GetPlayers = team.GetPlayers
local tColorModDead = {
["$pp_colour_contrast"] = 1.25,
["$pp_colour_colour"] = 0,
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = -0.02,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
}
local tColorModHuman = {
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = 0,
["$pp_colour_contrast"] = 1,
["$pp_colour_colour"] = 1,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
}
local tColorModZombie = {
["$pp_colour_brightness"] = 0,
["$pp_colour_contrast"] = 1.25,
["$pp_colour_colour"] = 0.5,
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
}
local tColorModZombieVision = {
["$pp_colour_colour"] = 0.75,
["$pp_colour_brightness"] = -0.15,
["$pp_colour_contrast"] = 1.5,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0,
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0
}
local redview = 0
local fear = 0
local matTankGlass = Material("models/props_lab/Tank_Glass001")
function GM:_RenderScreenspaceEffects()
if MySelf.Confusion and MySelf.Confusion:IsValid() then
MySelf.Confusion:RenderScreenSpaceEffects()
end
fear = math_Approach(fear, self:CachedFearPower(), FrameTime())
if not self.PostProcessingEnabled then return end
if self.DrawPainFlash and self.HurtEffect > 0 then
DrawSharpen(1, math_min(6, self.HurtEffect * 3))
end
if MySelf:Team() == TEAM_UNDEAD and self.m_ZombieVision and not matTankGlass:IsError() then
render_UpdateScreenEffectTexture()
matTankGlass:SetFloat("$envmap", 0)
matTankGlass:SetFloat("$envmaptint", 0)
matTankGlass:SetFloat("$refractamount", 0.035)
matTankGlass:SetInt("$ignorez", 1)
render_SetMaterial(matTankGlass)
render_DrawScreenQuad()
end
if self.ColorModEnabled then
if not MySelf:Alive() and MySelf:GetObserverMode() ~= OBS_MODE_CHASE then
if not MySelf:HasWon() then
tColorModDead["$pp_colour_colour"] = (1 - math_min(1, CurTime() - self.LastTimeAlive)) * 0.5
DrawColorModify(tColorModDead)
end
elseif MySelf:Team() == TEAM_UNDEAD then
if self.m_ZombieVision then
DrawColorModify(tColorModZombieVision)
else
tColorModZombie["$pp_colour_colour"] = math_min(1, 0.25 + math_min(1, (CurTime() - self.LastTimeDead) * 0.5) * 1.75 * fear)
DrawColorModify(tColorModZombie)
end
else
local curr = tColorModHuman["$pp_colour_addr"]
local health = MySelf:Health()
if health <= 50 then
--tColorModHuman["$pp_colour_addr"] = math_min(0.3 - health * 0.006, curr + FrameTime() * 0.055)
redview = math_Approach(redview, 1 - health / 50, FrameTime() * 0.2)
elseif 0 < curr then
--tColorModHuman["$pp_colour_addr"] = math_max(0, curr - FrameTime() * 0.1)
redview = math_Approach(redview, 0, FrameTime() * 0.2)
end
tColorModHuman["$pp_colour_addr"] = redview * (0.035 + math_abs(math.sin(CurTime() * 2)) * 0.14)
tColorModHuman["$pp_colour_brightness"] = fear * -0.045
tColorModHuman["$pp_colour_contrast"] = 1 + fear * 0.15
tColorModHuman["$pp_colour_colour"] = 1 - fear * 0.725 --0.85
DrawColorModify(tColorModHuman)
end
end
end
local matGlow = Material("Sprites/light_glow02_add_noz")
local colHealthEmpty = GM.AuraColorEmpty
local colHealthFull = GM.AuraColorFull
local colHealth = Color(255, 255, 255, 255)
local matPullBeam = Material("cable/rope")
local colPullBeam = Color(255, 255, 255, 255)
function GM:_PostDrawOpaqueRenderables()
if MySelf:Team() == TEAM_UNDEAD then
if self.Auras then
local eyepos = EyePos()
for _, pl in pairs(team_GetPlayers(TEAM_HUMAN)) do
if pl:Alive() and pl:GetPos():Distance(eyepos) <= pl:GetAuraRange() then
local healthfrac = math_max(pl:Health(), 0) / pl:GetMaxHealth()
colHealth.r = math_Approach(colHealthEmpty.r, colHealthFull.r, math_abs(colHealthEmpty.r - colHealthFull.r) * healthfrac)
colHealth.g = math_Approach(colHealthEmpty.g, colHealthFull.g, math_abs(colHealthEmpty.g - colHealthFull.g) * healthfrac)
colHealth.b = math_Approach(colHealthEmpty.b, colHealthFull.b, math_abs(colHealthEmpty.b - colHealthFull.b) * healthfrac)
--local attach = pl:GetAttachment(pl:LookupAttachment("chest")) -- This probably lagged so much.
--local pos = attach and attach.Pos or pl:WorldSpaceCenter()
local pos = pl:WorldSpaceCenter()
render_SetMaterial(matGlow)
render_DrawSprite(pos, 13, 13, colHealth)
local size = math_sin(self.HeartBeatTime + pl:EntIndex()) * 50 - 21
if size > 0 then
render_DrawSprite(pos, size * 1.5, size, colHealth)
render_DrawSprite(pos, size, size * 1.5, colHealth)
end
end
end
end
else
self:DrawCraftingEntity()
local holding = MySelf.status_human_holding
if holding and holding:IsValid() and holding:GetIsHeavy() then
local object = holding:GetObject()
if object:IsValid() then
local pullpos = holding:GetPullPos()
local hingepos = holding:GetHingePos()
local r, g, b = render_GetLightRGB(hingepos)
colPullBeam.r = r * 255
colPullBeam.g = g * 255
colPullBeam.b = b * 255
render_SetMaterial(matPullBeam)
render_DrawBeam(hingepos, pullpos, 0.5, 0, pullpos:Distance(hingepos) / 128, colPullBeam)
end
end
end
end
function GM:ToggleZombieVision(onoff)
if onoff == nil then
onoff = not self.m_ZombieVision
end
if onoff then
if not self.m_ZombieVision then
self.m_ZombieVision = true
MySelf:EmitSound("npc/stalker/breathing3.wav", 0, 230)
MySelf:SetDSP(5)
end
elseif self.m_ZombieVision then
self.m_ZombieVision = nil
MySelf:EmitSound("npc/zombie/zombie_pain6.wav", 0, 110)
MySelf:SetDSP(0)
end
end