add sborka
This commit is contained in:
139
garrysmod/gamemodes/helix/plugins/act/cl_hooks.lua
Normal file
139
garrysmod/gamemodes/helix/plugins/act/cl_hooks.lua
Normal file
@@ -0,0 +1,139 @@
|
||||
|
||||
local animationTime = 2
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
PLUGIN.cameraFraction = 0
|
||||
|
||||
local function GetHeadBone(client)
|
||||
local head
|
||||
|
||||
for i = 1, client:GetBoneCount() do
|
||||
local name = client:GetBoneName(i)
|
||||
|
||||
if (string.find(name:lower(), "head")) then
|
||||
head = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
return head
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerBindPress(client, bind, bPressed)
|
||||
if (!client:GetNetVar("actEnterAngle")) then
|
||||
return
|
||||
end
|
||||
|
||||
if (bind:find("+jump") and bPressed) then
|
||||
ix.command.Send("ExitAct")
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:ShouldDrawLocalPlayer(client)
|
||||
if (client:GetNetVar("actEnterAngle") and self.cameraFraction > 0.25) then
|
||||
return true
|
||||
elseif (self.cameraFraction > 0.25) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local forwardOffset = 16
|
||||
local backwardOffset = -32
|
||||
local heightOffset = Vector(0, 0, 20)
|
||||
local idleHeightOffset = Vector(0, 0, 6)
|
||||
local traceMin = Vector(-4, -4, -4)
|
||||
local traceMax = Vector(4, 4, 4)
|
||||
|
||||
function PLUGIN:CalcView(client, origin)
|
||||
local enterAngle = client:GetNetVar("actEnterAngle")
|
||||
local fraction = self.cameraFraction
|
||||
local offset = self.bIdle and forwardOffset or backwardOffset
|
||||
local height = self.bIdle and idleHeightOffset or heightOffset
|
||||
|
||||
if (!enterAngle) then
|
||||
if (fraction > 0) then
|
||||
local view = {
|
||||
origin = LerpVector(fraction, origin, origin + self.forward * offset + height)
|
||||
}
|
||||
|
||||
if (self.cameraTween) then
|
||||
self.cameraTween:update(FrameTime())
|
||||
end
|
||||
|
||||
return view
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
local view = {}
|
||||
local forward = enterAngle:Forward()
|
||||
local head = GetHeadBone(client)
|
||||
|
||||
local bFirstPerson = true
|
||||
|
||||
if (ix.option.Get("thirdpersonEnabled", false)) then
|
||||
local originPosition = head and client:GetBonePosition(head) or client:GetPos()
|
||||
|
||||
-- check if the camera will hit something
|
||||
local data = util.TraceHull({
|
||||
start = originPosition,
|
||||
endpos = originPosition - client:EyeAngles():Forward() * 48,
|
||||
mins = traceMin * 0.75,
|
||||
maxs = traceMax * 0.75,
|
||||
filter = client
|
||||
})
|
||||
|
||||
bFirstPerson = data.Hit
|
||||
|
||||
if (!bFirstPerson) then
|
||||
view.origin = data.HitPos
|
||||
end
|
||||
end
|
||||
|
||||
if (bFirstPerson) then
|
||||
if (head) then
|
||||
local position = client:GetBonePosition(head) + forward * offset + height
|
||||
local data = {
|
||||
start = (client:GetBonePosition(head) or Vector(0, 0, 64)) + forward * 8,
|
||||
endpos = position + forward * offset,
|
||||
mins = traceMin,
|
||||
maxs = traceMax,
|
||||
filter = client
|
||||
}
|
||||
|
||||
data = util.TraceHull(data)
|
||||
|
||||
if (data.Hit) then
|
||||
view.origin = data.HitPos
|
||||
else
|
||||
view.origin = position
|
||||
end
|
||||
else
|
||||
view.origin = origin + forward * forwardOffset + height
|
||||
end
|
||||
end
|
||||
|
||||
view.origin = LerpVector(fraction, origin, view.origin)
|
||||
|
||||
if (self.cameraTween) then
|
||||
self.cameraTween:update(FrameTime())
|
||||
end
|
||||
|
||||
return view
|
||||
end
|
||||
|
||||
net.Receive("ixActEnter", function()
|
||||
PLUGIN.bIdle = net.ReadBool()
|
||||
PLUGIN.forward = LocalPlayer():GetNetVar("actEnterAngle"):Forward()
|
||||
PLUGIN.cameraTween = ix.tween.new(animationTime, PLUGIN, {
|
||||
cameraFraction = 1
|
||||
}, "outQuint")
|
||||
end)
|
||||
|
||||
net.Receive("ixActLeave", function()
|
||||
PLUGIN.cameraTween = ix.tween.new(animationTime * 0.5, PLUGIN, {
|
||||
cameraFraction = 0
|
||||
}, "outQuint")
|
||||
end)
|
||||
Reference in New Issue
Block a user