Compare commits
3 Commits
797818214a
...
6efd05febe
Author | SHA1 | Date | |
---|---|---|---|
6efd05febe
|
|||
383491fc5d
|
|||
8533720114
|
@@ -194,7 +194,9 @@ function updategame()
|
||||
interlude -= 1
|
||||
else
|
||||
current_wave = flotilla.new()
|
||||
current_wave:load(rnd() > 0.5 and 7 or 0, 0, min(ones(waves_complete)\2, 4))
|
||||
--current_wave:load(rnd() > 0.5 and 7 or 0, 0, min(ones(waves_complete)\2, 4))
|
||||
current_wave:load(0, 0, min(ones(waves_complete)\2, 4))
|
||||
current_wave:update()
|
||||
end
|
||||
events = filtermoved(events)
|
||||
appendmove(events, new_events)
|
||||
@@ -662,7 +664,7 @@ function destination:target_from(fx, fy)
|
||||
if (xf > 0) rx = lerp(rx, 112, xf)
|
||||
if (yf < 0) ry = lerp(ry, 0, -yf)
|
||||
if (yf > 0) ry = lerp(ry, 128, yf)
|
||||
return rx, ry
|
||||
return rx, ry, self.accel_frac
|
||||
end
|
||||
|
||||
segment = mknew{
|
||||
@@ -686,22 +688,35 @@ segment = mknew{
|
||||
-- figure out approach/depart
|
||||
-- [1..n]: destinations
|
||||
init = function(x)
|
||||
x.remain = x.limit
|
||||
x.init = segment.reset
|
||||
mknew(x)
|
||||
if not x.mirror then
|
||||
local mirrored = {mirror=x, init=segment.reset}
|
||||
for i, v in ipairs(x) do
|
||||
mirrored[i] = destination.new{
|
||||
anchor_frac=v.anchor_frac,
|
||||
accel_frac=v.accel_frac,
|
||||
x_off_frac=-v.x_off_frac,
|
||||
y_off_frac=v.y_off_frac,
|
||||
}
|
||||
end
|
||||
x.mirror = mknew(x.new(mirrored))
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
function segment:reset()
|
||||
self.current_idx = 1
|
||||
self.remain = self.limit
|
||||
self.prev_x = nil
|
||||
self.prev_y = nil
|
||||
self.prev_x = false
|
||||
self.prev_y = false
|
||||
self.was_approaching = false
|
||||
end
|
||||
|
||||
function segment:target_from(fx, fy)
|
||||
local rx, ry = self[self.current_idx]:target_from(fx, fy)
|
||||
local rx, ry, af = self[self.current_idx]:target_from(fx, fy)
|
||||
self.dest_x, self.dest_y = rx, ry
|
||||
return rx, ry
|
||||
return rx, ry, af
|
||||
end
|
||||
|
||||
function segment:update(x, y)
|
||||
@@ -745,12 +760,29 @@ end
|
||||
|
||||
path = mknew {
|
||||
loop_idx = 1,
|
||||
current_idx = 1,
|
||||
-- [1..n]: destinations
|
||||
init=function(x)
|
||||
if not x.mirror then
|
||||
local mirrored = {
|
||||
mirror = x,
|
||||
loop_idx = x.loop_idx,
|
||||
}
|
||||
for i, v in ipairs(x) do
|
||||
mirrored[i]=v.mirror
|
||||
end
|
||||
x.mirror = path.new(mirrored)
|
||||
end
|
||||
x.init = function(y)
|
||||
for i, v in ipairs(x) do
|
||||
y[i]=v.new{}
|
||||
end
|
||||
y:reset()
|
||||
end
|
||||
mknew(x)
|
||||
end,
|
||||
}
|
||||
|
||||
function path:reset()
|
||||
self.loop_idx = 1
|
||||
self.current_idx = 1
|
||||
end
|
||||
|
||||
@@ -1457,13 +1489,26 @@ ship_f = mknew(ship_m.new{
|
||||
act = function(self)
|
||||
local wx,wy=self.want_x,self.want_y
|
||||
self.xmin,self.xmax,self.ymin,self.ymax = wx,wx,wy,wy
|
||||
return 0,0,false,false
|
||||
return 0,0
|
||||
end,
|
||||
init = function(self)
|
||||
if (self.gun_proto) self.main_gun = self.gun_proto.new()
|
||||
if (self.path) self.path = self.path.new()
|
||||
end
|
||||
})
|
||||
|
||||
diamond_loop = segment.new{
|
||||
destination.new{
|
||||
x_off_frac=0.25
|
||||
}, destination.new{
|
||||
y_off_frac=0.25
|
||||
}, destination.new {
|
||||
x_off_frac = -0.25
|
||||
}, destination.new {
|
||||
y_off_frac = -0.25
|
||||
},
|
||||
}
|
||||
|
||||
ship_mook = mknew(ship_f.new{
|
||||
sprite=103
|
||||
})
|
||||
@@ -1485,12 +1530,33 @@ ship_skirmisher = mknew(ship_f.new{
|
||||
fire_off_y = 7,
|
||||
xmin = -8,
|
||||
xmax = 112,
|
||||
path = diamond_loop,
|
||||
})
|
||||
|
||||
function ship_skirmisher:reset_bounds()
|
||||
self.xmin, self.xmax, self.ymin, self.ymax = -8, 112, 0, 120
|
||||
end
|
||||
|
||||
function ship_skirmisher:act()
|
||||
local tx, ty, af = self.path:target_from(self.want_x+4, self.want_y+4)
|
||||
tx -= 4
|
||||
ty -= 4
|
||||
if af <= 0 then
|
||||
self.xmin, self.xmax, self.ymin, self.ymax = tx,tx,ty,ty
|
||||
return 0,0
|
||||
end
|
||||
self:reset_bounds()
|
||||
local ax, ay, th = tx - self.x, ty - self.y, self.thrust*af
|
||||
local ma = max(abs(ax), abs(ay))
|
||||
return ax*th/ma, ay*th/ma
|
||||
end
|
||||
|
||||
function ship_skirmisher:move()
|
||||
if (not ship_f.move(self)) return
|
||||
if (not self.path:update(self.x+4, self.y+4)) self.path:reset()
|
||||
return true
|
||||
end
|
||||
|
||||
function rnd_spawn_loc()
|
||||
local x,y = flr(rnd(304)), flr(rnd(32))
|
||||
if (x<184) return x-40,-y-8
|
||||
|
Reference in New Issue
Block a user