Contents
Articles
Behaviors
Books
Director News
Director Web Sites
FAQ
Games
Mailing Lists
News Groups
Project Examples
Reviews
Software
Tools
Useful Web Sites
Utilities
Xtras

Don't miss these
ModMania
Behavior Killer behavior
Set Loop Property of a Flash member
Script Database
Follow the leader
DirectTransition3D Xtra Set II.
Xplode that text
Behavior Writer
SWFText - Flash Text Animation Builder to make Flash Intro and Banner with 180+ Effects
Icon Shop
 

 

 

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

 


Contact

MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA

Send e-mail