Search content:

 

Personal Menu
Username:
Password:
Save password

Become a member

Forgot Password?

 

Don't miss these
Font Size DropDown
Binary Convertor
Library for the control of volume in Director
Scrollable Sprites
RGB Shifter-Alphamania
myScreenSaver
Larger Graphics in Director than outside
Stub Mac Projector
XAdKey xtra
Check for VideoforWindows
MediaMacros Xtras Mall
 

 

 

Behavior True Lingo Color Wheel 1.0

Added on 1/25/2004

 

Compatibilities:
behavior D7 D8 D8_5 D9 Mac Parent PC Script Shockwave UK US

This item has not yet been rated

Author: alterfin (website)

A true colorwheel for director using imaging lingo. the behaviour can be attached to ANY sprite in the score and automatically creates all needed members, including the color-circle image. simply drop it on a sprite and press play!

--------- True Lingo Color Wheel 1.0 / alterFin 3.2001 / This Side Up / Handle With Care ---------------

property middlepoint,diameter,pborder,circleSpr,borderSpr,dotSpr,briSpr,colorPoint,brightness,saturation
property dif,engage

on getPropertyDescriptionList

  propList = [:]

  addProp propList, #diameter, [
  #default: 100,
  #format:  #integer,
  #comment: "Color Wheel Diameter:"]

  addProp propList, #pBorder, [
  #default: 15,
  #format:  #integer,
  #comment: "Color Wheel Borderwidth:"]

  return propList
end

on getBehaviorDescription
  description =
  "Place this behaviour on any sprite in the score, then run the movie. "&return&
  "Allow some time to create the members and sprites for the TrueColorWheel. "&return&
  "Note: the behaviour contains a GO TO THE FRAME that can be later removed."&return&return&
"TrueColorWheel 1.0 by Yariv Alter Fin / www.alterFin.com / lingo@alterFin.org"
  return description
end

