mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
263
lua/entities/base_light.lua
Normal file
263
lua/entities/base_light.lua
Normal file
@@ -0,0 +1,263 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user