paths sort of work but not really
figure out why they do not show the expected patterns
This commit is contained in:
		| @@ -686,21 +686,21 @@ segment = mknew{ | |||||||
|  -- dest_x, dest_y: stored |  -- dest_x, dest_y: stored | ||||||
|  --  current destination to |  --  current destination to | ||||||
|  --  figure out approach/depart |  --  figure out approach/depart | ||||||
|  -- [1..n]: destinations |  -- dests[1..n]: destinations | ||||||
|  init = function(x) |  init = function(x) | ||||||
|   x.init = segment.reset |   x.init = segment.reset | ||||||
|   mknew(x) |   mknew(x) | ||||||
|   if not x.mirror then |   if not x.mirror then | ||||||
|    local mirrored = {mirror=x, init=segment.reset} |    local mdests = {} | ||||||
|    for i, v in ipairs(x) do |    for i, v in ipairs(x.dests) do | ||||||
|     mirrored[i] = destination.new{ |     mdests[i] = destination.new{ | ||||||
|      anchor_frac=v.anchor_frac, |      anchor_frac=v.anchor_frac, | ||||||
|      accel_frac=v.accel_frac, |      accel_frac=v.accel_frac, | ||||||
|      x_off_frac=-v.x_off_frac, |      x_off_frac=-v.x_off_frac, | ||||||
|      y_off_frac=v.y_off_frac, |      y_off_frac=v.y_off_frac, | ||||||
|     } |     } | ||||||
|    end |    end | ||||||
|    x.mirror = mknew(x.new(mirrored)) |    x.mirror = mknew(x.new{mirror=x, init=segment.reset, dests=mdests}) | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
| } | } | ||||||
| @@ -714,7 +714,7 @@ function segment:reset() | |||||||
| end | end | ||||||
|  |  | ||||||
| function segment:target_from(fx, fy) | function segment:target_from(fx, fy) | ||||||
|  local rx, ry, af = self[self.current_idx]:target_from(fx, fy) |  local rx, ry, af = self.dests[self.current_idx]:target_from(fx, fy) | ||||||
|  self.dest_x, self.dest_y = rx, ry |  self.dest_x, self.dest_y = rx, ry | ||||||
|  return rx, ry, af |  return rx, ry, af | ||||||
| end | end | ||||||
| @@ -725,7 +725,8 @@ function segment:update(x, y) | |||||||
|  if (rem > 0) rem -= 1 |  if (rem > 0) rem -= 1 | ||||||
|  |  | ||||||
|  if self:should_step(x, y) then |  if self:should_step(x, y) then | ||||||
|   if self.current_idx == #self then |   self.prev_x, self.prev_y = false, false | ||||||
|  |   if self.current_idx == #self.dests then | ||||||
|    self.current_idx = self.loop_idx |    self.current_idx = self.loop_idx | ||||||
|    if (rem < 0) rem += 1 |    if (rem < 0) rem += 1 | ||||||
|   else |   else | ||||||
| @@ -760,22 +761,21 @@ end | |||||||
|  |  | ||||||
| path = mknew { | path = mknew { | ||||||
|  loop_idx = 1, |  loop_idx = 1, | ||||||
|  -- [1..n]: destinations |  -- segs[1..n]: segments or subpaths | ||||||
|  init=function(x) |  init=function(x) | ||||||
|   if not x.mirror then |   if not x.mirror then | ||||||
|    local mirrored = { |    local msegs = {} | ||||||
|     mirror = x, |    for i, v in ipairs(x.segs) do | ||||||
|     loop_idx = x.loop_idx, |     msegs[i]=v.mirror | ||||||
|    } |  | ||||||
|    for i, v in ipairs(x) do |  | ||||||
|     mirrored[i]=v.mirror |  | ||||||
|    end |    end | ||||||
|    x.mirror = path.new(mirrored) |    x.mirror = path.new{mirror=x, loop_idx=x.loop_idx, segs=msegs} | ||||||
|   end |   end | ||||||
|   x.init = function(y) |   x.init = function(y) | ||||||
|    for i, v in ipairs(x) do |    local ysegs = {} | ||||||
|     y[i]=v.new{} |    for i, v in ipairs(x.segs) do | ||||||
|  |     ysegs[i]=v.new{} | ||||||
|    end |    end | ||||||
|  |    y.segs = ysegs | ||||||
|    y:reset() |    y:reset() | ||||||
|   end |   end | ||||||
|   mknew(x) |   mknew(x) | ||||||
| @@ -787,13 +787,13 @@ function path:reset() | |||||||
| end | end | ||||||
|  |  | ||||||
| function path:target_from(fx, fy) | function path:target_from(fx, fy) | ||||||
|  return self[self.current_idx]:target_from(fx, fy) |  return self.segs[self.current_idx]:target_from(fx, fy) | ||||||
| end | end | ||||||
|  |  | ||||||
| function path:update(x, y) | function path:update(x, y) | ||||||
|  local idx = self.current_idx |  local idx = self.current_idx | ||||||
|  if self[idx]:update(x, y) then |  if self.segs[idx]:update(x, y) then | ||||||
|   if idx == #self then |   if idx == #self.segs then | ||||||
|    self.current_idx = self.loop_idx |    self.current_idx = self.loop_idx | ||||||
|    return true |    return true | ||||||
|   else |   else | ||||||
| @@ -1498,14 +1498,23 @@ ship_f = mknew(ship_m.new{ | |||||||
| }) | }) | ||||||
|  |  | ||||||
| diamond_loop = segment.new{ | diamond_loop = segment.new{ | ||||||
|  destination.new{ |  dests = { | ||||||
|   x_off_frac=0.25 |   destination.new{ | ||||||
|  }, destination.new{ |    x_off_frac=0.25 | ||||||
|   y_off_frac=0.25 |   }, destination.new{ | ||||||
|  }, destination.new { |    y_off_frac=0.25 | ||||||
|   x_off_frac = -0.25 |   }, destination.new { | ||||||
|  }, destination.new { |    x_off_frac = -0.25 | ||||||
|   y_off_frac = -0.25 |   }, destination.new { | ||||||
|  |    y_off_frac = -0.25 | ||||||
|  |   }, | ||||||
|  |  }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | diamond_bounce = path.new{ | ||||||
|  |  segs = { | ||||||
|  |   diamond_loop, | ||||||
|  |   diamond_loop.mirror, | ||||||
|  }, |  }, | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1530,7 +1539,7 @@ ship_skirmisher = mknew(ship_f.new{ | |||||||
|  fire_off_y = 7, |  fire_off_y = 7, | ||||||
|  xmin = -8, |  xmin = -8, | ||||||
|  xmax = 112, |  xmax = 112, | ||||||
|  path = diamond_loop, |  path = diamond_bounce, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| function ship_skirmisher:reset_bounds() | function ship_skirmisher:reset_bounds() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user