forked from pyrex/chameleonic
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			dc33b46260
			...
			level_desi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 06bdaa6179 | 
@@ -7,6 +7,7 @@ real_modules={}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
frame=0
 | 
					frame=0
 | 
				
			||||||
function _init()
 | 
					function _init()
 | 
				
			||||||
 | 
					 -- printh("restarting")
 | 
				
			||||||
 _doall("init") end
 | 
					 _doall("init") end
 | 
				
			||||||
function _update()
 | 
					function _update()
 | 
				
			||||||
 frame+=1
 | 
					 frame+=1
 | 
				
			||||||
@@ -398,7 +399,10 @@ function level:reanchor()
 | 
				
			|||||||
 end
 | 
					 end
 | 
				
			||||||
 shellsort(self._anch_keys)
 | 
					 shellsort(self._anch_keys)
 | 
				
			||||||
 for point in self:anchor_points() do
 | 
					 for point in self:anchor_points() do
 | 
				
			||||||
  if (point.ax_old and player.rope) player.rope:be_pushed_by(point,point.ax_old,point.ay_old)
 | 
					  if point.ax_old and player.rope and (point.ax_old != point.ax or point.ay_old != point.ay) then 
 | 
				
			||||||
 | 
					   -- printh("moving: "..tostring({point.ax_old,point.ay_old}).."=>"..tostring({point.ax,point.ay}))
 | 
				
			||||||
 | 
					   player.rope:be_pushed_by(point,point.ax_old,point.ay_old)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
  point.ax_old,point.ay_old=nil,nil
 | 
					  point.ax_old,point.ay_old=nil,nil
 | 
				
			||||||
 end
 | 
					 end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -967,8 +971,9 @@ function rope:draw(artificial_px,artificial_py)
 | 
				
			|||||||
   if (n1.associated_with.ady>0) y-=1
 | 
					   if (n1.associated_with.ady>0) y-=1
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  rectfill(x-1,y-1,x+1,y+1,12)
 | 
					  rectfill(x-1,y-1,x+1,y+1,12)
 | 
				
			||||||
  print("ax="..n1.ax..",ay="..n1.ay,0,sy)
 | 
					  print("ax="..n1.ax..",ay="..n1.ay,72,sy)
 | 
				
			||||||
  sy+=7
 | 
					  print(tostring(n1.associated_with and (not n1.associated_with.dropped and n1.associated_with.ax==n1.ax and n1.associated_with.ay==n1.ay)),76,sy+7)
 | 
				
			||||||
 | 
					  sy+=14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  local n0=n1.prev
 | 
					  local n0=n1.prev
 | 
				
			||||||
  local n2=n1.next
 | 
					  local n2=n1.next
 | 
				
			||||||
@@ -1002,7 +1007,7 @@ function rope:draw(artificial_px,artificial_py)
 | 
				
			|||||||
	 pset(x+p.adx,y,11)
 | 
						 pset(x+p.adx,y,11)
 | 
				
			||||||
	 pset(x,y+p.ady,11)
 | 
						 pset(x,y+p.ady,11)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 ]]--
 | 
					 ]]
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function rope:drag_dst(x,y)
 | 
					function rope:drag_dst(x,y)
 | 
				
			||||||
@@ -1021,6 +1026,21 @@ function rope:drag(n1,ax_new,ay_new)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function rope:relax()
 | 
					function rope:relax()
 | 
				
			||||||
 | 
					 local n0=self.src
 | 
				
			||||||
 | 
					 while true do
 | 
				
			||||||
 | 
					  if (n0==nil) break
 | 
				
			||||||
 | 
					  if n0.associated_with and n0.associated_with.dropped then
 | 
				
			||||||
 | 
					   for i in level:anchor_points() do
 | 
				
			||||||
 | 
					    if i.ax==n0.ax and i.ay==n0.ay then
 | 
				
			||||||
 | 
					     n0.associated_with=i
 | 
				
			||||||
 | 
					     break
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					   end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  n0=n0.next
 | 
				
			||||||
 | 
					 end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 local n0=self.src
 | 
					 local n0=self.src
 | 
				
			||||||
 while true do
 | 
					 while true do
 | 
				
			||||||
  local n1=n0.next
 | 
					  local n1=n0.next
 | 
				
			||||||
