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