paths and segments are now factories instead
the factory/instance deliniation is not clean but it _is_ efficient.
This commit is contained in:
@ -686,15 +686,28 @@ 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}
|
||||
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 = 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
|
||||
|
||||
@ -745,12 +758,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
|
||||
|
||||
|
Reference in New Issue
Block a user