trigenometry gun prototype

This commit is contained in:
Kistaro Windrider 2025-06-01 16:48:39 -07:00
parent fc1f84fa28
commit 2fdb8d1a05
Signed by: kistaro
SSH Key Fingerprint: SHA256:TBE2ynfmJqsAf0CP6gsflA0q5X5wD5fVKWPsZ7eVUg8

View File

@ -874,6 +874,54 @@ function gun_base:shoot(x, y)
return true return true
end end
trig_gun = mknew(gun_base.new{
veloc = 1,
aim = 0.25, --use 0.75 for a player gun
shot_idx = 0,
-- shots: list<list<[3]num>>
-- describing a cycling
-- firing pattern. shot_idx
-- tracks offset into pattern.
-- each nested list: a burst
-- of shots to fire; takes
-- 1 ammo; sequential
-- each shot: angle (turns,
-- relative to `aim`),
-- velocity, firing x-offset;
-- if velocity is nil, use
-- self.veloc instead;
-- if x-offset is nil, use 0
init = function(self)
if (not self.shots) self.shots = {{{0}}}
end
})
function trig_gun:actually_shoot(x, y)
local shots,veloc,aim,munition = self.shots,self.veloc,self.aim,self.munition
local idx = self.shot_idx % #shots + 1
self.shot_idx = idx
shots = shots[idx]
for s in all(shots) do
local a,v,xo = unpack(s)
v = v or veloc
a += aim
-- todo: switch munition
-- depending on angle
-- (allows for non-round
-- sprites and hitboxes on
-- shots from guns with
-- widely varying angles)
local m = munition.new{}
-- todo: automatically make
-- high velocity shots do
-- multiple collision checks
m.dy = sin(a) * veloc
m.dx = cos(a) * veloc
m.spawn_at(x+(xo or 0), y)
end
end
-->8 -->8
-- bullets and guns -- bullets and guns