adding wire lamp (don't remember who is the author)

This commit is contained in:
tad2020
2007-03-25 21:06:17 +00:00
parent d8b8aa8467
commit c2086113df
4 changed files with 373 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
include('shared.lua')
local matLight = Material( "sprites/light_ignorez" )
local matBeam = Material( "effects/lamp_beam" )
ENT.RenderGroup = RENDERGROUP_BOTH
function ENT:Initialize()
self.PixVis = util.GetPixelVisibleHandle()
end
/*---------------------------------------------------------
Name: Draw
---------------------------------------------------------*/
function ENT:Draw()
self.BaseClass.Draw( self )
Wire_Render(self.Entity)
end
/*---------------------------------------------------------
Name: DrawTranslucent
Desc: Draw translucent
---------------------------------------------------------*/
function ENT:DrawTranslucent()
local LightNrm = self.Entity:GetAngles():Up()
local ViewDot = EyeVector():Dot( LightNrm )
local r, g, b, a = self.Entity:GetColor()
local LightPos = self.Entity:GetPos() + LightNrm * -6
// glow sprite
/*
render.SetMaterial( matBeam )
local BeamDot = BeamDot = 0.25
render.StartBeam( 3 )
render.AddBeam( LightPos + LightNrm * 1, 128, 0.0, Color( r, g, b, 255 * BeamDot) )
render.AddBeam( LightPos - LightNrm * 100, 128, 0.5, Color( r, g, b, 64 * BeamDot) )
render.AddBeam( LightPos - LightNrm * 200, 128, 1, Color( r, g, b, 0) )
render.EndBeam()
*/
if ( ViewDot < 0 ) then return end
render.SetMaterial( matLight )
local Visibile = util.PixelVisible( LightPos, 16, self.PixVis )
local Size = math.Clamp( 512 * (1 - Visibile*ViewDot),128, 512 )
local Col = Color( r, g, b, 200*Visibile*ViewDot )
render.DrawSprite( LightPos, Size, Size, Col, Visibile * ViewDot )
end

View File

@@ -0,0 +1,104 @@
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
ENT.WireDebugName = "Lamp"
local MODEL = Model( "models/props_wasteland/prison_lamp001c.mdl" )
/*---------------------------------------------------------
Name: Initialize
---------------------------------------------------------*/
function ENT:Initialize()
self.Entity:SetModel( MODEL )
self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
self.Entity:SetSolid( SOLID_VPHYSICS )
self.flashlight = ents.Create("effect_flashlight")
self.flashlight:SetPos( self.Entity:GetPos() )
self.flashlight:SetAngles( self.Entity:GetAngles() )
self.flashlight:SetParent( self.Entity )
self.flashlight:SetColor( self.Entity:GetVar( "lightr", 255 ), self.Entity:GetVar( "lightg", 255 ), self.Entity:GetVar( "lightb", 255 ), 255 )
self.flashlight:Spawn()
local phys = self.Entity:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
end
self.r = self.Entity:GetVar( "lightr", 255 )
self.g = self.Entity:GetVar( "lightg", 255 )
self.b = self.Entity:GetVar( "lightb", 255 )
self.Inputs = Wire_CreateInputs(self.Entity, { "Red", "Green", "Blue" })
end
function ENT:Setup( r, g, b )
self:SetOverlayText( "Red:" .. r .. " Green:" .. g .. " Blue" .. b )
end
/*---------------------------------------------------------
Name: Sets the color of the light
---------------------------------------------------------*/
function ENT:SetLightColor( r, g, b )
self.Entity:SetVar( "lightr", r )
self.Entity:SetVar( "lightg", g )
self.Entity:SetVar( "lightb", b )
self.Entity:SetColor( r, g, b, 255 )
end
/*---------------------------------------------------------
Name: OnTakeDamage
---------------------------------------------------------*/
function ENT:OnTakeDamage( dmginfo )
self.Entity:TakePhysicsDamage( dmginfo )
end
/*---------------------------------------------------------
Name: Use
---------------------------------------------------------*/
function ENT:Use( activator, caller )
end
/*---------------------------------------------------------
Name: TriggerInput
Desc: the inputs
---------------------------------------------------------*/
function ENT:TriggerInput(iname, value)
if (iname == "Red") then
self.r = value
elseif (iname == "Green") then
self.g = value
elseif (iname == "Blue") then
self.b = value
end
self:SetLightColor( self.r, self.g, self.b)
self.flashlight:SetColor( self.Entity:GetVar( "lightr", 255 ), self.Entity:GetVar( "lightg", 255 ), self.Entity:GetVar( "lightb", 255 ), 255 )
self:SetOverlayText( "Red:" .. self.r .. " Green:" .. self.g .. " Blue" .. self.b )
end
function ENT:OnRemove()
Wire_Remove(self.Entity)
end
function ENT:OnRestore()
Wire_Restored(self.Entity)
end
include('shared.lua')

View File

@@ -0,0 +1,13 @@
ENT.Type = "anim"
ENT.Base = "base_gmodentity"
ENT.PrintName = ""
ENT.Author = ""
ENT.Contact = ""
ENT.Purpose = ""
ENT.Instructions = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false

View File

@@ -0,0 +1,196 @@
TOOL.Category = "Wire - Display"
TOOL.Name = "Lamps"
TOOL.Command = nil
TOOL.ConfigName = ""
if ( CLIENT ) then
language.Add( "Tool_wire_lamp_name", "Wire Lamps" )
language.Add( "Tool_wire_lamp_desc", "Spawns a lamp for use with the wire system." )
language.Add( "Tool_wire_lamp_0", "Primary: Create hanging lamp Secondary: Create unattached lamp" )
language.Add( "WireLampTool_RopeLength", "Rope Length:")
language.Add( "WireLampTool_Color", "Color:" )
language.Add( "SBoxLimit_wire_lamps", "You've hit the wire lamps limit!" )
language.Add( "undone_WireLamp", "Undone Wire Lamp" )
language.Add( "Cleanup_wire_lamp", "Wire Lamps" )
language.Add( "Cleaned_wire_lamp", "Cleaned up all Wire Lamps" )
end
if (SERVER) then
CreateConVar('sbox_maxwire_lamps', 10)
end
TOOL.ClientConVar[ "ropelength" ] = "64"
TOOL.ClientConVar[ "ropematerial" ] = "cable/rope"
TOOL.ClientConVar[ "r" ] = "255"
TOOL.ClientConVar[ "g" ] = "255"
TOOL.ClientConVar[ "b" ] = "255"
cleanup.Register( "wire_lamp" )
function TOOL:LeftClick( trace, attach )
if trace.Entity && trace.Entity:IsPlayer() then return false end
if (CLIENT) then return true end
if (attach == nil) then attach = true end
// If there's no physics object then we can't constraint it!
if ( SERVER && attach && !util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) ) then return false end
local ply = self:GetOwner()
local pos, ang = trace.HitPos + trace.HitNormal * 10, trace.HitNormal:Angle() - Angle( 90, 0, 0 )
local r = math.Clamp( self:GetClientNumber( "r" ), 0, 255 )
local g = math.Clamp( self:GetClientNumber( "g" ), 0, 255 )
local b = math.Clamp( self:GetClientNumber( "b" ), 0, 255 )
if trace.Entity:IsValid() &&
trace.Entity:GetClass() == "gmod_wire_lamp" &&
trace.Entity:GetTable():GetPlayer() == ply
then
trace.Entity:GetTable():SetLightColor( r, g, b )
trace.Entity:GetTable().r = r
trace.Entity:GetTable().g = g
trace.Entity:GetTable().b = b
return true
end
if ( !self:GetSWEP():CheckLimit( "wire_lamps" ) ) then return false end
wire_lamp = MakeWireLamp( ply, pos, ang, r, g, b )
if (!attach) then
undo.Create("WireLamp")
undo.AddEntity( wire_lamp )
undo.SetPlayer( self:GetOwner() )
undo.Finish()
return true
end
local length = self:GetClientNumber( "ropelength" )
local material = self:GetClientInfo( "ropematerial" )
local LPos1 = Vector( 0, 0, 5 )
local LPos2 = trace.Entity:WorldToLocal( trace.HitPos )
if (trace.Entity:IsValid()) then
local phys = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone )
if (phys:IsValid()) then
LPos2 = phys:WorldToLocal( trace.HitPos )
end
end
local constraint, rope = constraint.Rope( wire_lamp, trace.Entity,
0, trace.PhysicsBone,
LPos1, LPos2,
0, length,
0,
1.5,
material,
nil )
undo.Create("WireLamp")
undo.AddEntity( wire_lamp )
undo.AddEntity( rope )
undo.AddEntity( constraint )
undo.SetPlayer( ply )
undo.Finish()
return true
end
function TOOL:RightClick( trace )
return self:LeftClick( trace, false )
end
function MakeWireLamp( pl, Pos, Ang, r, g, b, Vel, aVel, frozen )
if ( !pl:CheckLimit( "wire_lamps" ) ) then return false end
local wire_lamp = ents.Create( "gmod_wire_lamp" )
if (!wire_lamp:IsValid()) then return end
wire_lamp:SetPos( Pos )
wire_lamp:SetAngles( Ang )
wire_lamp:GetTable():SetLightColor( r, g, b )
wire_lamp:Spawn()
wire_lamp:Setup( r, g, b )
wire_lamp:GetTable():SetPlayer( pl )
if (wire_lamp:GetPhysicsObject():IsValid()) then
Phys = wire_lamp:GetPhysicsObject()
if Vel then Phys:SetVelocity(Vel) end
if Vel then Phys:AddAngleVelocity(aVel) end
Phys:EnableMotion(frozen != true)
end
pl:AddCount( "wire_lamps", wire_lamp )
pl:AddCleanup( "wire_lamp", wire_lamp )
return wire_lamp
end
duplicator.RegisterEntityClass( "gmod_wire_lamp", MakeWireLamp, "Pos", "Ang", "lightr", "lightg", "lightb", "Vel", "aVel", "frozen" )
function TOOL.BuildCPanel(panel)
panel:AddControl("Header", { Text = "#Tool_wire_lamp_name", Description = "#Tool_wire_lamp_desc" })
panel:AddControl("ComboBox", {
Label = "#Presets",
MenuButton = "1",
Folder = "wire_lamp",
Options = {
["#Default"] = {
wire_lamp_ropelength = "64",
wire_lamp_ropematerial = "cable/rope",
wire_lamp_r = "0",
wire_lamp_g = "0",
wire_lamp_b = "0"
}
},
CVars = {
[0] = "wire_lamp_ropelength",
[1] = "wire_lamp_ropematerial",
[2] = "wire_lamp_r",
[3] = "wire_lamp_g",
[4] = "wire_lamp_b",
}
})
panel:AddControl("Slider", {
Label = "#WireLampTool_RopeLength",
Type = "Float",
Min = "4",
Max = "400",
Command = "wire_lamp_ropelength"
})
panel:AddControl("Color", {
Label = "#WireLampTool_Color",
Red = "wire_lamp_r",
Green = "wire_lamp_g",
Blue = "wire_lamp_b",
ShowAlpha = "0",
ShowHSV = "1",
ShowRGB = "1",
Multiplier = "255"
})
end
TOOL.ClientConVar[ "ropelength" ] = "64"
TOOL.ClientConVar[ "ropematerial" ] = "cable/rope"
TOOL.ClientConVar[ "r" ] = "255"
TOOL.ClientConVar[ "g" ] = "255"
TOOL.ClientConVar[ "b" ] = "255"