home *** CD-ROM | disk | FTP | other *** search
/ Boot Disc 7 / boot-disc-1997-03.iso / Director.5 / DATA.Z / ANIMWIZ.DIR / 00010_Script_Credits < prev    next >
Text File  |  1996-03-15  |  18KB  |  533 lines

  1. -- Credits script
  2.  
  3. property ioFieldList
  4. property iFieldFocus
  5. property ioFieldFocus
  6. property iCurrentMotionStyleIndex
  7. property iCurrentVisualStyleIndex
  8.  
  9. -- The motion styles are:
  10. property ikMotionScrollingUp  -- 1
  11. property ikMotionIndividual  -- 2
  12.  
  13. property iFirstTIme
  14. property iSaveSeconds
  15. property iSaveFPS
  16. property iSaveDelayEnter
  17. property iSaveDelayHold
  18. property iSaveMark
  19. property iSaveCycles
  20.  
  21.  
  22. on birth me
  23.   global goCreditsText
  24.   global goSeconds
  25.   global goFPS
  26.   global goDelayEnter
  27.   global goDelayHold
  28.   -- global goCycles
  29.   
  30.   set ioFieldList = [goCreditsText, goSeconds, goFPS, goDelayEnter, goDelayHold]
  31.   set ikMotionScrollingUp = 1
  32.   set ikMotionIndividual = 2
  33.   
  34.   set iCurrentMotionStyleIndex = ikMotionScrollingUp
  35.   set iCurrentVisualStyleIndex = 1
  36.   set iFieldFocus = 1
  37.   set iFirstTime = TRUE
  38.   
  39.   return me
  40. end birth
  41.  
  42. on mInit me
  43.   global goSeconds
  44.   global goFPS
  45.   global goDelayEnter
  46.   global goDelayHold
  47.   --global goCycles
  48.   global goCredits
  49.   global goMarkFrame
  50.   global goVisualStyles
  51.   global goMotionStyles
  52.   global goScoreMgr
  53.   global goAnimateTitle
  54.   
  55.   -- CheckMark parameter: channel
  56.   mInit(goMarkFrame, 4)  -- channel
  57.   
  58.   if iFirstTime then  -- use intellegent defaults
  59.     mSetValue(goSeconds, 5)
  60.     mSetValue(goFPS, 5)
  61.     mSetValue(goDelayEnter, 5)
  62.     mSetValue(goDelayHold, 0)
  63.     --  mSetValue(goCycles, 1)
  64.     mSetValue(goMarkFrame, TRUE)
  65.     set iFirstTime = FALSE
  66.   else  -- use values saved from when we last left
  67.     mSetValue(goSeconds, iSaveSeconds)
  68.     mSetValue(goFPS, iSaveFPS)
  69.     mSetValue(goDelayEnter, iSaveDelayEnter)
  70.     mSetValue(goDelayHold, iSaveDelayHold)
  71.     --mSetValue(goCycles, iSaveCycles)
  72.     mSetValue(goMarkFrame, iSaveMark)
  73.   end if
  74.   
  75.   set ioFieldFocus = GetAt(ioFieldList, iFieldFocus)
  76.   
  77.   -- RadioButtons parameters: channel, nChannels, rightAnswer, default
  78.   set goMotionStyles = 0
  79.   set goMotionStyles = birth(script "RadioButton",  26, 2, 0, iCurrentMotionStyleIndex)
  80.   
  81.   -- VisualStyles Params: castNum, default, nItems, channel
  82.   if the machineType < 256 then
  83.     mInit(goVisualStyles, the number of cast "CreditsVisualStylesMac", ¼
  84.                iCurrentVisualStyleIndex, 8, 19)
  85.   else
  86.     mInit(goVisualStyles, the number of cast "CreditsVisualStylesPC", ¼
  87.                iCurrentVisualStyleIndex, 8, 19)
  88.   end if
  89.   
  90.   -- For keystroke validity checking
  91.   set the keydownscript =  "mCheckKey(goCredits)"
  92.   
  93. end mInit 
  94.  
  95. on mSetFieldFocus me, oWhom
  96.   set where = getOne(ioFieldList, oWhom)
  97.   if where = 0 then
  98.     alert("Internal error - mSetFieldFocus could not find object")
  99.     return
  100.   end if
  101.   
  102.   set iFieldFocus = where  
  103.   set ioFieldFocus = GetAt(ioFieldList, iFieldFocus)
  104.   
  105. end mSetFieldFocus
  106.  
  107. on mCheckKey me
  108.   if the Key = TAB then -- change focus to the next field
  109.     set iFieldFocus = IncrMod(iFieldFocus, count(ioFieldList))
  110.     set ioFieldFocus = GetAt(ioFieldList, iFieldFocus)
  111.     pass  -- pass the event so the hilight goes to the next field  
  112.   else
  113.     if iFieldFocus = 1 then -- the text entry field, allow anything
  114.       pass
  115.     else  -- numeric fields, only allow digits
  116.       if (offset(the key, "0123456789") > 0) or (the key = BACKSPACE)  then
  117.         pass
  118.       else
  119.         dontPassEvent -- restrict only to digits.
  120.       end if
  121.     end if
  122.   end if
  123. end mCheckKey
  124.  
  125. on mSetNewMotionStyle me, theNewStyleIndex
  126.   set iCurrentMotionStyleIndex = theNewStyleIndex
  127. end mSetNewMotionStyle
  128.  
  129. on mSetNewVisualStyle me, theNewStyleIndex
  130.   set iCurrentVisualStyleIndex = theNewStyleIndex
  131. end mSetNewVisualStyle
  132.  
  133.  
  134.  
  135. on mValidate me
  136.   -- Attempt to validate the last field of focus
  137.   set lastFieldOKFlag = mValidate(ioFIeldFocus)
  138.   return lastFieldOKFlag
  139. end mValidate
  140.  
  141. -- Check to ensure that all lines have a colon in them
  142. on mCheckFormat me
  143.   set theText = field("CreditsText")
  144.   set nLines = the number of lines in theText
  145.   repeat with thisLine = 1 to nLines
  146.     if offset(":",  line thisLine of field("CreditsText")) = 0 then
  147.       alert("Line" && thisLine && "of the Credits text does not contain a colon.")
  148.       return FALSE
  149.     end if   
  150.   end repeat
  151.   return TRUE
  152. end mCheckFormat
  153.  
  154.  
  155. on mParseLine me, theLineToParse, theHeaderFont, theHeaderSize, theBodyFont, theBodySize
  156.   global gCastNumTextAsBitmap
  157.   
  158.   set where = offset(":", theLineToParse)
  159.   set theHeaderText = char 1 to where of theLineToParse
  160.   set nChars = the number of chars in theLineToParse
  161.   set theBodyText = char (where + 1) to nChars of theLineToParse
  162.   
  163.   
  164.   set castNumHeader = mModifyRichTextCM(goCastMgr, ¼
  165.                 theHeaderText, theHeaderFont, theHeaderSize)
  166.   if castNumHeader = 0 then  -- error
  167.     return FALSE
  168.   end if  
  169.   
  170.   -- The following does an effective "Convert to bitmap" into a 
  171.   -- known bitmap cast member to get size info.
  172.   set the picture of member gCastNumTextAsBitmap = ¼
  173.         the picture of member castNumHeader
  174.   set widthHeader = the width of member gCastNumTextAsBitmap
  175.   set heightHeader = the height of member castNumHeader / ¼
  176.                                                 the number of lines in (the text of member castNumHeader)
  177.   
  178.   --  Create a cast member in the stage movie  
  179.   set castNumHeaderTarget = mFindFreeCastRun(goCastMgr, 1, 1)
  180.   copyToClipBoard member castNumHeader
  181.   tell the stage
  182.     pasteClipboardInto member castNumHeaderTarget
  183.     set the name of member castNumHeaderTarget  = "RichText" && string(the ticks)
  184.   end tell
  185.   
  186.   -- And again for the Body
  187.   set castNumBody = mModifyRichTextCM(goCastMgr, ¼
  188.                 theBodyText, theBodyFont, theBodySize)
  189.   if castNumBody = 0 then  -- error
  190.     return FALSE
  191.   end if  
  192.   
  193.   set the picture of member gCastNumTextAsBitmap = ¼
  194.         the picture of member castNumBody
  195.   set widthBody = the width of member gCastNumTextAsBitmap
  196.   set heightBody = the height of member castNumBody / ¼
  197.                                                 the number of lines in (the text of member castNumBody)
  198.   
  199.   --  Create a cast member in the stage movie  
  200.   set castNumBodyTarget = mFindFreeCastRun(goCastMgr, 1, 1)
  201.   copyToClipBoard member castNumBody
  202.   tell the stage
  203.     pasteClipboardInto member castNumBodyTarget
  204.     set the name of member castNumBodyTarget  = "RichText" && string(the ticks)
  205.   end tell
  206.   return [castNumHeaderTarget, castNumBodyTarget, widthHeader, heightHeader,¼
  207.               widthBody, heightBody]
  208. end mParseLine
  209.  
  210. on mSplitAndCreate2 me, theTextToParse, theHeaderFont, theHeaderSize, ¼
  211.   theBodyFont, theBodySize
  212.   global gCastNumTextAsBitmap
  213.   
  214.   
  215.   set nLines = the number of lines in theTextToParse
  216.   set theHeaderText = ""
  217.   set theBodyText = ""
  218.   repeat with thisLine = 1 to nLines
  219.     set theLineToParse = line thisLine of theTextToParse
  220.     set where = offset(":", theLineToParse)
  221.     set theHeaderPart = char 1 to where of theLineToParse
  222.     set nChars = the number of chars in theLineToParse
  223.     set theBodyPart = char (where + 1) to nChars of theLineToParse
  224.     
  225.     if thisLine > 1 then
  226.       set theHeaderText = theHeaderText & RETURN
  227.       set theBodyText = theBodyText & RETURN
  228.     end if
  229.     set theHeaderText = theHeaderText & theHeaderPart
  230.     set theBodyText = theBodyText & theBodyPart
  231.   end repeat
  232.   
  233.   set castNumHeader = mModifyRichTextCM(goCastMgr, ¼
  234.                 theHeaderText, theHeaderFont, theHeaderSize)
  235.   if castNumHeader = 0 then  -- error
  236.     return FALSE
  237.   end if  
  238.   
  239.   -- The following does an effective "Convert to bitmap" into a 
  240.   -- known bitmap cast member to get size info.
  241.   set the picture of member gCastNumTextAsBitmap = ¼
  242.         the picture of member castNumHeader
  243.   set widthHeader = the width of member gCastNumTextAsBitmap
  244.   set heightHeader = the height of member castNumHeader
  245.   
  246.   --  Create a cast member in the stage movie  
  247.   set castNumHeaderTarget = mFindFreeCastRun(goCastMgr, 1, 1)
  248.   copyToClipBoard member castNumHeader
  249.   tell the stage
  250.     pasteClipboardInto member castNumHeaderTarget
  251.     set the name of member castNumHeaderTarget  = "RichText" && string(the ticks)
  252.   end tell
  253.   
  254.   -- And again for the Body
  255.   set castNumBody = mModifyRichTextCM(goCastMgr, ¼
  256.                 theBodyText, theBodyFont, theBodySize)
  257.   if castNumBody = 0 then  -- error
  258.     return FALSE
  259.   end if  
  260.   
  261.   set the picture of member gCastNumTextAsBitmap = ¼
  262.         the picture of member castNumBody
  263.   set widthBody = the width of member gCastNumTextAsBitmap
  264.   set heightBody = the height of member castNumBody 
  265.   
  266.   --  Create a cast member in the stage movie  
  267.   set castNumBodyTarget = mFindFreeCastRun(goCastMgr, 1, 1)
  268.   copyToClipBoard member castNumBody
  269.   tell the stage
  270.     pasteClipboardInto member castNumBodyTarget
  271.     set the name of member castNumBodyTarget  = "RichText" && string(the ticks)
  272.   end tell
  273.   return [castNumHeaderTarget, castNumBodyTarget, widthHeader, heightHeader,¼
  274.               widthBody, heightBody]
  275. end mSplitAndCreate2
  276.  
  277. on mCreate me
  278.   global goMarkFrame
  279.   global goMotionStyles
  280.   global goVisualStyles
  281.   global goScoreMgr
  282.   global goCastMgr
  283.   global gDevelopmentFlag
  284.   global gCastNumTextAsBitmap
  285.   
  286.   if not(mValidate(me)) then
  287.     return
  288.   end if
  289.   if the last char of field "CreditsText" = RETURN then
  290.     delete the last char of field "CreditsText"
  291.   end if
  292.   if field("CreditsText") = EMPTY then
  293.     alert("Please enter some text for the Credit.")
  294.     return
  295.   end if
  296.   if not(mCheckFormat(me)) then
  297.     return
  298.   end if
  299.   
  300.   
  301.   tell the stage
  302.     set theStageFrame = the frame
  303.   end tell
  304.   
  305.   set castNumVisualStyle = mGetCastNum(goVisualStyles, iCurrentVisualStyleIndex)
  306.   set theVisualStyleName = the name of cast castNumVisualStyle
  307.   set theHeaderFont = word 2 of theVisualStyleName
  308.   set theHeaderSize = word 3 of theVisualStyleName
  309.   set theBodyFont = word 4 of theVisualStyleName
  310.   set theBodySize = word 5 of theVisualStyleName
  311.   set theSeconds = integer(field "Seconds")
  312.   
  313.   set fps = integer(field "FPS")
  314.   set nFrames = integer(theSeconds * fps)
  315.   set delayEnter = integer(field "DelayEnter")
  316.   set delayHold = integer(field "DelayHold")
  317.   --  set nCycles = integer(field "Cycles")
  318.   set markFirst = mGetValue(goMarkFrame)
  319.   
  320.   
  321.   set theForeColor  = 255
  322.   set theBackColor  = 0
  323.   
  324.   if (iCurrentMotionStyleIndex = ikMotionScrollingUp)   then 
  325.     set thisList = mSplitAndCreate2(me, field "CreditsText",¼
  326.                            theHeaderFont, theHeaderSize, theBodyFont, theBodySize)
  327.     if thisList = FALSE then --error
  328.       return
  329.     end if
  330.     -- thisList contains the following for the line:
  331.     --  [castNumHeaderTarget, castNumBodyTarget, widthHeader, heightHeader,¼
  332.               widthBody, heightBody]
  333.     set castNumHeader = getAt(thisList, 1)
  334.     set castNumBody = getAt(thisList, 2)
  335.     set theWidthHeader = getAt(thisList, 3)
  336.     set theHeightHeader = getAt(thisList, 4)
  337.     set theWidthBody = getAt(thisList, 5)
  338.     set theHeightBody = getAt(thisList, 6)
  339.     
  340.     -- Call the ScoreMgr to set up the score, # of frames, and 2 channel
  341.     --    set nTotalFrames = delayEnter + nFrames 
  342.     if delayEnter > 0 then
  343.       set nTotalFrames = nFrames + 1
  344.     else set nTotalFrames = nFrames
  345.     if not(mInit(goScoreMgr, nTotalFrames, 2)) then
  346.       return
  347.     end if
  348.     
  349.     set chHeader = mGetNextSelectedChannel(goScoreMgr)
  350.     set chBody = mGetNextSelectedChannel(goScoreMgr)
  351.     set theFrameNum = mGetStartFrame(goScoreMgr)
  352.     
  353.     -- Mark first frame upon request
  354.     if markFirst  then
  355.       set theLabel  = "AW.Credit." & word 1 of the text of field "CreditsText" & " " & ¼
  356.               mGetGeneratedScoreSelection(goScoreMgr)
  357.       mWriteFrameLabel(goScoreMgr, theFrameNum, theLabel)
  358.     end if
  359.     
  360.     -- Insert delay at entry upon request  
  361.     --    if  delayEnter > 0  then 
  362.     --      mWriteFrameDelay(goScoreMgr, theFrameNum, delayEnter)
  363.     --      set theFrameNum = theFrameNum + delayEnter
  364.     --    end if
  365.     
  366.     if delayEnter > 0 then
  367.       mWriteFrameDelay(goScoreMgr, theFrameNum, delayEnter)
  368.       mWriteFrameTempo(goScoreMgr, (theFrameNum + 1), fps)
  369.       set theFrameNum to theFrameNum + 1
  370.     else 
  371.       mWriteFrameTempo(goScoreMgr, theFrameNum , fps)
  372.       mWriteFrameTempo(goScoreMgr, (theFrameNum + 1), 0)
  373.     end if
  374.     
  375.     --    mWriteFrameTempo(goScoreMgr, theFrameNum, fps)
  376.     set theStageWidth = mGetStageWidth(goScoreMgr)
  377.     set theStageHeight = mGetStageHeight(goScoreMgr)
  378.     set totalTextWidth = theWidthHeader + theWidthBody
  379.     set xLocHeader = integer((theStageWidth / 2) - (totalTextWidth / 2))
  380.     set xLocBody = integer(xLocHeader + theWidthHeader)
  381.     
  382.     set maxHeight = max(theHeightHeader, theHeightBody)
  383.     set yStart = theStageHeight - 10
  384.     set yEnd = 0 - maxHeight - 10 
  385.     set yInc = float( yEnd - yStart ) / float(nFrames) 
  386.     
  387.     -- Generate the score fragment
  388.     --repeat with thisCycle = 1 to nCycles
  389.     set yLoc = yStart
  390.     tell the stage
  391.       beginRecording
  392.         
  393.         repeat with thisFrame = 1 to nFrames
  394.           -- put theFrameNum &&theCh && castNumberTarget  && xLoc && yLoc     
  395.           mWriteSpriteRange(goScoreMgr, theFrameNum, chHeader, castNumHeader, ¼
  396.                      theForeColor, theBackColor, xLocHeader, yLoc, 0, 0)      
  397.           mWriteSpriteRange(goScoreMgr, theFrameNum, chBody, castNumBody, ¼
  398.                      theForeColor, theBackColor, xLocBody, yLoc, 0, 0)      
  399.           set theFrameNum = theFrameNum + 1
  400.           set yLoc = integer(yLoc + yInc)
  401.         end repeat
  402.         
  403.       endRecording
  404.     end tell
  405.   else  -- ikMotionIndividual
  406.     -- Call the ScoreMgr to set up the score, # of frames, and 2 channels
  407.     
  408.     set nSourceLines = the number of lines in field "CreditsText"
  409.     --    set nFrames = (delayEnter + delayHold) * nSourceLines
  410.     set nFrames = (delayEnter  + 1)*nSourceLines
  411.     if not(mInit(goScoreMgr, nFrames, 2)) then
  412.       return
  413.     end if
  414.     
  415.     set maxHeaderWidth = 0
  416.     set maxBodyWidth = 0
  417.     set castNumList = []
  418.     repeat with thisLine = 1 to nSourceLines
  419.       set thisList = mParseLine(me, line thisLine of field "CreditsText",¼
  420.                            theHeaderFont, theHeaderSize, theBodyFont, theBodySize)
  421.       if thisList = FALSE then --error
  422.         return
  423.       end if
  424.       -- thisList contains the following for the line:
  425.       --  [castNumHeaderTarget, castNumBodyTarget, widthHeader, heightHeader,¼
  426.               widthBody, heightBody]
  427.       set thisCastNumHeaderTarget = getAt(thisList, 1)
  428.       set thisCastNumBodyTarget = getAt(thisList, 2)
  429.       set thisWidthHeader = getAt(thisList, 3)
  430.       set thisHeightHeader = getAt(thisList, 4)
  431.       set thisWidthBody = getAt(thisList, 5)
  432.       set thisHeightBody = getAt(thisList, 6)
  433.       if thisWidthHeader > maxHeaderWidth then
  434.         set maxHeaderWidth  = thisWidthHeader
  435.       end if
  436.       if thisWidthBody > maxBodyWidth then
  437.         set maxBodyWidth  = thisWidthBody
  438.       end if
  439.       add(castNumList, [thisCastNumHeaderTarget, thisCastNumBodyTarget])
  440.     end repeat
  441.     
  442.     set theForeColor  = 255
  443.     set theBackColor  = 0
  444.     
  445.     set chHeader = mGetNextSelectedChannel(goScoreMgr)
  446.     set chBody = mGetNextSelectedChannel(goScoreMgr)
  447.     set theFrameNum = mGetStartFrame(goScoreMgr)
  448.     
  449.     -- Mark first frame upon request
  450.     if markFirst  then
  451.       set theLabel  = "AW.Credit." & word 1 of the text of field "CreditsText" & " " & ¼
  452.               mGetGeneratedScoreSelection(goScoreMgr)
  453.       mWriteFrameLabel(goScoreMgr, theFrameNum, theLabel)
  454.     end if
  455.     
  456.     set theStageWidth = mGetStageWidth(goScoreMgr)
  457.     set theStageHeight = mGetStageHeight(goScoreMgr)
  458.     set totalTextWidth = maxHeaderWidth + maxBodyWidth
  459.     set xLocHeader = integer((theStageWidth / 2) - (totalTextWidth / 2))
  460.     set xLocBody = integer(xLocHeader + maxHeaderWIdth)
  461.     set yLoc = integer(theStageHeight / 2)
  462.     
  463.     repeat with thisLine = 1 to nSourceLines
  464.       mWriteFrameTempo(goScoreMgr, theFrameNum, fps)
  465.       set thisCastNumList = getAt(castNumList, thisLine)
  466.       set castNumHeader = getAt(thisCastNumList, 1)
  467.       set castNumBody = getAt(thisCastNumList, 2)            
  468.       
  469.       tell the stage
  470.         beginRecording
  471.           
  472.           repeat with thisFrame = 1 to delayEnter
  473.             
  474.             -- Generate the score fragment
  475.             -- put theFrameNum &&theCh && castNumberTarget  && xLoc && yLoc     
  476.             mWriteSpriteRange(goScoreMgr, theFrameNum, chHeader, castNumHeader, ¼
  477.                      theForeColor, theBackColor, xLocHeader, yLoc, 0, 0)      
  478.             mWriteSpriteRange(goScoreMgr, theFrameNum, chBody, castNumBody, ¼
  479.                      theForeColor, theBackColor, xLocBody, yLoc, 0, 0)      
  480.             set theFrameNum = theFrameNum + 1
  481.           end repeat
  482.           
  483.         endRecording
  484.       end tell
  485.       
  486.       if  delayHold > 0  then 
  487.         mWriteFrameDelay(goScoreMgr, theFrameNum , delayHold)
  488.         mWriteSprite(goScoreMgr, theFrameNum, chHeader, castNumHeader, ¼
  489.                      theForeColor, theBackColor, xLocHeader, yLoc, 0, 0)      
  490.         mWriteSprite(goScoreMgr, theFrameNum, chBody, castNumBody, ¼
  491.                      theForeColor, theBackColor, xLocBody, yLoc, 0, 0)  
  492.         set theFrameNum = theFrameNum + 1
  493.         --****           set theFrameNum = theFrameNum + delayHold
  494.         
  495.       end if  
  496.     end repeat
  497.   end if
  498.   
  499.   go  label("Credits") + 2  -- to display reselect button
  500.   
  501.   if not(gDevelopmentFlag) then
  502.     tell the stage
  503.       go frame theStageFrame
  504.     end tell
  505.   end if 
  506.   
  507.   mClean(goScoreMgr)
  508.   
  509. end mCreate
  510.  
  511.  
  512.  
  513. on mCleanup me
  514.   global goMotionStyles
  515.   global goSeconds
  516.   global goFPS
  517.   global goDelayEnter
  518.   global goDelayHold
  519.   --global goCycles
  520.   global goMarkFrame
  521.   
  522.   mCleanup(goMotionStyles)
  523.   
  524.   set iSaveSeconds =  mGetValue(goSeconds)
  525.   set iSaveFPS = mGetValue(goFPS)
  526.   set iSaveDelayEnter = mGetValue(goDelayEnter)
  527.   set iSaveDelayHold = mGetValue(goDelayHold)
  528.   --set iSaveCycles = mGetValue(goCycles)  
  529.   set iSaveMark = mGetValue(goMarkFrame)  
  530.   mCleanup(goMarkFrame)
  531. end mCleanup
  532.  
  533.