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 |  --  figure out approach/depart | ||||||
|  -- [1..n]: destinations |  -- [1..n]: destinations | ||||||
|  init = function(x) |  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 |  end | ||||||
| } | } | ||||||
|  |  | ||||||
| function segment:reset() | function segment:reset() | ||||||
|  self.current_idx = 1 |  self.current_idx = 1 | ||||||
|  self.remain = self.limit |  self.remain = self.limit | ||||||
|  self.prev_x = nil |  self.prev_x = false | ||||||
|  self.prev_y = nil |  self.prev_y = false | ||||||
|  self.was_approaching = false |  self.was_approaching = false | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -745,12 +758,29 @@ end | |||||||
|  |  | ||||||
| path = mknew { | path = mknew { | ||||||
|  loop_idx = 1, |  loop_idx = 1, | ||||||
|  current_idx = 1, |  | ||||||
|  -- [1..n]: destinations |  -- [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() | function path:reset() | ||||||
|  self.loop_idx = 1 |  | ||||||
|  self.current_idx = 1 |  self.current_idx = 1 | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user