Miscellaneous Handlers
Miscellaneous Handy Handlers
If you use the Dynamic Attachers, then use wfsRemoveScriptAndRunEndSprite
to remove the behavior.
wfsRemoveScriptAndRunEndSprite(theSpriteNum, theScriptName)
Function
This runs the endSprite handler of only theScriptName which is attached
to theSpriteNum, if theScriptName does indeed have an endSprite handler,
and then de-attaches the first instance of the script named theScriptName
from the sprite with spriteNum=theSpriteNum, if the script is indeed
attached to it. This handler will detach scripts attached to dynamic
and non-dynamic sprites. This handler first checks to see if the behavior
is attached (via a call to wfsScriptIsAttached). It returns 0 if the
script is not attached to theSpriteNum.
Parameters
theSpriteNum: This is the spritenum of the
sprite you want to remove the behavior from.
theScriptName: This is the (string) name
of the script you want de-attached.
Return Value
It returns 1 if the script was successfully de-attached, and 0 otherwise.
If there are multiple instances of the script attached to theSpriteNum,
then only the first instance is removed.
Example
theBooleanResult = wfsRemoveScriptAndRunEndSprite(4, "some behavior")
The below runs the endSprite handler, if it exists, in the "some
behavior" behavior attached to sprite 4 (if "some behavior"
is indeed attached to sprite 4), and then detaches the first instance
of this script from sprite 4 (if there are any such instances to detach).
wfsScriptIsAttached (theSpriteNum, theScriptName)
Function
This is for determining whether a particular script is attached to
a particular sprite. You can call wfsScriptIsAttached on dynamic and
static sprites.
Parameters
theSpriteNum: This is the spritenum of the
sprite you want to inspect.
theScriptName: This is the (string) name
of the script you want to check for.
Return Value
This returns an index into sprite(theSpriteNum).scriptInstanceList
at which the script named theScriptName is located, if the script is
indeed attached to theSpriteNum. It returns 0 otherwise. For instance,
if this handler returns 3, then sprite(theSpriteNum).scriptInstanceList[3]
is an instance of theScriptName.
Example
theResult=wfsScriptIsAttached(5, "some behavior")
The above determines whether the behavior named "some behavior"
is attached to sprite 5. If it is, then theResult will be a positive
integer indicating the index of the first instance of "some behavior"
in sprite(theSpriteNum).scriptInstanceList
wfsGetScriptNameList (theSpriteNum)
Function
Returns a list containing the names of the behaviors attached to theSpriteNum.
Parameters
theSpriteNum: The spritenum of the sprite you want to examine.
Return Value
A linear list of strings. The strings are the names of the behaviors
attached to theSpriteNum.
Example
theListResult = wfsGetScriptNameList(5)
The above returns a list of the names of the behaviors attached to
sprite 5.
wfsGenerateManagerName (theManagerName, theFamilyIdentifier)
Function
This is called by code generated by wfsWriteMultiSprite to generate
the name of a dynamic multi-sprite. The name of an instantiated multi-sprite
must be unique among all instantiated multi-sprites. This handler generates
a name that is unique among instantiated multi-sprites.
Also, if we dynamically generate a family of multi-sprites, there
may be links among them. For instance, menus generally open submenus
that are part of the same family. So the Script Writer has not only
to come up with a unique name, but it has to be cognizant of links
among the family.
Multi-sprites generated by code returned by wfsWriteMultiSpriteFamily
(which calls wfsGenerateManagerName with a non-void familyIdentifier
parameter) have names that have three components separated by the "+" symbol.
So these names are not really appropriate for display to the user.
The first component is the name of the static model multi-sprite. The
second component is the name of the multi-sprite at which you aimed
wfsWriteMultiSpriteFamily. The third component is a number indicating
the number of dynamic copies of this family.
Multi-sprites generated by code returned by wfsWriteMultiSprite
(which calls wfsGenerateManagerName with a VOID familyIdentifier
parameter) have names that have two components separated by the "+" symbol.
The first component is the name of the static model multi-sprite. The
second component is a number indicating the number of dynamic copies
of this multi-sprite.
Parameters
theManagerName is the string that names the multi-sprite on which
the dynamic multi-sprite is modelled.
theFamilyIdentifier is a parameter
that is VOID unless we are generating a family of multisprites. Note
that when wfsWriteMultispriteFamily calls wfsWriteMultiSprite, it
specifies theFamilyIdentifier.
Return Value
Returns a name you can name the dynamic multi-sprite with, ie, no
other instantiated multi-sprite will have this name.
Example
The code below was generated by wfsWriteMultiSprite. Note that it
makes a call to wfsGenerateManagerName before the dynamic manager is
created.
on wfsCreatemenu111E36F570 (familyIdentifier)
--This
is code generated by the wfsWriteMultiSprite handler located in the Script
--Writer
movie script. This code was generated to dynamically reproduce
--the
multi-sprite named "menu1,1,1" whose manager was located
--in
channel 36, frame 570. When you run this handler, it creates
--a
copy of the "menu1,1,1" multi-sprite. This handler returns the
spriteNum
--of
the manager of the resulting dynamic multi-sprite or 0 if there are
--not
enough available dynamic sprite channels to generate the multi-sprite.
--The
new multi-sprite's name will be generated by this handler since
--multi-sprite
names have to be unique. Use wfsGetManagerName(managerSpriteNum)
--on
the return value to see the name. You can call this handler multiple times
--in
your movie. Each time you call it, it creates a different copy of "menu1,1,1".
--Don't
specify any value for the 'familyidentifier' parameter. The
--'familyIdentifier'
parameter is used by wfsWriteMultiSpriteFamily output
--in
calls to wfsWriteMultiSprite output. Don't worry about it!
if wfsGetNumberOfDynamicAvailableChannels() >= 3 then
--Proceed
only if there are enough channels to create all of the multisprite.
theManagerName
= wfsGenerateManagerName("menu1,1,1", familyIdentifier)
--The
name will be different from the original'
--CREATE
A SPRITE AND INIT IT:*******************************************
theNewSpriteNum
= wfsCreateSprite(["Menu Manager bitmap", "WFS 4", 0, 0, 1, 1,
-82, -81, 1])
--parameters:
[member, cast, ink, blend, width, height, locH, locV, doNotCreateNewMember]
--If
you don't specify a value for doNotCreateNewMember, then a copy of the
member will be created.
theManagerSpritenum
= theNewSpriteNum
theScript=wfsAttachBehavior("Menu Manager",
theNewSpritenum, [#pWFSManagerName:
theManagerName, #pWFSParentName:
wfsAdjustParent("menu1,1", theManagerName, familyIdentifier)])
--CREATE
A SPRITE AND INIT IT:*******************************************
theNewSpriteNum
= wfsCreateSprite(["menu background", "7: Normal Menus", 0, 100, 101, 24, 290, 61, 1])
--parameters:
[member, cast, ink, blend, width, height, locH, locV, doNotCreateNewMember]
--If
you don't specify a value for doNotCreateNewMember, then a copy of the
member will be created.
theScript=wfsAttachBehavior("4: Window/Menu Element",
theNewSpritenum, [#pWFSManagerName:
theManagerName, #pWFSManagerSpriteNum:
theManagerSpriteNum])
--CREATE
A SPRITE AND INIT IT:*******************************************
theNewSpriteNum
= wfsCreateSprite(["modal dialog...", "7: Normal Menus", 36, 100, 87, 12, 292, 62, 1])
--parameters:
[member, cast, ink, blend, width, height, locH, locV, doNotCreateNewMember]
--If
you don't specify a value for doNotCreateNewMember, then a copy of the
member will be created.
theScript=wfsAttachBehavior("4: Window/Menu Element",
theNewSpritenum, [#pWFSManagerName:
theManagerName, #pWFSManagerSpriteNum:
theManagerSpriteNum])
theScript=wfsAttachBehavior("Menu Verb",
theNewSpritenum, [#pWFSOpenAMenu: "mouseUp", #pWFSNameOfMenuToOpen:
wfsComputeLink("1",
familyIdentifier), #pWFSMenuOpeningLocation: "Do not move it, just open it.", #pWFSHorizontalLeftOffset: 1, #pWFSHorizontalRightOffset: 1, #pWFSCloseMenuOnMouseEvent: "mouseUp"])
theScript=wfsAttachBehavior("Cursor Control",
theNewSpritenum, [#pWFSTypicalSettings: "Clickable", #pWFSMouseEnterDescription: "Standard System Arrow", #pWFSMouseDownDescription: "Standard System Arrow", #pWFSMouseUpDescription: "Standard System Arrow"])
--RETURN
THE SPRITENUM OF THE MANAGER:**********************************
return theManagerSpritenum
else
--Else
there aren't enough available channels to create the multi-sprite
return 0
end if
end
wfsAssembleTree (theManagerSpritenum)
This returns a list of the spritenums
of managers that are descendants of theManagerSpritenum, and the
list also includes theManagerSpritenum at the start. This handler is
recursive. It is called by wfsWriteMultiSpriteFamily.
wfsGetNumberOfSpritesInFamily (theManagerSpritenum)
This returns the number
of sprites in the family (tree) of multi-sprites rooted at theManagerSpriteNum.
This handler is called by wfsWriteMultiSpriteFamily.
wfsConcatenateLists (a, b)
This returns the concatenation of two linear
lists a and b.
wfsSearchAndReplace (input, stringToFind, stringToInsert)
This searches
input for occurrences of stringToFind and replaces them with stringToInsert.
It returns the search and replace string. For instance, wfsSearchAndReplace("abcd", "bc", "x")
would return "axd". |