REM ***********************************************
REM Title: Sprite Clipping
REM Author: Phaelax
REM Downloaded from: http://dbcc.zimnox.com/
REM ***********************************************
 
REM ******************************************
REM Project: Sprite Clipping
REM Author:  Phaelax
REM Created: Wednesday, September 18, 2013
REM ******************************************
 
 
rem make a test image
box 1, 1, 400, 400, rgb(255,255,0),rgb(0,0,255),rgb(0,255,0),rgb(255,0,0)
get image 1, 1, 1, 400, 400
 
rem create a sprite
sprite 1, x, y, 1
 
 
sync on
 
do
      cls
      x = mousex()-200
      y = mousey()-200
      sprite 1, x, y, 1
 
      clipSprite(1, 200,200,500,500)
 
 
      outline(199,199,500,500)
 
      print screen fps()
      sync
loop
 
 
 
function clipSprite(id, x1, y1, x2, y2)
      rem get sprite's original dimensions
      img = sprite image(id)
      w = image width(img)
      h = image height(img)
      rem sprite's current position
      x = sprite x(id)
      y = sprite y(id)
 
      rem offsets
      ox = 0
      oy = 0
 
      rem top of sprite
      if y < y1
            h1 = y1 - y
            oy = -(y1-y)
      endif
      rem bottom of sprite
      if y+h > y2
            h2 = (y+h) - y2
      endif
      rem left side of sprite
      if x < x1
            w1 = x1 - x
            ox = -(x1-x)
      endif
      rem right side of sprite
      if x+w > x2
            w2 = (x+w) - x2
      endif
 
      rem calculate new size of sprite
      newHeight = h - h1 - h2
      av# = h1 / (h+0.0)
      bv# = 1 - h2 / (h+0.0)
      newWidth = w - w1 - w2
      au# = w1 / (w+0.0)
      bu# = 1 - w2 / (w+0.0)
 
      rem sprite size cannot be <= 0
      if newWidth > 0 and newHeight > 0
            rem update sprite texture coords
            set sprite texture coord 1, 0, au#, av#
            set sprite texture coord 1, 1, bu#, av#
            set sprite texture coord 1, 2, au#, bv#
            set sprite texture coord 1, 3, bu#, bv#
            rem resize sprite
            size sprite id, newWidth, newHeight
            offset sprite id, ox, oy
            show sprite id
      else
            hide sprite id
      endif
endfunction
 
 
 
function outline(x1, y1, x2, y2)
      line x1, y1, x2, y1
      line x1, y2, x2, y2
      line x1, y1, x1, y2
      line x2, y1, x2, y2
endfunction