Benny/gamemodes/benny/gamemode/camera.lua

83 lines
2.1 KiB
Lua
Raw Normal View History

2024-03-07 20:34:16 -05:00
---------------------
-- Your Name is Benny
---------------------
2024-08-30 18:30:03 -04:00
local cam_f = CreateConVar( "b-cam_f", -75 )
2024-04-06 09:30:09 -04:00
local cam_r = CreateConVar( "b-cam_r", 12 )
2024-03-07 21:19:30 -05:00
local cam_u = CreateConVar( "b-cam_u", 0 )
local cam_fov = CreateConVar( "b-cam_fov", 75 )
2024-03-07 22:34:29 -05:00
local m = 3
2024-03-07 21:19:30 -05:00
local m2 = Vector( m, m, m )
local m1 = m2:GetNegated()
2024-04-06 09:30:09 -04:00
TPSOverride = TPSOverride or Angle( 0, 0, 0 )
2024-03-07 21:19:30 -05:00
2024-04-06 09:30:09 -04:00
function CamSpot( ang, pos )
if !ang then ang = TPSOverride end
if !pos then pos = LocalPlayer():EyePos() end
local f, r, u = TPSOverride:Forward(), TPSOverride:Right(), TPSOverride:Up()
2024-03-07 21:19:30 -05:00
local tr = {
start = pos,
endpos = pos + (f*cam_f:GetFloat()) + (r*cam_r:GetFloat()) + (u*cam_u:GetFloat()),
2024-04-07 19:04:18 -04:00
filter = LocalPlayer(), -- ply,
2024-03-07 21:19:30 -05:00
mins = m1,
maxs = m2,
}
tr = util.TraceHull(tr)
2024-04-06 09:30:09 -04:00
return tr.HitPos
end
2024-03-07 21:19:30 -05:00
2024-04-06 09:30:09 -04:00
function GM:CalcView( ply, pos, ang, fov )
2024-03-07 20:34:16 -05:00
local view = {
2024-04-06 09:30:09 -04:00
origin = CamSpot(TPSOverride), -- pos includes the smoothstair offset which looks stupid here
angles = TPSOverride,
2024-03-07 21:19:30 -05:00
fov = cam_fov:GetFloat(),
2024-03-07 20:34:16 -05:00
drawviewer = true
}
2024-03-07 21:19:30 -05:00
2024-03-07 20:34:16 -05:00
return view
2024-04-06 09:30:09 -04:00
end
hook.Add( "InputMouseApply", "Benny_InputMouseApply", function( cmd, x, y, ang )
local p = LocalPlayer()
local w = p:HandlerCheck()
if w then--and (y!=0 or x!=0) then
if x != 0 then
TPSOverride.y = TPSOverride.y + (-x*0.022)
end
if y != 0 then
TPSOverride.p = math.Clamp( TPSOverride.p + (y*0.022), -80, 80 )
end
return true
end
end)
hook.Add("CreateMove", "Benny_CreateMove_Camera", function( cmd )
local p = LocalPlayer()
if p:GetMoveType() == MOVETYPE_NOCLIP then
cmd:SetViewAngles( TPSOverride )
else
local tr_forward = util.TraceLine( {
start = CamSpot(TPSOverride),
endpos = CamSpot(TPSOverride)+(TPSOverride:Forward()*(2^16)),
filter = p,
mask = MASK_SHOT,
} )
local planner = (tr_forward.HitPos-p:EyePos()):Angle()
planner:Normalize()
cmd:SetViewAngles( planner )
local moveintent = Vector( cmd:GetForwardMove(), cmd:GetSideMove(), 0 )
local fixang = Angle()
fixang.y = cmd:GetViewAngles().y - TPSOverride.y
moveintent:Rotate( fixang )
cmd:SetForwardMove( moveintent.x )
cmd:SetSideMove( moveintent.y )
end
end)