Files
wnsrc/lua/weapons/sf2_tool/cl_init.lua

231 lines
5.9 KiB
Lua
Raw Normal View History

2024-08-05 18:40:29 +03:00
--[[
| 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/
--]]
--[[-------------------------------------------------------------------------
Point and click
---------------------------------------------------------------------------]]
include("shared.lua")
if ( SERVER ) then
SWEP.AutoSwitchTo = false
SWEP.AutoSwitchFrom = false
end
function SWEP:PrimaryAttack()
if not game.SinglePlayer() and not IsFirstTimePredicted() then return end
local tool = self:GetTool()
if not tool or not tool.LeftClick then return end
tool.LeftClick(tool, self:GetOwner():GetEyeTrace())
end
function SWEP:SecondaryAttack()
if not game.SinglePlayer() and not IsFirstTimePredicted() then return end
local tool = self:GetTool()
if not tool or not tool.RightClick then return end
tool.RightClick(tool, self:GetOwner():GetEyeTrace())
end
function SWEP:Holster()
self:RemoveGhost()
return true
end
function SWEP:OnRemove()
self:RemoveGhost()
return true
end
local oldTool = -1
function SWEP:Think()
local tool_id = self:GetToolID()
if tool_id ~= oldTool then
self:RemoveGhost()
oldTool = tool_id
self:SetTool(tool_id)
end
end
local ghostHalo
function SWEP:SetGhost(mdl, pos, ang)
-- Remove ghost if nil mdl
if not mdl then
if self._ghost and IsValid(self._ghost) then
self._ghost:Remove()
self._ghost = nil
end
return
end
-- Make ghost or set mdl
if not self._ghost or not IsValid(self._ghost) then
self._ghost = ClientsideModel(mdl, RENDERMODE_TRANSCOLOR )
ghostHalo = nil
elseif self._ghost:GetModel() ~= mdl then
self._ghost:SetModel(mdl)
end
-- Move ghost
if pos then
self._ghost:SetPos(pos)
end
if ang then
self._ghost:SetAngles(ang)
end
return self._ghost
end
function SWEP:SetGhostHalo(col)
ghostHalo = col
end
function SWEP:RemoveGhost()
self:SetGhost()
end
-- Context menu
do
local v = false
hook.Add("OnContextMenuOpen", "StormFox2.Tool.COpen", function()
v = true
end)
hook.Add("OnContextMenuClose", "StormFox2.Tool.CClose", function()
v = false
end)
function SWEP:IsContextMenuOpen()
return v
end
end
hook.Add("PreDrawHalos", "StormFox2.GhostHalo", function()
local wep = LocalPlayer():GetActiveWeapon()
if not wep or not IsValid(wep) then return end
if wep:GetClass() ~= "sf2_tool" then return end
if not IsValid(wep._ghost) then return end
if not ghostHalo then return end
halo.Add( {wep._ghost}, ghostHalo, 5, 5, 2 )
end)
SWEP.WepSelectIcon = surface.GetTextureID( "vgui/gmod_camera" )
-- Don't draw the weapon info on the weapon selection thing
function SWEP:DrawHUD() end
function SWEP:PrintWeaponInfo( x, y, alpha ) end
--[[-------------------------------------------------------------------------
function SWEP:CalcView(ply,pos,ang,fov)
--pos = pos + ang:Forward() * -50
return pos,ang,fov
end
---------------------------------------------------------------------------]]
-- Unstable screen
function SWEP:_GetScreenUN()
return self._unstable or 0.2
end
function SWEP:_SetScreenUN( n )
self._unstable = n
end
-- Render screen
local matScreen = Material( "stormfox2/weapons/sf_tool_screen" )
local bgMat = Material("stormfox2/logo.png")
local sMat = Material("effects/tvscreen_noise002a")
local rMat = Material("gui/r.png")
do
local ScreenSize = 256
local RTTexture = GetRenderTarget( "SFToolgunScreen", ScreenSize, ScreenSize )
function SWEP:RenderToolScreen()
local TEX_SIZE = ScreenSize
-- Set up our view for drawing to the texture
--cam.IgnoreZ(true)
render.PushRenderTarget( RTTexture )
render.ClearDepth()
render.Clear( 0, 0, 0, 0 )
cam.Start2D()
-- Draw Screen
local tool = self:GetTool()
if not tool then
surface.SetDrawColor(color_white)
surface.SetMaterial(bgMat)
surface.DrawTexturedRect(TEX_SIZE * 0.1,TEX_SIZE * 0.1,TEX_SIZE * 0.8,TEX_SIZE * 0.8)
surface.SetMaterial(rMat)
if math.Round(CurTime()%2) ~= 0 then
surface.DrawTexturedRect(20,TEX_SIZE - 60,40,40)
end
else
if not tool.NoPrintName then
draw.DrawText(tool.PrintName or "Unknown", "sf_tool_large", TEX_SIZE / 2, 10, color_white, TEXT_ALIGN_CENTER)
end
if tool.ScreenRender then
tool:ScreenRender( TEX_SIZE, TEX_SIZE )
end
end
-- surface.SetMaterial(sMat)
-- surface.DrawTexturedRect(TEX_SIZE * 0.1,TEX_SIZE * 0.1,TEX_SIZE * 0.8,TEX_SIZE * 0.8)
if self:_GetScreenUN() > 0.15 then
surface.SetDrawColor(color_white)
surface.SetMaterial(sMat)
surface.DrawTexturedRect(0,0,TEX_SIZE * 2,TEX_SIZE * 2)
end
cam.End2D()
render.PopRenderTarget()
matScreen:SetTexture( "$basetexture", RTTexture )
matScreen:SetFloat("$shake", self:_GetScreenUN())
--cam.IgnoreZ(false)
end
end
local mTool = Material("stormfox2/weapons/sf_tool")
function SWEP:PreDrawViewModel()
if self:_GetScreenUN() > 0 then
self:_SetScreenUN( math.max(0, self:_GetScreenUN() - FrameTime() * 0.6) )
end
self:RenderToolScreen()
render.MaterialOverrideByIndex(1,matScreen)
render.MaterialOverrideByIndex(2,mTool)
end
function SWEP:PostDrawViewModel()
render.MaterialOverrideByIndex()
local tool = self:GetTool()
if not tool then return end
-- Render
if tool.Render then
cam.Start3D()
tool:Render()
cam.End3D()
end
end
-- CL swep rendering
function SWEP:CalcViewModelView( vm, _,_,pos, ang)
end
function SWEP:Deploy()
self:_SetScreenUN( 0.2 )
end
function SWEP:DrawWorldModel()
local Owner = self:GetOwner()
if IsValid(Owner) and Owner ~= LocalPlayer() then
self:_SetScreenUN( 0 )
elseif self:_GetScreenUN() < 0.4 then
self:_SetScreenUN( math.min(0.4, self:_GetScreenUN() + FrameTime() * 0.2) )
end
self:RenderToolScreen()
render.MaterialOverrideByIndex(1,matScreen)
render.MaterialOverrideByIndex(2,mTool)
self:DrawModel()
render.MaterialOverrideByIndex()
end