home *** CD-ROM | disk | FTP | other *** search
/ Ubisoft - ECTS 99 (UK) (Disc 1) (Press Kit) / Ubisoft - ECTS 99 (UK) (Disc 1) (Press Kit).bin / Credits.dcr / 00020_Push Button.ls < prev    next >
Encoding:
Text File  |  1999-08-15  |  11.1 KB  |  268 lines

  1. property spriteNum, mySprite, myMember, getPDLError, myStandardMember, myRolloverMember, myMouseDownMember, myDisabledMember, myMouseDownSound, myMouseUpSound, myActiveFlag, myXRayFlag, myMessage, theMouseWasUp, myMouseDown, myRollover, mySubscribersList
  2.  
  3. on getBehaviorDescription me
  4.   return "PUSH BUTTON" & RETURN & RETURN & "This behavior sets the member of a sprite depending on the state of the mouse (elsewhere, rollover, mouseDown, mouseUp)." & RETURN & RETURN & "This creates a button which can either initiate actions in other sprites, or provide visual feedback for other behaviors attached to the same sprite." & RETURN & RETURN & "The behavior can be enabled or disabled, using a #PushButton_ToggleActive call to the behavior or the sprite." & RETURN & RETURN & "Two messaging systems are provided:" & RETURN & "1) A custom message is sent to all sprites whenever the Push Button behavior is activated." & RETURN & RETURN & "2) Objects can 'subscribe' to the behavior in order to receive PushButton_Activated, _Enabled and _Disabled messages.  A two-way messaging system allows for cleaning up object references before an object is destroyed." & RETURN & RETURN & "The behavior can be set to consider that all sprites in higher channels either block or let through all mouse events.  If mouse events are allowed to pass, you can place blended sprites above the button to change its color.  If mouse events are blocked, such translucent sprites provide an alternative method for disabling the button." & RETURN & RETURN & "PERMITTED MEMBER TYPES" & RETURN & PermittedMemberTypes(me) & RETURN & RETURN & "PARAMETERS:" & RETURN & "* Standard member (when mouse is elsewhere)" & RETURN & "* Rollover member" & RETURN & "* MouseDown member" & RETURN & "* Disabled member" & RETURN & "Optional parameters:" & RETURN & "* MouseDown sound" & RETURN & "* MouseUp sound" & RETURN & "If members are placed consecutively in the cast in this order then default values can be used to create the button." & RETURN & RETURN & "* Do sprites above the button allow mouse events through?" & RETURN & "* Custom Message sent to other sprites on mouseUp"
  5. end
  6.  
  7. on getBehaviorTooltip me
  8.   return "Use with graphic members." & RETURN & RETURN & "+ Swaps the member of the sprite according to the state of the mouse" & RETURN & "+ Can play a brief sound on mouseDown and/or mouseUp" & RETURN & "+ Sends a custom message of your choice to all other sprites." & RETURN & RETURN & "Trigger actions of other sprites with this dynamic button behavior" & RETURN & "or use it to provide visual feedback for other behaviors on the same" & RETURN & "sprite (for example: 'Jump to Marker Button')." & RETURN & "This behavior can also interact with custom objects."
  9. end
  10.  
  11. on beginSprite me
  12.   Initialize(me)
  13. end
  14.  
  15. on prepareFrame me
  16.   if myActiveFlag then
  17.     CheckForRollover(me)
  18.   end if
  19. end
  20.  
  21. on endSprite me
  22.   call(#PushButton_ClosingDown, mySubscribersList, me, spriteNum, myMessage)
  23. end
  24.  
  25. on Initialize me
  26.   mySprite = sprite(me.spriteNum)
  27.   myMember = mySprite.member
  28.   if not voidp(getPDLError) then
  29.     ErrorAlert(me, #getPDL_Invalid, myMember.type)
  30.   end if
  31.   repeat while the last char in myMessage = SPACE
  32.     delete char -30000 of myMessage
  33.   end repeat
  34.   if myMessage contains SPACE then
  35.     ErrorAlert(me, #spaceInMessage, myMessage)
  36.   end if
  37.   myMessage = symbol(myMessage)
  38.   myActiveFlag = myActiveFlag = #Active
  39.   myXRayFlag = myXRayFlag = "let all mouse events through"
  40.   myStandardMember = value(myStandardMember)
  41.   myRolloverMember = value(myRolloverMember)
  42.   myMouseDownMember = value(myMouseDownMember)
  43.   myDisabledMember = value(myDisabledMember)
  44.   myMouseDownSound = value(myMouseDownSound)
  45.   myMouseUpSound = value(myMouseUpSound)
  46.   if myActiveFlag then
  47.     myMember = myStandardMember
  48.     mySprite.member = myMember
  49.   else
  50.     myMember = myDisabledMember
  51.     mySprite.member = myMember
  52.   end if
  53.   mySubscribersList = []
  54.   sendAllSprites(#PushButton_OpenForBusiness, mySubscribersList, me, spriteNum, myMessage)
  55. end
  56.  
  57. on CheckForRollover me
  58.   mouseOverMe = rollOver(spriteNum)
  59.   if mouseOverMe then
  60.     if not myXRayFlag then
  61.       mouseOverMe = the mouseMember = myMember
  62.     end if
  63.   end if
  64.   if myRollover = mouseOverMe then
  65.     if theMouseWasUp = the mouseUp then
  66.       exit
  67.     else
  68.       theMouseWasUp = the mouseUp
  69.       if mouseOverMe then
  70.         if the mouseUp then
  71.           if myMouseDown then
  72.             Activate(me)
  73.           else
  74.             myMember = myRolloverMember
  75.             mySprite.member = myMember
  76.           end if
  77.         else
  78.           clickOn(me)
  79.         end if
  80.       else
  81.         if the mouseUp then
  82.           if myMouseDown then
  83.             Disactivate(me)
  84.           end if
  85.         end if
  86.       end if
  87.     end if
  88.   else
  89.     myRollover = mouseOverMe
  90.     if myMouseDown then
  91.       if myRollover then
  92.         myMember = myMouseDownMember
  93.         mySprite.member = myMember
  94.       else
  95.         myMember = myStandardMember
  96.         mySprite.member = myMember
  97.       end if
  98.     else
  99.       if not (the mouseDown) and myRollover then
  100.         myMember = myRolloverMember
  101.         mySprite.member = myMember
  102.       else
  103.         myMember = myStandardMember
  104.         mySprite.member = myMember
  105.       end if
  106.     end if
  107.   end if
  108. end
  109.  
  110. on clickOn me
  111.   myMouseDown = 1
  112.   myMember = myMouseDownMember
  113.   mySprite.member = myMember
  114.   if not voidp(myMouseDownSound) then
  115.     puppetSound(myMouseDownSound)
  116.   end if
  117.   updateStage()
  118. end
  119.  
  120. on Activate me
  121.   myMouseDown = 0
  122.   theMouseWasUp = 0
  123.   myMember = myStandardMember
  124.   mySprite.member = myMember
  125.   if not voidp(myMouseUpSound) then
  126.     puppetSound(myMouseUpSound)
  127.   end if
  128.   updateStage()
  129.   sendAllSprites(myMessage, me, spriteNum)
  130.   call(#PushButton_Activated, mySubscribersList, me, spriteNum, myMessage)
  131. end
  132.  
  133. on Disactivate me
  134.   myMouseDown = 0
  135.   myMember = myStandardMember
  136.   mySprite.member = myMember
  137. end
  138.  
  139. on PushButton_ToggleActive me, trueOrFalse
  140.   if voidp(trueOrFalse) then
  141.     myActiveFlag = not myActiveFlag
  142.   else
  143.     case ilk(trueOrFalse) of
  144.       #integer:
  145.         myActiveFlag = trueOrFalse <> 0
  146.       otherwise:
  147.         return #invalidTypeError
  148.     end case
  149.   end if
  150.   if myActiveFlag then
  151.     myMember = myStandardMember
  152.     mySprite.member = myMember
  153.     call(#PushButton_Enabled, mySubscribersList, me, spriteNum, myMessage)
  154.   else
  155.     myMember = myDisabledMember
  156.     mySprite.member = myMember
  157.     call(#PushButton_Disabled, mySubscribersList, me, spriteNum, myMessage)
  158.   end if
  159. end
  160.  
  161. on PushButton_GetReference me, theList
  162.   case ilk(theList) of
  163.     #list:
  164.       theList.append(me)
  165.     #propList:
  166.       theList.addProp(me.spriteNum, me)
  167.     otherwise:
  168.       return me
  169.   end case
  170.   return theList
  171. end
  172.  
  173. on PushButton_Subscribe me, callingBehavior, theMessage
  174.   if not voidp(theMessage) then
  175.     if theMessage <> myMessage then
  176.       exit
  177.     end if
  178.   end if
  179.   if mySubscribersList.getPos(callingBehavior) then
  180.     exit
  181.   else
  182.     if objectp(callingBehavior) then
  183.       mySubscribersList.append(callingBehavior)
  184.       return me
  185.     end if
  186.   end if
  187. end
  188.  
  189. on PushButton_Unsubscribe me, callingBehavior
  190.   mySubscribersList.deleteOne(callingBehavior)
  191. end
  192.  
  193. on ErrorAlert me, theError, data
  194.   case theError of
  195.     #getPDLError:
  196.       alert("Error: This behavior works only with the following members types:  " & PermittedMemberTypes(me) & RETURN & RETURN & "Hit OK and then delete this behavior from the sprite.  See the Help system for details on deleting behaviors.")
  197.       if the optionDown then
  198.         return [#getPDLError: [#comment: "ERROR:   Wrong member type.   Click 'Cancel'.", #format: #string, #range: [EMPTY], #default: EMPTY]]
  199.       end if
  200.     otherwise:
  201.       case theError of
  202.         #invalidMemberType:
  203.           if the runMode = "Author" then
  204.             behaviorName = string(me)
  205.             delete word 1 of behaviorName
  206.             delete char -30001 of behaviorName
  207.             delete char -30001 of behaviorName
  208.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & RETURN & "Behavior " & behaviorName & " only works with Field and Text members." & RETURN & RETURN & "Current member type = #" & data)
  209.           end if
  210.           abort()
  211.         #spaceInMessage:
  212.           if the runMode = "Author" then
  213.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & "Behavior " & behaviorName & RETURN & RETURN & "Message includes spaces: " & QUOTE & data & QUOTE & RETURN & "Only the first word will be used in sendAllSprite calls:" & RETURN & RETURN & "sendAllSprites (#" & data.word[1] & ", <me>, " & spriteNum & ")")
  214.           end if
  215.       end case
  216.   end case
  217. end
  218.  
  219. on getPropertyDescriptionList me
  220.   if not (the currentSpriteNum) then
  221.     exit
  222.   end if
  223.   theMember = sprite(the currentSpriteNum).member
  224.   memberType = theMember.type
  225.   permittedTypes = PermittedMemberTypes(me)
  226.   if not permittedTypes.getPos(memberType) then
  227.     return ErrorAlert(me, #getPDLError, permittedTypes)
  228.   end if
  229.   theMemberNum = theMember.number
  230.   suitableMembersList = GetSuitableMembers(me, permittedTypes)
  231.   descriptionList = [#myStandardMember: [#comment: "- GRAPHICS - Standard member for sprite:", #format: #member, #range: suitableMembersList, #default: theMember], #myRolloverMember: [#comment: "Rollover member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 1)], #myMouseDownMember: [#comment: "MouseDown member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 2)], #myDisabledMember: [#comment: "Disabled member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 3)]]
  232.   soundsAvailable = GetSuitableMembers(me, [#sound])
  233.   if soundsAvailable.count() then
  234.     soundsAvailable.addAt(1, #none)
  235.     descriptionList.addProp(#myMouseDownSound, [#comment: "- SOUNDS - Sound to play on mouseDown:", #format: #sound, #range: soundsAvailable, #default: member(theMemberNum + 4)])
  236.     descriptionList.addProp(#myMouseUpSound, [#comment: "Sound to play on mouseUp:", #format: #sound, #range: soundsAvailable, #default: member(theMemberNum + 5)])
  237.   end if
  238.   descriptionList.addProp(#myActiveFlag, [#comment: "- INTERACTION - Button is initially", #format: #symbol, #range: [#Active, #inactive], #default: #Active])
  239.   descriptionList.addProp(#myXRayFlag, [#comment: "Sprites which cover the button", #format: #string, #range: ["block all mouse events", "let all mouse events through"], #default: 0])
  240.   descriptionList.addProp(#myMessage, [#comment: "One-word message on mouseUp:", #format: #string, #default: "Sprite_" & the currentSpriteNum & "_Clicked"])
  241.   return descriptionList
  242. end
  243.  
  244. on GetSuitableMembers me, permittedTypes
  245.   cursor(4)
  246.   suitableMembersList = []
  247.   maxCastLib = the number of castLibs
  248.   repeat with theCastLib = 1 to maxCastLib
  249.     maxMember = the number of castMembers of castLib theCastLib
  250.     repeat with memberNumber = 1 to maxMember
  251.       theMember = member(memberNumber, theCastLib)
  252.       if permittedTypes.getPos(theMember.type) then
  253.         if theMember.name = EMPTY then
  254.           suitableMembersList.append(theMember)
  255.           next repeat
  256.         end if
  257.         suitableMembersList.append(theMember.name)
  258.       end if
  259.     end repeat
  260.   end repeat
  261.   cursor(-1)
  262.   return suitableMembersList
  263. end
  264.  
  265. on PermittedMemberTypes me
  266.   return [#bitmap, #filmLoop, #flash, #movie, #picture, #quickTimeMedia, #shape, #vectorShape]
  267. end
  268.