1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
--This file has been moved to core/inventory/common/weapons.lua
do return end
ART = ART or {}
--- Finds the direction a player is moveing.
-- @param player The player to find the move direction of
-- @return The string "forward", "backward", "right", or "left"
function ART.playermovedir(player)
local vel = player:GetVelocity():GetNormalized()
vel.z = 0
local swings = {
{player:GetForward(),"forward"},
{-player:GetForward(),"backward"},
{player:GetRight(),"right"},
{-player:GetRight(),"left"}
}
table.sort(swings,function(a,b)
return vel:Dot(a[1]) > vel:Dot(b[1])
end)
return swings[1][2]
end
local positionset = {}
--- The arc swing of a weapon.
-- Finds anything that a weapon should hit in it's swing, and calls a function on it.
-- @param player The player that's swinging the weapon
-- @param tiems A table of times that the trace calculations should be done at, this table needs to be the same length as the positions table
-- @param positions The position offsets from the player that swung that should be the start/end points of the arc
-- @param onhit A function to call on any entities that were hit in the swing of the weapon.
function ART.swingarc(player,times,positions,onhit)
local positionpoints = {}
table.insert(positionset,positionpoints)
for k,v in ipairs(times) do
timer.Simple(v,function()
ART.TraceWeapon = true
ART.TraceStart = CurTime()
print("positions[k]",positions[k],"playerpos",player:GetPos(),"add",Vector(0,0,64))
local weaponpos = positions[k] + player:GetPos() + Vector(0,0,64)
table.insert(positionpoints,weaponpos)
if #positionpoints > 1 then
--print("Trace from ", positionpoints[#positionpoints-1], " to ", positionpoints[#positionpoints])
local tr = util.TraceLine({
start = positionpoints[#positionpoints-1],
endpos = positionpoints[#positionpoints],
})
onhit(tr)
end
end)
end
timer.Simple(times[#times],function()
print("Inserted swing, drawn positions are now:")
PrintTable(positionset)
ART.TraceWeapon = false
end)
end
hook.Add( "HUDPaint", "weaponswings", function()
cam.Start3D() -- Start the 3D function so we can draw onto the screen.
for k,v in pairs(positionset) do
for i = 1,#v-1 do
render.DrawLine( v[i], v[i+1], Color(255,0,0,255), false )
render.DrawLine( v[i], v[i]+Vector(0,0,20),Color(0,255,0,255),false)
end
end
--render.SetMaterial( material ) -- Tell render what material we want, in this case the flash from the gravgun
--render.DrawSprite( pos, 16, 16, white ) -- Draw the sprite in the middle of the map, at 16x16 in it's original colour with full alpha.
cam.End3D()
end )
return wcommon
|