Files
wnsrc/addons/pillpack/lua/effects/warp_cannon.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

64 lines
2.2 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
--Most of the credit for this goes to the people who made/helped with the strider cannon SWEP:
-- http://www.garrysmod.org/downloads/?a=view&id=31329
local flashMat = Material("Effects/blueblackflash")
local pinchMat = Material("Effects/strider_pinch_dudv")
local beamMat = Material("Effects/blueblacklargebeam")
function EFFECT:Init(effectdata)
self.ent = effectdata:GetEntity()
self.hitPos = effectdata:GetOrigin()
self.startTime = CurTime()
self.cycle = 0
end
function EFFECT:Think()
if not IsValid(self.ent) then return false end
self:SetPos(self.ent:GetAttachment(self.ent:GetModel() == "models/combine_strider.mdl" and self.ent:LookupAttachment("BigGun") or self.ent:LookupAttachment("bellygun")).Pos)
self:SetRenderBoundsWS(self:GetPos(), self.hitPos)
if CurTime() - self.startTime > 2.4 then return false end
return true
end
function EFFECT:Render()
local cycleF = (CurTime() - self.startTime) / 1.2
--flash
render.SetMaterial(flashMat)
if cycleF < .5 then
render.DrawSprite(self:GetPos(), cycleF * 100, cycleF * 100, Color(0, 0, 0, 255))
elseif cycleF < 1 then
render.DrawSprite(self:GetPos(), cycleF * 100, cycleF * 100, Color(cycleF * 255, cycleF * 255, cycleF * 255, 255))
else
render.DrawSprite(self:GetPos(), 50, 50, Color(255, 255, 255, 255))
end
if cycleF < 1 then
--pinch
pinchMat:SetFloat("$refractamount", cycleF)
render.SetMaterial(pinchMat)
render.UpdateRefractTexture()
render.DrawSprite(self:GetPos(), cycleF * 150, cycleF * 150)
--Beam
if cycleF > .5 then
render.SetMaterial(beamMat)
render.DrawBeam(self:GetPos(), self.hitPos, cycleF * 2, 0, 0, Color(255, 255, 255, (cycleF - .5) * 255))
end
elseif cycleF < 1.1 then
--fired beam
render.SetMaterial(beamMat)
render.DrawBeam(LerpVector((cycleF - 1) * 10, self:GetPos(), self.hitPos), self.hitPos, (cycleF - 1) * 500, 0, 0)
end
end