@@ -1056,8 +1076,9 @@ function rope:relax()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   local would,x1_new,y1_new=would_stick(x0,y0,n1.associated_with,x2,y2)
 | 
					   local would,x1_new,y1_new=would_stick(x0,y0,n1.associated_with,x2,y2)
 | 
				
			||||||
   if not would and not (n1.ax==x1_new and n1.ay==y1_new) then
 | 
					   if not would and not (n1.ax==x1_new and n1.ay==y1_new) then
 | 
				
			||||||
 | 
					    -- printh("dragging: "..tostring{n1.associated_with, {x1_new, y1_new}})
 | 
				
			||||||
    -- printh("relaxing: "..tostring(n0.associated_with).."->"..tostring(n1.associated_with).."->"..tostring(n2.associated_with))
 | 
					    -- printh("relaxing: "..tostring(n0.associated_with).."->"..tostring(n1.associated_with).."->"..tostring(n2.associated_with))
 | 
				
			||||||
    self:_drag(n1,x1_new,y1_new)
 | 
					    self:_drag(n1,x1_new,y1_new,n1.ax,n1.ay)
 | 
				
			||||||
    n0=n1.prev
 | 
					    n0=n1.prev
 | 
				
			||||||
    n2=n1.next
 | 
					    n2=n1.next
 | 
				
			||||||
    n0.next=n2
 | 
					    n0.next=n2
 | 
				
			||||||
@@ -1143,13 +1164,8 @@ function would_stick(x0,y0,anchor,x2,y2)
 | 
				
			|||||||
 local dx=x2-x0
 | 
					 local dx=x2-x0
 | 
				
			||||||
 local dy=y2-y0
 | 
					 local dy=y2-y0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 -- there is no reason for an acute angle to stick around in this world
 | 
					 if (x1==x0 and y1==y0) return false
 | 
				
			||||||
 --[[
 | 
					 if (x1==x2 and y1==y2) return false
 | 
				
			||||||
 local ang0=atan2(x2-x1,y2-y1)
 | 
					 | 
				
			||||||
 local ang2=atan2(x0-x1,y0-y1)
 | 
					 | 
				
			||||||
 local diff=abs((ang0-ang2 + 0.5)%1-0.5)
 | 
					 | 
				
			||||||
 if (diff<0.25) return false,x0,y0,0,0
 | 
					 | 
				
			||||||
 ]]--
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 local adx,ady
 | 
					 local adx,ady
 | 
				
			||||||
 local x1_new,y1_new
 | 
					 local x1_new,y1_new
 | 
				
			||||||
