Files
wnsrc/lua/entities/portals_base.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

159 lines
3.8 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/
--]]
AddCSLuaFile()
ENT.Base = "base_anim"
ENT.Type = "anim"
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
ENT.Model = Model("models/effects/intro_vortshield.mdl")
ENT.Mins = Vector(-25, -25, -25)
ENT.Maxs = Vector(25, 25, 25)
function ENT:Initialize()
self:SetModel(self.Model)
self:DrawShadow(false)
if SERVER then
self:PhysicsInitBox(self.Mins, self.Maxs)
self:SetMoveType(MOVETYPE_NONE)
self:SetTrigger(true)
end
self:SetCollisionGroup(COLLISION_GROUP_WORLD)
end
function ENT:GetCustomColor()
return color_white
end
if CLIENT then
local lightsEnabled = GetConVar("portals_lights_enabled")
local lightsRange = GetConVar("portals_lights_range")
function ENT:ShouldDoLight() -- Convar
if not lightsEnabled:GetBool() then
return false
end
local range = lightsRange:GetFloat() * lightsRange:GetFloat()
return not self:IsDormant() and EyePos():DistToSqr(self:GetPos()) < range
end
function ENT:Think()
local color = self:GetCustomColor()
if self:GetColor() != color then
self:SetColor(color)
end
if self:ShouldDoLight() then
local light = DynamicLight(self:EntIndex())
if light then
light.pos = self:GetPos()
light.r = color.r
light.g = color.g
light.b = color.b
light.brightness = 2
light.Decay = 1000
light.Size = 128
light.DieTime = CurTime() + 1
end
end
self:RemoveAllDecals()
end
local developer = GetConVar("developer")
local sprite = Material("sprites/light_glow02_add")
function ENT:DrawTranslucent()
if developer:GetBool() then
local mins = self.Mins - Vector(0.1, 0.1, 0.1)
local maxs = self.Maxs + Vector(0.1, 0.1, 0.1)
local color = ColorAlpha(self:GetCustomColor(), 50)
render.SetColorMaterial()
render.DrawBox(self:GetPos(), self:GetNetworkAngles(), mins, maxs, color, true)
render.DrawWireframeBox(self:GetPos(), self:GetNetworkAngles(), mins, maxs, color, true)
render.DrawLine(self:GetPos(), self:GetPos() + self:GetForward() * 50, self:GetCustomColor(), true)
end
render.OverrideBlend(true, BLEND_ZERO, BLEND_ONE_MINUS_SRC_COLOR, BLENDFUNC_ADD)
render.SetMaterial(sprite)
render.DrawSprite(self:GetPos(), 150, 150)
render.OverrideBlend(false)
local ang = (EyePos() - self:GetPos()):Angle()
self:SetRenderAngles(ang)
self:SetupBones()
self:DrawModel()
self:DrawModel()
end
else
local allowSound = GetConVar("portals_allow_custom_sounds")
local defaultSound = GetConVar("portals_default_sound")
local extendedWhitelist = GetConVar("portals_extended_whitelist")
function ENT:TeleportEffect(ent)
if not ent then
ent = self
end
local snd = defaultSound:GetString()
if allowSound:GetBool() and self.GetTeleportSound then
snd = self:GetTeleportSound()
end
if snd == "" then
return
end
ent:EmitSound(snd, 75, 100, 0.5)
end
function ENT:IsValidEntity(ent)
if ent:IsPlayer() then
return ent:GetMoveType() != MOVETYPE_NOCLIP
end
if not extendedWhitelist:GetBool() and not ent:IsNPC() then
return false
end
local phys = ent:GetPhysicsObject()
if IsValid(phys) and not phys:IsMotionEnabled() then
return false
end
local class = ent:GetClass()
if string.find(class, "prop_dynamic") then return false end
if string.find(class, "prop_door") then return false end
if class == "func_physbox" and ent:HasSpawnFlags(SF_PHYSBOX_MOTIONDISABLED) then return false end
if string.find(class, "prop_") and (ent:HasSpawnFlags(SF_PHYSPROP_MOTIONDISABLED) or ent:HasSpawnFlags(SF_PHYSPROP_PREVENT_PICKUP)) then return false end
if class != "func_physbox" and string.find(class, "func_") then return false end
return true
end
end