Artiste Thrower
A throw is meant to provide the ability for a performer to interact with propelled objects.
You could sail an object across a room like a frisbee. You can land an object onto another object. You can stop an object in mid-flight. You can propel an object, causing it to knock over one or more objects. You can case a propelled object to break another object into pieces. You can tumble an object end-over-end. You could bounce an object off the floor. You can catch a thrown object using a ‘catcher-like’ feature or the attach feature. You can change speeds in mid-flight. It is bounded only by your imagination.
A throw command starts a throw sequence. A throw is the propelling of an object based on either gravity or a targeting.
Gravity causes more of an arc in the trajectory while targeting presents a near-flat trajectory.
It offers a choice of propulsion methods, rotation methods, in-flight options, and termination-dispositions. Its power comes from using invisible objects to cause collisions at specific times in order to trigger extra events as well as its ability to attach to an avatar.
The specifications of a throw are based upon:
1) entries on the *thrower nc
2) the use of contraptions, otherwise known as unscripted non-physical objects, properly-placed.
3) well-timed triggering of one or more throw commands.
4) one or more animations that help sell the throw and/or catch of the feature.
Although you can do a basic throw/toss of an object, you can also: land, carom, boomerang, catch, bounce, stop-action, ricochet, kick, shoot, dribble, as hinted at earlier on.
There are 3 sets of primary commands throw1, throw2, and throw3 that determine which pair of velocity./rotation pairs will start a throw sequence.
A throw sequence consists of:
1) movement
2) rotation
3) cessation
4) ending disposition
5) termination concesquences
Format:
02_A%throw1 — this will throw palette 02_A using the entries on the *thrower nc called:
ApplyImpulse and AngularVelocity. This is the one (throw1) you will use most of the time. Using a 2nd throw, say throw2, would be in a palette that was thrown from throw1 and it would use ApplyImpulse2 and AngularVelocity2, assuming you chose gravity and not targeting.
Most important is to ‘have a good reason’ to use a throw and a proper context. Second most important is your imagination as to how to present and incorporate a throw into your routine at the right time and place.
Below are the entries on the *thrower nc. Learn them on a need-to-know basis.
*thrower nc
TRACE,off
/**** Thrower ****
AutoReturn,10
Boomerang,off
BoomHoverDelay,1.0
CollisionPostActions1,off
CollisionPostActions2,off
CollisionPostActions3,off
IgnoreFirstCollision,off
RangePostActions,off
/* ThrowingBodyPart 2=Skull,5=LHand,6=RHand,7=LFoot,8=RFoot
Receiver,0
RemoveFolder
RemoveFolderDelay
RezMe,off
Richochet,off
ShowInMidFlightAfter,0.25
TempRezMe,off
ThrowOnCollide
/* Rezzer
Rezzer,off
RezInvisiDelay
RezObjectName
RezSource
Thrower0123OnRez
/* Targets ThrowerTarget=Object/Avatar/Both/off – avatar must be Owner for owner
DirectionalVector,Local
ThrowerTarget,off
ThrowerObjectTargetName1,HatTargetB1
ThrowerObjectTargetName2,HatTargetB2
ThrowerAvatarTargetName
/*Motions – only one usually
SetApplyImpulse,off
/*llApplyImpulse(llGetMass()*<0,2.0,2.66>,TRUE);
ApplyImpulse,<0,1.0,1.0>
ApplyImpulse2,<0,-0.5,1.5>
ApplyImpulse3,<0.0,-8.0,6.0>
SetMoveToTarget,off
/* Make Tau smaller for more rushed following
MoveToTargetTau,2
AtTargetRange,0.5
SetVelocity,on
Velocity,<0,2,2.66>
/*rotations – only one
SetAngularVelocity,off
AngularVelocity,<0.0,0.0,0.0>
AngularVelocity2,<0.0,0.0,0.0>
AngularVelocity3,<0.0,0.0,0.0>
/*PreOrientRot,off
SetTargetOmega,off
/*StartRotOffset,(Full/Half)
/*llTargetOmega(<1.0,0.0,0.0>,TWO_PI,2.0);
TargetOmega,<1.0,0.0,0.0>,6.283185,2.0>
/*Posts Collision
AttachOnCollide,off,5
/*ControlOnCollide,on,SoccerBall4,Hide,ALL,3.0
ChatOnCollide,off
ChatOffCollide,off
ControlOnCollide,off,SoccerBall4,detach
ControlOnCollideDelay
DieOnCollide,off,1.5
MakePhysAfterPost,0
MaterialsOnCollide,off,0.2,10,10,0.1
SetMatchPosOnCollide,off
SetMatchRotOnCollide,off
SetStopSpinOnCollide,on
SetNonPhysOnCollide,on
/*Posts Target
AttachOnRange,off,6
SetMatchPosAtTarget,on
SetMatchRotAtTarget,on
SetStopSpinAtTarget,on
SetNonPhysAtTarget,on
/*Post Matrix
SetMatrix,on
MatrixSpeedFactor,3.0
MatrixDelay,1.0
MatrixNonPhysAfterWait,2.0
/*Follower
/* FollowTargetType (Avatar/Object/Troupe/Owner)
/* MoveToTargetTau
/* AtTargetRange
Follow,off
FollowNameOrKey,Name
FollowName,Lat Lovenkraft
FollowTargetType,Avatar
FollowKey
/* FollowerDelay seconds between blinks; lower for more lag
FollowerDelay,0.5
FollowPhantom,off
ObjectToFollow
END
/*DirectionalVector,(Local/World)