aboutsummaryrefslogtreecommitdiff
path: root/gamemode/itemsystem/weapons_common.lua
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-01-08 22:28:08 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2017-01-08 22:28:08 -0500
commit98e0462e4f6b13ff26af5211409352d45dd9453e (patch)
treefbff14dc9a0fffdda409d9989f2e34cd4bb265f6 /gamemode/itemsystem/weapons_common.lua
parent4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 (diff)
downloadartery-98e0462e4f6b13ff26af5211409352d45dd9453e.tar.gz
artery-98e0462e4f6b13ff26af5211409352d45dd9453e.tar.bz2
artery-98e0462e4f6b13ff26af5211409352d45dd9453e.zip
Add a ton of icons, more work on refactoring
Diffstat (limited to 'gamemode/itemsystem/weapons_common.lua')
-rw-r--r--gamemode/itemsystem/weapons_common.lua70
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