Files
wnsrc/lua/entities/base_light.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

264 lines
5.6 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()
DEFINE_BASECLASS( "base_anim" )
ENT.Spawnable = false
ENT.DisableDuplicator = false
ENT.Editable = true
ENT.Author = "tau"
ENT.Contact = "http://steamcommunity.com/id/blue_orng/"
ENT.Category = "Render"
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
util.PrecacheModel( "models/error.mdl" )
function ENT:ColorC( val )
return math.Clamp( math.Round( val ), 0, 255 )
end
function ENT:ColorToString( rgb )
return tostring( self:ColorC( rgb.r ) ).." "..tostring( self:ColorC( rgb.g ) ).." "..tostring( self:ColorC( rgb.b ) )
end
function ENT:ColorIntensityToString( rgb, i )
local i_int = math.Round( i )
if ( i_int < 1 ) then return "0 0 0 0" end
return self:ColorToString( rgb ).." "..tostring( i_int )
end
function ENT:BoolToString( b )
if ( b ) then
return "1"
else
return "0"
end
end
function ENT:VectorToColor( vec )
return Color( self:ColorC( vec.x ), self:ColorC( vec.y ), self:ColorC( vec.z ) )
end
if ( SERVER ) then
function ENT:Initialize()
self:SetModel( "models/error.mdl" )
self:SetRenderMode( RENDERMODE_TRANSALPHA )
self:DrawShadow( false )
local min, max = Vector( -2, -2, -2 ), Vector( 2, 2, 2 )
self:PhysicsInitBox( min, max )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetCollisionGroup( COLLISION_GROUP_WORLD )
self:SetCollisionBounds( min, max )
local physobj = self:GetPhysicsObject()
if ( IsValid( physobj ) ) then
physobj:EnableGravity( false )
physobj:Wake()
end
end
function ENT:material_tool( ply, trace )
if ( not IsValid( ply ) ) then return end
local wep = ply:GetActiveWeapon()
if ( ( not IsValid( wep ) ) or ( wep:GetClass() ~= "gmod_tool" ) or ( wep.Mode ~= "material" ) ) then return end
local toolobj = wep.Tool[ "material" ]
if ( not toolobj ) then return end
if ( ply:KeyPressed( IN_ATTACK ) ) then
local texname = "effects/flashlight001"
local matname = toolobj:GetClientInfo( "override" )
if ( isstring( matname ) ) then
local mat = Material( matname )
if ( ( mat ) and ( not mat:IsError() ) ) then
local shader = mat:GetShader()
if ( isstring( shader ) and ( string.lower( string.sub( shader, 1, 7 ) ) == "refract" ) ) then
texname = mat:GetString( "$refracttinttexture" )
else
texname = mat:GetString( "$basetexture" )
end
if ( not isstring( texname ) ) then texname = "effects/flashlight001" end
end
end
self:SetLightTexture( texname )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
elseif ( ply:KeyPressed( IN_ATTACK2 ) ) then
self:SetLightTexture( "effects/flashlight001" )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
end
end
function ENT:lamp_tool( ply, trace )
if ( not IsValid( ply ) ) then return end
local wep = ply:GetActiveWeapon()
if ( ( not IsValid( wep ) ) or ( wep:GetClass() ~= "gmod_tool" ) or ( wep.Mode ~= "lamp" ) ) then return end
local toolobj = wep.Tool[ "lamp" ]
if ( not toolobj ) then return end
if ( ply:KeyPressed( IN_ATTACK ) ) then
local texname = "effects/flashlight001"
local matname = toolobj:GetClientInfo( "texture" )
if ( isstring( matname ) ) then
local mat = Material( matname )
if ( ( mat ) and ( not mat:IsError() ) ) then
texname = mat:GetString( "$basetexture" )
if ( not isstring( texname ) ) then texname = "effects/flashlight001" end
end
end
self:SetLightTexture( texname )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
end
end
function ENT:colour_tool( ply, trace )
if ( not IsValid( ply ) ) then return end
local wep = ply:GetActiveWeapon()
if ( ( not IsValid( wep ) ) or ( wep:GetClass() ~= "gmod_tool" ) or ( wep.Mode ~= "colour" ) ) then return end
local toolobj = wep.Tool[ "colour" ]
if ( not toolobj ) then return end
if ( ply:KeyPressed( IN_ATTACK ) ) then
self:SetLightColor( Vector( toolobj:GetClientNumber( "r", 255 ), toolobj:GetClientNumber( "g", 255 ), toolobj:GetClientNumber( "b", 255 ) ) )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
elseif ( ply:KeyPressed( IN_ATTACK2 ) ) then
self:SetLightColor( Vector( 255, 255, 255 ) )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
end
end
function ENT:light_tool( ply, trace )
if ( not IsValid( ply ) ) then return end
local wep = ply:GetActiveWeapon()
if ( ( not IsValid( wep ) ) or ( wep:GetClass() ~= "gmod_tool" ) or ( wep.Mode ~= "light" ) ) then return end
local toolobj = wep.Tool[ "light" ]
if ( not toolobj ) then return end
if ( ply:KeyPressed( IN_ATTACK ) or ply:KeyPressed( IN_ATTACK2 ) ) then
self:SetLightColor( Vector( toolobj:GetClientNumber( "r", 255 ), toolobj:GetClientNumber( "g", 255 ), toolobj:GetClientNumber( "b", 255 ) ) )
wep:DoShootEffect( trace.HitPos, trace.HitNormal, self, trace.PhysicsBone, IsFirstTimePredicted() )
end
end
end
if ( CLIENT ) then
ENT.c_r = Color( 255, 0, 0, 255 )
ENT.c_c = Color( 0, 255, 255, 255 )
ENT.c_g = Color( 0, 255, 0, 255 )
ENT.c_m = Color( 255, 0, 255, 255 )
ENT.c_b = Color( 0, 0, 255, 255 )
ENT.c_y = Color( 255, 255, 0, 255 )
function ENT:Camera()
local wep = LocalPlayer():GetActiveWeapon()
return IsValid( wep ) and ( wep:GetClass() == "gmod_camera" )
end
end