diff options
Diffstat (limited to 'gamemode/itemsystem/weapons_common.lua')
| -rw-r--r-- | gamemode/itemsystem/weapons_common.lua | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gamemode/itemsystem/weapons_common.lua b/gamemode/itemsystem/weapons_common.lua new file mode 100644 index 0000000..6f553fa --- /dev/null +++ b/gamemode/itemsystem/weapons_common.lua @@ -0,0 +1,70 @@ + +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 |