on beginSprite me
  if pborder>14 then pBorder=14 -- director limit on shape members linesize...?????

  rad=diameter/2
  r=the stage.rect
  middlepoint=point((r[3]-r[1])/2,(r[4]-r[2])/2)

  spr=sprite(me.spritenum)
  if member("TCW bgMember").membernum=-1 then
    mem=new(#shape)
    mem.shapeType=#oval
    mem.filled=1
    mem.name="TCW bgMember"
  end if
  spr.member=member("TCW bgMember")

  spr=sprite(me.spritenum)
  rad=diameter/2
  spr.linesize=pBorder
  spr.height=diameter+spr.linesize*2-2
  spr.width=diameter+spr.linesize*2-2
  spr.loc=middlepoint-[rad+spr.linesize-1,rad+spr.linesize-1]
  spr.color=rgb(0,0,0)

  -- circle sprite

  repeat with i=me.spritenum+1 to the lastchannel
    if sprite(i).membernum=0 then
      curspr=i
      exit repeat
    end if
  end repeat

  spr=sprite(curspr)
  puppetsprite(curspr,true)
  circleSpr=spr

  if member("TCW WheelBitmap "&diameter.string).membernum=-1 then
    m=new(#bitmap)
    m.image=the stage.image.crop(rect(0,0,diameter,diameter))
    createColorWheelBitmap(diameter/2,m)
    m.name="TCW WheelBitmap "&diameter.string
  end if

  circleSpr.member=member("TCW WheelBitmap "&diameter.string)
  circleSpr.width=diameter
  circleSpr.height=diameter
  circleSpr.loc=middlepoint
  circleSpr.ink=8
  circleSpr.forecolor=255

  -- borderSprite

  repeat with i=me.spritenum+1 to the lastchannel
    if sprite(i).membernum=0 then
      curspr=i
      exit repeat
    end if
  end repeat

  spr=sprite(curspr)
  puppetsprite(curspr,true)

  rad=diameter/2

  if member("TCW borderMember").membernum=-1 then
    mem=new(#shape)
    mem.shapeType=#oval
    mem.filled=0
    mem.name="TCW borderMember"
  end if
  spr.member=member("TCW borderMember")
  spr.linesize=pBorder
  spr.height=diameter+spr.linesize*2-2
  spr.width=diameter+spr.linesize*2-2
  spr.loc=circleSpr.loc-[rad+spr.linesize-1,rad+spr.linesize-1]
  spr.color=rgb(255,255,255)
  borderSpr=spr

  -- dotSpr - saturation

  repeat with i=me.spritenum+1 to the lastchannel
    if sprite(i).membernum=0 then
      curspr=i
      exit repeat
    end if
  end repeat
  spr=sprite(curspr)
  puppetsprite(curspr,true)
  dotSpr=spr

  if member("TCW handleMember").membernum=-1 then
    mem=new(#shape)
    mem.shapeType=#oval
    mem.filled=0
    mem.name="TCW handleMember"
  end if
  spr.member=member("TCW handleMember")
  dotSpr.width=max(pBorder,4)
  dotSpr.height=max(pBorder,4)
  dotspr.linesize=2
  dotSpr.ink=2
  dotspr.loc=middlePoint-[dotspr.width/2,dotspr.height/2]


  -- briSpr - value

  repeat with i=me.spritenum+1 to the lastchannel
    if sprite(i).membernum=0 then
      curspr=i
      exit repeat
    end if
  end repeat
  spr=sprite(curspr)
  puppetsprite(curspr,true)
  briSpr=spr
  spr.member=member("TCW handleMember")
  briSpr.width=max(pBorder,4)
  briSpr.height=max(pBorder,4)
  briSpr.linesize=2

briSpr.loc=middlePoint-[dotspr.width/2,dotspr.height/2+diameter/2+borderSpr.linesize/2]
  briSpr.ink=2

  ----

  brightness=1
  engage=#off

  colorPoint=middlePoint+[diameter/2,diameter/2]
  qwe=me
end

on exitframe me
  moc=the mouseloc
  mid=middlePoint
  rad=diameter/2

  deg=angle(colorPoint,mid)
  newcol=calculateHSV(deg,saturation,brightness)

  if the mousedown then
    if engage=#off then
      case the rollover of
        (CircleSpr.spritenum),(BorderSpr.spritenum):

dotSpr.loc=constrainCircle(mid,moc,rad)-[dotSpr.width/2,dotSpr.height/2]
          engage=#circle
        (dotSpr.spritenum):
          dif=moc-dotSpr.loc
          engage=#dot
        (briSpr.spritenum):
          dif=moc-briSpr.loc
          engage=#brightness
      end case
    end if
  else
    engage=#off
  end if

  case engage of:
    #circle:
      colorPoint=constrainCircle(mid,moc,rad)
      nowrad=distance(colorpoint,mid)
      saturation=min([max([(1.0000*nowrad)/rad,0]),1])
      dotSpr.loc=colorPoint-[dotSpr.width/2,dotSpr.height/2]
    #dot:
      newDotLoc=moc-dif

colorPoint=constrainCircle(mid,newDotLoc+[dotSpr.width/2,dotSpr.height/2],rad)
      nowrad=distance(colorpoint,mid)
      saturation=min([max([(1.0000*nowrad)/rad,0]),1])
      dotSpr.loc=colorPoint-[dotSpr.width/2,dotSpr.height/2]
    #brightness:
      newBriLoc=moc-dif
      briPoint=constrainCircleBorder(mid,newBriLoc,rad+borderSpr.linesize/2)
      briSpr.loc=briPoint-[briSpr.width/2,briSpr.height/2]
      brightness=1.0000*abs(180-angle(briPoint,middlePoint))/180
      circleSpr.blend=brightness*100
  end case

  if engage<>#off then borderSpr.color=newcol
  go to the frame
end

----- my pseudo math handlers... --------------------------------

on angle loci,mid
  diff=loci-mid
  difX=diff[1]
  difY=diff[2]

  if difX<>0 and difY<>0 then
    flag=[abs(difX)/difX,abs(difY)/difY]
  else
    if difX=0 and difY=0 then
      flag=[0,0]
    else
      if difX=0 then
        flag=[0,abs(difY)/difY]
      else
        flag=[abs(difX)/difX,0]
      end if
    end if
  end if

  if float(abs(difX))<>0 then
    theAngle= atan(float((difY))/float((difX)))
  else
    theAngle=1.5708
  end if

  newDeg=theangle * 57.2957795786

  if flag[1]=1 or flag=[0,1] then fix=90
  if flag[1]=-1 or flag=[0,-1] then fix=270

  theDeg=newDeg+fix
  if theDeg>=360 then theDeg=theDeg mod 360
    return theDeg
end

on AtoB A,B,part
  return (A*(1-part)+B*part)
end

on constrainCircle midpoint,curpoint,radius
  newX=curpoint[1]
  newY=curpoint[2]
  nowrad=distance(curpoint,midpoint)
  if nowrad>radius then
    difrad=abs((1.0000*radius)/nowrad)
    oldX=curpoint[1]-midpoint[1]
    oldY=curpoint[2]-midpoint[2]
    newX=midpoint[1]+oldX*difrad
    newY=midpoint[2]+oldY*difrad
  end if
  return point(newX,newY)
end

on constrainCircleBorder midpoint,curpoint,radius
  nowrad=distance(midpoint,curpoint)
  difrad=abs((1.0000*radius)/nowrad)
  oldX=curpoint[1]-midpoint[1]
  oldY=curpoint[2]-midpoint[2]
  newX=midpoint[1]+oldX*difrad
  newY=midpoint[2]+oldY*difrad
  return point(newX,newY)
end

on distance point1,point2

res=sqrt((point1[1]-point2[1])*(point1[1]-point2[1])+(point1[2]-point2[2])*(point1[2]-point2[2]))
  return res
end

on createColorWheelBitmap radius,mem
  mid=[radius,radius]
  repeat with y=0 to radius*2
    repeat with x=0 to radius*2
      cp=[x,y]
      nowradius=distance(cp,mid)
      sat= min([max([(1.0000*nowradius)/radius,0]),1])
      deg=angle(cp,mid)
      if distance(mid,cp)>radius then col=rgb(255,255,255)
      else col=calculateHSV(deg,sat,1)
      mem.image.setpixel(x,y,col)
    end repeat
  end repeat
end

on calculateHSV hue,sat,val --degrees / saturation / value
  col=degrees2color(hue)

wcol=rgb(AtoB(255,col.red,sat),AtoB(255,col.green,sat),AtoB(255,col.blue,sat))
  return rgb(AtoB(0,wcol.red,val),AtoB(0,wcol.green,val),AtoB(0,wcol.blue,val))
end

on degrees2color deg
  mymod=1.0000*((10000*deg) mod (10000*60))/10000 -- special thanx to Roy Crisman for the feedback...
  posval=integer(1.0000*(mymod)/60*255)
  negval=integer(1.0000*(60-(mymod))/60*255)
  if deg<60 then col=rgb(255,posval,0)
  if deg>=60 then col=rgb(negval,255,0)
  if deg>=120 then col=rgb(0,255,posval)
  if deg>=180 then col=rgb(0,negval,255)
  if deg>=240 then col=rgb(posval,0,255)
  if deg>=300 then col=rgb(255,0,negval)
  return col
end

 


Upload Provided by ABCUpload ASP

Contact

MMI
22 West Court Sq
Suite 2C
Newnan, GA 30263
USA

Fax - (206) 339-5833

Send e-mail