mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
134 lines
2.7 KiB
Lua
134 lines
2.7 KiB
Lua
|
|
--[[
|
||
|
|
| 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()
|
||
|
|
|
||
|
|
--
|
||
|
|
-- This is designed so you can call it like
|
||
|
|
--
|
||
|
|
-- tauntcam = TauntCamera()
|
||
|
|
--
|
||
|
|
-- Then you have your own copy.
|
||
|
|
--
|
||
|
|
function TauntCamera()
|
||
|
|
|
||
|
|
local CAM = {}
|
||
|
|
|
||
|
|
local WasOn = false
|
||
|
|
|
||
|
|
local CustomAngles = angle_zero
|
||
|
|
local PlayerLockAngles = nil
|
||
|
|
|
||
|
|
local InLerp = 0
|
||
|
|
local OutLerp = 1
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Draw the local player if we're active in any way
|
||
|
|
--
|
||
|
|
CAM.ShouldDrawLocalPlayer = function( self, ply, on )
|
||
|
|
|
||
|
|
return on || OutLerp < 1
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Implements the third person, rotation view (with lerping in/out)
|
||
|
|
--
|
||
|
|
CAM.CalcView = function( self, view, ply, on )
|
||
|
|
|
||
|
|
if ( !ply:Alive() || !IsValid( ply:GetViewEntity() ) || ply:GetViewEntity() != ply ) then on = false end
|
||
|
|
|
||
|
|
if ( WasOn != on ) then
|
||
|
|
|
||
|
|
if ( on ) then InLerp = 0 end
|
||
|
|
if ( !on ) then OutLerp = 0 end
|
||
|
|
|
||
|
|
WasOn = on
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( !on && OutLerp >= 1 ) then
|
||
|
|
|
||
|
|
CustomAngles = view.angles * 1
|
||
|
|
CustomAngles.r = 0
|
||
|
|
PlayerLockAngles = nil
|
||
|
|
InLerp = 0
|
||
|
|
return
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( PlayerLockAngles == nil ) then return end
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Simple 3rd person camera
|
||
|
|
--
|
||
|
|
local TargetOrigin = view.origin - CustomAngles:Forward() * 100
|
||
|
|
local tr = util.TraceHull( { start = view.origin, endpos = TargetOrigin, mask = MASK_SHOT, filter = player.GetAll(), mins = Vector( -8, -8, -8 ), maxs = Vector( 8, 8, 8 ) } )
|
||
|
|
TargetOrigin = tr.HitPos + tr.HitNormal
|
||
|
|
|
||
|
|
if ( InLerp < 1 ) then
|
||
|
|
|
||
|
|
InLerp = InLerp + FrameTime() * 5.0
|
||
|
|
view.origin = LerpVector( InLerp, view.origin, TargetOrigin )
|
||
|
|
view.angles = LerpAngle( InLerp, PlayerLockAngles, CustomAngles )
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if ( OutLerp < 1 ) then
|
||
|
|
|
||
|
|
OutLerp = OutLerp + FrameTime() * 3.0
|
||
|
|
view.origin = LerpVector( 1-OutLerp, view.origin, TargetOrigin )
|
||
|
|
view.angles = LerpAngle( 1-OutLerp, PlayerLockAngles, CustomAngles )
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
view.angles = CustomAngles * 1
|
||
|
|
view.origin = TargetOrigin
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Freezes the player in position and uses the input from the user command to
|
||
|
|
-- rotate the custom third person camera
|
||
|
|
--
|
||
|
|
CAM.CreateMove = function( self, cmd, ply, on )
|
||
|
|
|
||
|
|
if ( !ply:Alive() ) then on = false end
|
||
|
|
if ( !on ) then return end
|
||
|
|
|
||
|
|
if ( PlayerLockAngles == nil ) then
|
||
|
|
PlayerLockAngles = CustomAngles * 1
|
||
|
|
end
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Rotate our view
|
||
|
|
--
|
||
|
|
CustomAngles.pitch = CustomAngles.pitch + cmd:GetMouseY() * 0.01
|
||
|
|
CustomAngles.yaw = CustomAngles.yaw - cmd:GetMouseX() * 0.01
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Lock the player's controls and angles
|
||
|
|
--
|
||
|
|
cmd:SetViewAngles( PlayerLockAngles )
|
||
|
|
cmd:ClearButtons()
|
||
|
|
cmd:ClearMovement()
|
||
|
|
|
||
|
|
return true
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
return CAM
|
||
|
|
|
||
|
|
end
|