@@ -1186,16 +1202,19 @@ function rope:be_pushed_by(anchor,ax_old,ay_old)
 | 
				
			|||||||
  local nx0,ny0=n0.ax,n0.ay
 | 
					  local nx0,ny0=n0.ax,n0.ay
 | 
				
			||||||
  local nx1,ny1=n1.ax,n1.ay
 | 
					  local nx1,ny1=n1.ax,n1.ay
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local nxmn,nxmx = _mnmx(nx0,nx1)
 | 
				
			||||||
 | 
					  local nymn,nymx = _mnmx(ny0,ny1)
 | 
				
			||||||
 | 
					  -- printh(tostring({anchor,nxmn,nxmx,nymn,nymx}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if
 | 
					  if
 | 
				
			||||||
   (ax_new==ax_old and nx0<=anchor.ax and anchor.ax<=nx1) and 
 | 
					   (ax_new!=ax_old or (nxmn<=anchor.ax and anchor.ax<=nxmx)) and 
 | 
				
			||||||
   (ay_new==ay_old and ny0<=anchor.ay and anchor.ay<=ny1) and 
 | 
					   (ay_new!=ay_old or (nymn<=anchor.ay and anchor.ay<=nymx)) and 
 | 
				
			||||||
   not (anchor.ax==nx0 and anchor.ay==ny0) and
 | 
					 | 
				
			||||||
   not (anchor.ax==nx1 and anchor.ay==ny1) and
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
   (_which_side(ax_old,ay_old,nx0,ny0,nx1,ny1)!= 
 | 
					   (_which_side(ax_old,ay_old,nx0,ny0,nx1,ny1)!= 
 | 
				
			||||||
    _which_side(ax_new,ay_new,nx0,ny0,nx1,ny1) 
 | 
					    _which_side(ax_new,ay_new,nx0,ny0,nx1,ny1) 
 | 
				
			||||||
   ) and would_stick(nx0,ny0,anchor,nx1,ny1)
 | 
					   ) and would_stick(nx0,ny0,anchor,nx1,ny1)
 | 
				
			||||||
  then
 | 
					  then
 | 
				
			||||||
 | 
					   -- printh("found (in): "..tostring({{nx0,ny0},{nx1,ny1}, anchor}))
 | 
				
			||||||
   local nx05,ny05
 | 
					   local nx05,ny05
 | 
				
			||||||
   if ax_new==ax_old then
 | 
					   if ax_new==ax_old then
 | 
				
			||||||
    nx05=anchor.ax
 | 
					    nx05=anchor.ax
 | 
				
			||||||
@@ -1222,8 +1241,14 @@ function rope:be_pushed_by(anchor,ax_old,ay_old)
 | 
				
			|||||||
 end
 | 
					 end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function rope:_drag(n1,ax1_new,ay1_new)
 | 
					function rope:_drag(n1,ax1_new,ay1_new,ax_removing,ay_removing)
 | 
				
			||||||
 local function _sweep_radar(ax_pivot,ay_pivot,ax_far0,ay_far0,ax_far1,ay_far1)
 | 
					 local function _sweep_radar(ax_lhs,ay_lhs,ax_rhs,ay_rhs,ax_pivot,ay_pivot,ax_far0,ay_far0,ax_far1,ay_far1)
 | 
				
			||||||
 | 
					  local function _uncreatable(anchor)
 | 
				
			||||||
 | 
					   return (anchor.ax==ax_lhs and anchor.ay==ay_lhs) or
 | 
				
			||||||
 | 
					    (anchor.ax==ax_rhs and anchor.ay==ay_rhs) or
 | 
				
			||||||
 | 
					    (anchor.ax==ax_removing and anchor.ay==ay_removing)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (ax_far0==ax_far1 and ay_far0==ay_far1) return nil
 | 
					  if (ax_far0==ax_far1 and ay_far0==ay_far1) return nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ax_far0==ax_far1 then
 | 
					  if ax_far0==ax_far1 then
 | 
				
			||||||
@@ -1234,9 +1259,7 @@ function rope:_drag(n1,ax1_new,ay1_new)
 | 
				
			|||||||
   for ay_far_new in _stepfrom(ay_far0,ay_far1) do
 | 
					   for ay_far_new in _stepfrom(ay_far0,ay_far1) do
 | 
				
			||||||
    for anchor in level:anchor_points() do
 | 
					    for anchor in level:anchor_points() do
 | 
				
			||||||
     if 
 | 
					     if 
 | 
				
			||||||
      not (anchor.ax==ax_pivot and anchor.ay==ay_pivot) and
 | 
					      not _uncreatable(anchor) and
 | 
				
			||||||
      -- not (anchor.ax==ax_far0 and anchor.ay==ay_far0) and
 | 
					 | 
				
			||||||
      not (anchor.ax==ax_far1 and anchor.ay==ay_far1) and
 | 
					 | 
				
			||||||
      (ax0<=anchor.ax and anchor.ax<=ax1) and 
 | 
					      (ax0<=anchor.ax and anchor.ax<=ax1) and 
 | 
				
			||||||
      would_stick(ax_pivot,ay_pivot,anchor,ax_far,ay_far_new) and
 | 
					      would_stick(ax_pivot,ay_pivot,anchor,ax_far,ay_far_new) and
 | 
				
			||||||
      (
 | 
					      (
 | 
				
			||||||
@@ -1257,11 +1280,9 @@ function rope:_drag(n1,ax1_new,ay1_new)
 | 
				
			|||||||
   for ax_far_new in _stepfrom(ax_far0,ax_far1) do
 | 
					   for ax_far_new in _stepfrom(ax_far0,ax_far1) do
 | 
				
			||||||
    for anchor in level:anchor_points() do
 | 
					    for anchor in level:anchor_points() do
 | 
				
			||||||
     if 
 | 
					     if 
 | 
				
			||||||
      not (anchor.ax==ax_pivot and anchor.ay==ay_pivot) and
 | 
					      not _uncreatable(anchor) and
 | 
				
			||||||
      -- not (anchor.ax==ax_far0 and anchor.ay==ay_far0) and
 | 
					 | 
				
			||||||
      not (anchor.ax==ax_far1 and anchor.ay==ay_far1) and
 | 
					 | 
				
			||||||
      would_stick(ax_pivot,ay_pivot,anchor,ax_far_new,ay_far) and
 | 
					 | 
				
			||||||
      (ay0<=anchor.ay and anchor.ay<=ay1) and 
 | 
					      (ay0<=anchor.ay and anchor.ay<=ay1) and 
 | 
				
			||||||
 | 
					      would_stick(ax_pivot,ay_pivot,anchor,ax_far_new,ay_far) and
 | 
				
			||||||
      (
 | 
					      (
 | 
				
			||||||
        _which_side(anchor.ax,anchor.ay,ax_pivot,ay_pivot,ax_far_old,ay_far) !=
 | 
					        _which_side(anchor.ax,anchor.ay,ax_pivot,ay_pivot,ax_far_old,ay_far) !=
 | 
				
			||||||
        _which_side(anchor.ax,anchor.ay,ax_pivot,ay_pivot,ax_far_new,ay_far)
 | 
					        _which_side(anchor.ax,anchor.ay,ax_pivot,ay_pivot,ax_far_new,ay_far)
 | 
				
			||||||
@@ -1282,7 +1303,10 @@ function rope:_drag(n1,ax1_new,ay1_new)
 | 
				
			|||||||
 local n0=n1.prev
 | 
					 local n0=n1.prev
 | 
				
			||||||
 while true do
 | 
					 while true do
 | 
				
			||||||
  if (n0==nil) break
 | 
					  if (n0==nil) break
 | 
				
			||||||
  local anch=_sweep_radar(n0.ax,n0.ay,ax1_old,ay1_old,ax1_new,ay1_new)
 | 
					  local anch=_sweep_radar(
 | 
				
			||||||
 | 
					   n0.ax,n0.ay,n1.ax,n1.ay,
 | 
				
			||||||
 | 
					   n0.ax,n0.ay,ax1_old,ay1_old,ax1_new,ay1_new
 | 
				
			||||||
 | 
					   )
 | 
				
			||||||
  if (anch==nil) break
 | 
					  if (anch==nil) break
 | 
				
			||||||
  local n05={ax=anch.ax,ay=anch.ay,associated_with=anch,prev=n0,next=n1}
 | 
					  local n05={ax=anch.ax,ay=anch.ay,associated_with=anch,prev=n0,next=n1}
 | 
				
			||||||
  -- printh("creating pre: "..tostring(n0.associated_with).."->"..tostring(n05.associated_with).."->"..tostring(n1.associated_with))
 | 
					  -- printh("creating pre: "..tostring(n0.associated_with).."->"..tostring(n05.associated_with).."->"..tostring(n1.associated_with))
 | 
				
			||||||
@@ -1294,7 +1318,10 @@ function rope:_drag(n1,ax1_new,ay1_new)
 | 
				
			|||||||
 local n2=n1.next
 | 
					 local n2=n1.next
 | 
				
			||||||
 while true do
 | 
					 while true do
 | 
				
			||||||
  if (n2==nil) break
 | 
					  if (n2==nil) break
 | 
				
			||||||
  local anch=_sweep_radar(n2.ax,n2.ay,ax1_old,ay1_old,ax1_new,ay1_new)
 | 
					  local anch=_sweep_radar(
 | 
				
			||||||
 | 
					   n1.ax,n1.ay,n2.ax,n2.ay,
 | 
				
			||||||
 | 
					   n2.ax,n2.ay,ax1_old,ay1_old,ax1_new,ay1_new
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
  if (anch==nil) break
 | 
					  if (anch==nil) break
 | 
				
			||||||
  local n15={ax=anch.ax,ay=anch.ay,associated_with=anch,prev=n1,next=n2}
 | 
					  local n15={ax=anch.ax,ay=anch.ay,associated_with=anch,prev=n1,next=n2}
 | 
				
			||||||
  -- printh("creating post: "..tostring(n1.associated_with).."->"..tostring(n15.associated_with).."->"..tostring(n2.associated_with))
 | 
					  -- printh("creating post: "..tostring(n1.associated_with).."->"..tostring(n15.associated_with).."->"..tostring(n2.associated_with))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user