gH]kDwP~trueSpace7.51[VS_O93Y*I Clinton Reese, RUR`d8pM*#ͺOPNG  IHDR`ZoIDATxo[Uǿ^'iخ7ht̢HhZBbu 4i Y v<6HlP $uHm6ԍ$4r #>}{eC)3RgH8#pF )3RgH8#pF )3RgH8#pF )3RgH;hroW1{G72Rx3H8;< ss{Dwcc*c*[*twD^*c c*c<.D q`*R6##B8^~}~ɾ2\ɨZGxScNq0w j0&Ξ6-=e18mq%+xs-ljyS|X.]m MtKJTOQS` 0(`W'#}D8wwN j"7/< V|rɸb}?T?k~!Z̜kD^EW7}k4`=?^mnFpk]:0"u47zKponW<+OJ@oas0̖`}!GJ_*LQX N;[}Эj&݅V j ݼҝ3CgwNJ-ع:O'G̣oA$w^=J5z "@:?kyy5QoH/b/b:Uȅdm"fw*uglFz d#r5?D :PحGO CG Mnꭢon;k2d)@Mw U&An (^Z@ {E*@H ע7d/9nG}ڴu ))9YSy˾sn0v!DъIBzK4^}PD+(6p?q -qroNAȷ&sV`̴f!/[]Tw!D guJ'r 9kļ  +_zv}\vdڈh~ۈw|yOn`ank_yq "B͜R;+O GcI=Y&m9-KjVoO [H`@4>zd_Hw, 6 xePkՅ[Qs`'{{w{|`4A@zi!TYjq~ÓSr5I78v!Tgo>r`[r5f5E6.p Iӽa@@gVPpI3:.=" 0z 9PXwmn:X)B`]e%]@GVoV} <2>ʎs+lmC?DtTа0݉t#æ]-W6wdJݿwa.+#:㵦Gr+7FkN l a,6z*\ a( =/yw@f+XmD+M~{YQ ԩYwPaF {rA6RgH8#pF )3RgH8#pF PH>IENDB`/tfѭ8Lwb"q܂dKu=2flockingScript@.;]kI 忞@.;]kI 忞@"SubObject*Encapsulated objects"yXX?}@ @' H* Ӄ E E ^4W}@O{4W}@O{$ Owner4Owner of the Encapsulator$ s׊;Jf|ڢ׊;Jf|ڢBWldMatrixWorld matrix `^02eE{|@ZGi`TX偢jD%~`8偢jD%~`8BObjMatrix Object's matrix `^02eE{|@ZG@WAGWAGOwnerMatrixOwner's matrix `^02eE{|@G<ĠF姁J]<ĠF姁J]DMatrix,Object's input matrix `^02eE{|@\0Gh(XFҦV(XFҦV"LE2Data$LE2 Data for node >g'JNjn*p"sATQGPM+ATQGPM+Dnumber\F8 / aGH' -1OSM n-1OSM n"LayoutLayout 럆L<_ї"DTK?JFܟ5TK?JFܟ5ActiveActive flag `}. G̜uW}Mzq>uW}Mzq>Period&Timer period in msP- GumnM Mb<mnM Mbg'JNjn*pFFDBc@ e@C?eT!@)v$@Jm&C}krf?uW}Mzq>JATQGPM+O*nU5-AXe@׊;Jf|ڢU _F0 TK?JFܟ5 WAG`^02eE{|@B????Q@H?Ma.`#M}ܝ|2@ G?ŋa`8\<`E%I@k|Z`Ez]UO GFʠN=` 8\1 }}gO}Z`Ez]UO1釥GP>a` 8\<`gO}Z`Ez]UO GFʠN=(`88\1 }}Ma.`#M}ܝ|2Z`Ez]UO1釥GP>a`(88\<`Ma.`#M}ܝ|2Z`Ez]UO GFʠN=8`H8\1 }}O*nU5-AXeZ`Ez]UO1釥GP>a`8H8\<`O*nU5-AXeZ`Ez]UO GFʠN=P``8\1 }}eT!@)v$Z`Ez]UO1釥GP>a`P`8\<`eT!@)v$Z`Ez]UO GFʠN=``p8\1 }}bǸwLBkpZ`Ez]UO1釥GP>a``p8\<`bǸwLBkpZ`Ez]UO GFʠN=x`8\1 }}xŴ|lH/&{Z`Ez]UO1釥GP>a`x8\<`xŴ|lH/&{Z`Ez]UO GFʠN=`8\1 }}Jm&C}krfZ`Ez]UO1釥GP>a`8\<`Jm&C}krfZ`Ez]UO GFʠN=`8\1 }}Q@HZ`Ez]UO1釥GP>a`8\<`Q@HZ`Ez]UOOˁ CRih[8\ ZActivity.Run('%THIS_NAME%' + "/newTemplate")new templateZ`Ez]UO GFʠN=Ph8\1 }}TK?JFܟ5Z`Ez]UOͽ>fdN*5ՒhPh8\8 TK?JFܟ5Z`Ez]UO GFʠN=P8\1 }}ATQGPM+Z`Ez]UO1釥GP>aP8\<FATQGPM+Z`Ez]UOOˁ CRih[0P8\ NActivity.Run('%THIS_NAME%' + "/start") StartZ`Ez]UOOˁ CRih[h8\ ZActivity.Run('%THIS_NAME%' + "/deleteFlock")Delete FlockZ`Ez]UO GFʠN= P08\1 }}uW}Mzq>Z`Ez]UO1釥GP>aP 08\<HuW}Mzq>Z`Ez]UO GFʠN=P 8\1 }}mnM Mb<Z`Ez]UO1釥GP>aP 8\<HmnM Mb<Z`Ez]UOOˁ CRih[(>(`Activity.Run('%THIS_NAME%' + "/collisionMaker")*Make Flock CollisionZ`Ez]UOOˁ CRih[(X>0dActivity.Run('%THIS_NAME%' + "/collisionBreaker").Remove Flock CollisionZ`Ez]UO$8 /܂dKu=WflockGroup蔴.;]kI 忞@#y4W}@O{%@(XFҦV"4W}@O{(XFҦV>g'JNjn*pF D8CX@1@@C?.;]kI 忞@48@J g'JNjn*p& ceZU@䑧rceZU@䑧r$_scriptData*Internal Script data [җJs@ %4W}@O{$@(XFҦVLE2Data, 1#z@Hoz@Ho Control InTransitionInMT^RwL~YYTMT^RwL~YYTޢLE2Data$LE2 Data for node >g'JNjn*pLE2Data, 20 J@#QLJ@#QLLE2Data$LE2 Data for node >g'JNjn*pLE2Data, 3p]-1OSM n# 2|=Bynj2AEHM'>g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommandT// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here owner = System.ThisOwner(); scene = Space.CurrentScene(); //delete template mesh objects and AIs number = Node.Value(owner + "/start","number"); for(i=0;i<number;i++) { Node.Delete(owner + "/controlGroup/flock" + i); Node.Delete(owner + "/flockGroup/flock" + i);//bird //Node.Delete(owner + "/flockGroup/la" + i);//lookat2 node Node.Delete(owner + "/flockGroup/tf" + i);//target for lookat2 node } } NScript Object Package/jScript languageb4W}@O{(XFҦV>g'JNjn*pn?DB`@@P@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho܂dKu=|controlGroup X.;]kI 忞@#0X4W}@O{%@`U (XFҦV"`뎁_ہGJRTJ뎁_ہGJRTJDcenterIn uMF86F`O\(e8 O^/Of-!^/Of-!DavgVelocityIn uMF86F`O\Аs  GVO&p9Ow GVO&p9OwDglobalOwnerIn\h( 4z@HoSIibkkSIibkkDnumberIn\0ZsvU _F0\0]}srvWN_SJrvWN_SJDgoalObject\A  GVO&p9Ow:/Project/Space 3D/flocking154W}@O{(XFҦV>g'JNjn*pFDb@ `@?U _F0 SIibkk^/Of-!.;]kI 忞@rvWN_SJz@Ho뎁_ہGJRTJ48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ 0NewCommand// runit // // all AI's connects to this and receives command signal to run // // Execute // Called to execute the command function Execute(params) { // TODO: put your action code here } NScript Object Package/jScript language4W}@O{(XFҦV>g'JNjn*pnCBb@H@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Hoͤ*EgbĬKglobalDatah2AEHM'`:|ceZU@䑧r%4W}@O{$X}(XFҦV#:.;]kI 忞@"( -1OSM n#(e뎁_ہGJRTJD` 8Z^/Of-!DO 8Z %#AC ~ %#AC ~BcenterOut uMF86F`OB j hOptj hOptBavgVelocityOut uMF86F`OBh GVO&p9OwD  8Z8*sS;Kb*sS;KbBglobalOwnerOutB0ZSIibkkD 8ZZA3:hK*A3:hK*BnumberOutB0]U _F0Dv 8ZArvWN_SJD 8Zj hOpt2AEHM'>g'JNjn*pFBC`@0@? GVO&p9Ow:/Project/Space 3D/flocking15ceZU@䑧r[җJs@ NewObject,// OnComputeOutputs // Called to compute values of all output connectors function OnComputeOutputs(params) { var centerIn = params.ConValue('centerIn'); var avgVelocityIn = params.ConValue('avgVelocityIn'); var globalOwnerIn = params.ConValue('globalOwnerIn'); var numberIn = params.ConValue('numberIn'); var goalActive = params.ConValue('goalActive'); var goalObject = params.ConValue('goalObject'); // TODO: put your computation here // var centerOut = System.CreateDO('Math Package/Point Data'); // var avgVelocityOut = System.CreateDO('Math Package/Point Data'); params.ConValue('centerOut') = centerIn; params.ConValue('avgVelocityOut') = avgVelocityIn; params.ConValue('globalOwnerOut') = globalOwnerIn; params.ConValue('numberOut') = numberIn; } NScript Object Package/jScript language  0Math Package/Point DatacenterIn uMF86F`O뎁_ہGJRTJ0Math Package/Point DataavgVelocityIn uMF86F`O^/Of-!0Math Package/Point DatacenterOut uMF86F`O %#AC ~0Math Package/Point DataavgVelocityOut uMF86F`Oj hOptstringglobalOwnerIn GVO&p9OwstringglobalOwnerOut*sS;KbintnumberInSIibkkintnumberOutA3:hK*booleangoalActive U _F0stringgoalObjectrvWN_SJ %#AC ~4W}@O{A3:hK* (XFҦV>g'JNjn*pFRC Cb@ f@?*sS;Kb:/Project/Space 3D/flocking15U _F0 SIibkk ^/Of-!.;]kI 忞@-1OSM n 럆L<_ї(rvWN_SJ뎁_ہGJRTJ47m2O +Transform0<ĠF姁J]D@TWAGT@偢jD%~`8BXT׊;Jf|ڢBsȶ4W}@O{$@(XFҦV"偢jD%~`8(XFҦV>g'JNjn*pFBBb@@T@?׊;Jf|ڢWAG<ĠF姁J]48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand //updateXYZ // // use current location and velocity vector to update position // // Execute // Called to execute the command function Execute(params) { var number = params.ConValue('number'); // TODO: put your action code here owner = System.ThisOwner(); scene = Space.CurrentScene(); theMatrix = System.CreateDO('Math Package/Matrix Float Data'); thePoint = System.CreateDO('Math Package/Point Data'); for(i=0;i<number;i++) { thePoint = Node.Value(owner + "/controlGroup/flock" + i,"velocity"); theMatrix = Node.Value(owner + "/flockGroup/flock" + i, "WldMatrix"); newX = theMatrix.GetTransX() + thePoint.x; newY = theMatrix.GetTransY() + thePoint.y; newZ = theMatrix.GetTransZ() + thePoint.z; theMatrix.SetTransX(newX); theMatrix.SetTransY(newY); theMatrix.SetTransZ(newZ); Node.Value(owner + "/flockGroup/flock" + i,"Matrix") = theMatrix;//update flock member newX = newX + thePoint.x; newY = newY + thePoint.y; newZ = newZ + thePoint.z; theMatrix.LoadIdentity(); theMatrix.SetTransX(newX); theMatrix.SetTransY(newY); theMatrix.SetTransZ(newZ); Node.Value(owner + "/flockGroup/tf" + i,"Matrix") = theMatrix;//update lookat for flock member } } NScript Object Package/jScript language@?>Ǣ&intnumberӇfHh٪9=4W}@O{(XFҦV>g'JNjn*pn+DACb@@P@2|=Bynj|?z@Hoۙ>?ӇfHh٪9=J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ 6NewCommand//getCenter // // get the center of the entire flock // // Execute // Called to execute the command function Execute(params) { var number = params.ConValue('number'); // TODO: put your action code here owner = System.ThisOwner(); scene = Space.CurrentScene(); theMatrix = System.CreateDO('Math Package/Matrix Float Data'); thePoint = System.CreateDO('Math Package/Point Data'); //reset center centerX = 0; centerY=0; centerZ=0; //calculate new center of flock for(i=0;i<number;i++) { theMatrix = Node.Value(owner + "/flockGroup/flock" + i, "WldMatrix"); centerX = centerX + theMatrix.GetTransX(); centerY = centerY + theMatrix.GetTransY(); centerZ = centerZ + theMatrix.GetTransZ(); } thePoint.x = centerX/number; thePoint.y = centerY/number; thePoint.z = centerZ/number; params.ConValue("center") = thePoint; } NScript Object Package/jScript language~൱Dl#^cintnumberM\E0Math Package/Point Datacenter uMF86F`O*=c@jx|4W}@O{(XFҦV>g'JNjn*pnQDCb@@T@2|=Bynj|?z@Hoۙ>?*=c@jx|uMF86F`Ok` D@@J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?M\E-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommandR// avgVelocity // // get average velocity of the flock // // Execute // Called to execute the command function Execute(params) { var number = params.ConValue('number'); // TODO: put your action code here owner = System.ThisOwner(); scene = Space.CurrentScene(); theMatrix = System.CreateDO('Math Package/Matrix Float Data'); thePoint = System.CreateDO('Math Package/Point Data'); theVelocity = System.CreateDO('Math Package/Point Data'); //reset center centerX = 0; centerY=0; centerZ=0; //calculate new average velocity of flock for(i=0;i<number;i++) { theVelocity = Node.Value(owner + "/controlGroup/flock" + i, "velocity"); centerX = centerX + theVelocity.x; centerY = centerY + theVelocity.y; centerZ = centerZ + theVelocity.z; } thePoint.x = centerX/number; thePoint.y = centerY/number; thePoint.z = centerZ/number; params.ConValue("avgvelocity") = thePoint; } NScript Object Package/jScript language@?> &0Math Package/Point Dataavgvelocity uMF86F`O}e/Ie~5Kintnumber4A9 #4W}@O{(XFҦV>g'JNjn*pniDBb@@T@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?}e/Ie~5KuMF86F`Ob&=>-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UO4A9 #MT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommandt// start // // initialize the flock // // Execute // Called to execute the command function Execute(params) { var number = params.ConValue('number'); var speed = params.ConValue('speed'); // TODO: put your action code here owner = System.ThisOwner(); scene = Space.CurrentScene(); theMatrix = System.CreateDO('Math Package/Matrix Float Data'); centerMatrix = System.CreateDO('Math Package/Matrix Float Data'); thePoint = System.CreateDO('Math Package/Point Data'); //create goal object if none found if(!Node.Exists(scene + "/flockgoal")) { newgoal = Space.Sphere(0.5,3,3); Node.Rename(newgoal, "flockgoal"); System.Info("flockgoal object created in scene"); } //copy template mesh object and AI centerMatrix = Node.Value(owner,"WldMatrix"); //copy template and AI for each flock member for(i=0;i<number;i++) { //copy AI and connect to control pulse from runit //runit acts as a control signal hub ai = Node.Copy(owner + "/AI",owner + "/controlGroup"); ai = Node.Rename(ai,"flock" + i); Node.ConnectTo(owner + "/controlGroup/runit", " Control Out", ai, " Control In") //random initial velocity thePoint.x = (0.5 - Math.random()) * speed; thePoint.y = (0.5 - Math.random()) * speed; thePoint.z = (0.5 - Math.random()) * speed; Node.Value(ai,"velocity") = thePoint; //copy template(geometry) into the flock and connect to a LookAt node for orientation //template has its nose in the +Z direction and it's top in the +Y direction flock = Node.Copy(owner + "/template", owner + "/flockGroup"); flock = Node.Rename(flock,"flock" + i); theTarget = Node.Copy(owner + "/targetFace", owner + "/flockGroup"); theTarget = Node.Rename(theTarget,"tf" + i); lookat = Node.Copy(owner + "/LookAt2", flock); //random initial location x = (0.5 - Math.random()) * 18 + centerMatrix.GetTransX(); y = (0.5 - Math.random()) * 18 + centerMatrix.GetTransY(); z = (0.5 - Math.random()) * 18 + centerMatrix.GetTransZ(); theMatrix.LoadIdentity(); theMatrix.SetTransX(x); theMatrix.SetTransY(y); theMatrix.SetTransZ(z); Node.Value(flock,"Matrix") = theMatrix; //put lookat target in front of flock member x = x + thePoint.x; y = y + thePoint.y; z = z + thePoint.z; theMatrix.SetTransX(x); theMatrix.SetTransY(y); theMatrix.SetTransZ(z); Node.Value(theTarget,"Matrix") = theMatrix; Node.ConnectTo(flock + "/Transform", "WldMatrix", lookat, "Source Matrix"); Node.ConnectTo(flock + "/Transform", "ObjMatrix", lookat, "Source ObjMatrix"); Node.ReconnectFrom(flock + "/Transform", "ObjMatrix", lookat, "ObjMatrix", flock, "ObjMatrix"); Node.ReconnectFrom(flock + "/Transform", "WldMatrix", lookat, "WldMatrix", flock, "WldMatrix"); Node.ExportConnector(lookat, "Target Matrix", "", 1, 1); //Node.ConnectTo(flock, "Target Matrix", theTarget, "WldMatrix");//order of connection matters Node.ConnectTo(theTarget, "WldMatrix", flock, "Target Matrix"); } params.ConValue("owner") = owner;//save to global owner for use in the control group(AI) } NScript Object Package/jScript language~൱D$u #^cintnumberATQGPM+number speedmnM Mb<string ownerҰxJc+DҖEl AҰxJc+DҖEl A:/Project/Space 3D/flocking154W}@O{mnM Mb<?(XFҦV>g'JNjn*pnCCb@@X@2|=Bynj|?z@Hoۙ>?ATQGPM+J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho}O΍Timer Event 5[2|=Bynji`}. TK?JFܟ5DP- uW}Mzq>̜h E;c_J8@E;c_J8@ FrameTime frame( :.J NT):.J NT) Time$Time of the frame z@Ho 4W}@O{$@n (XFҦV"x' -1OSM n"X]-ɭNaė?-ɭNaė?SessionId>Shared Space session Client IDU  v MFfw v MFfw NamebName of the participant that controls this timer2[ʖ:LU77[ʖ:LU77$Privileges&Network privileges$ 2|=Bynj-ɭNaė?:.J NT)MbX@(XFҦV>g'JNjn*pFC-Cc@ a@?uW}Mzq>JE;c_J8@@TK?JFܟ5 [ʖ:LU77{LF-dEw v MFfw-1OSM n 럆L<_їDefault GFʠN=| C1 }}TK?JFܟ5Z`Ez]UOͽ>fdN*5Ւh| C8 TK?JFܟ5Z`Ez]UO GFʠN=(( C7 }}PerioduW}Mzq>Z`Ez]UO1釥GP>ap( C<%uW}Mzq>Z`Ez]UO GFʠN=hx C= }} Control Out2|=BynjZ`Ez]UO GFʠN=(H8 C1 }}E;c_J8@Z`Ez]UO1釥GP>aH(8 C<ME;c_J8@Z`Ez]UO GFʠN=8HH C1 }}:.J NT)Z`Ez]UO1釥GP>aH8H C<M:.J NT)Z`Ez]UON\q+nN-K^(p( CHG}}.@p@uW}Mzq>Z`Ez]UO1釥GP>aHHX C<O v MFfwZ`Ez]UO GFʠN=HHX C< }} Control own v MFfwZ`Ez]UOOˁ CRih[XHh CHNode.Value('%THIS_NAME%', 'SessionId') = Net.GetNodeSessionId('%THIS_NAME%', 0);Take controlZ`Ez]UOOˁ CRih[HXh CPZNode.Value('%THIS_NAME%', 'SessionId') = '';Leave controlZ`Ez]UOz@Ho #ߺKg BZܨLookAt2d7_ B7_ BSource MatrixSource Matrix `^02eE{|@ p)d"FcxfM)d"FcxfM"Source ObjMatrix"Source ObjMatrix `^02eE{|@'P 42N߻F0s!d42N߻F0s!dTarget MatrixTarget Matrix `^02eE{|@ ' ׊;Jf|ڢB'偢jD%~`8B4W}@O{$@(XFҦV"偢jD%~`842N߻F0s!d(XFҦV>g'JNjn*pFDAX@1@?)d"FcxfM׊;Jf|ڢ7_ B܂dKu= targetFace Xy.;]kI 忞@"1 xgӃ4W}@O{$@Hv G?ŋ( tveDCE`"IWJtveDCE`"IWJB Mesh"Ouput Shape Mesh >W5f@(䐈Z`  <ĠF姁J]\x 0 偢jD%~`8Z(H[^-1OSM n"Y׊;Jf|ڢZК;p$1&KߊPV$1&KߊPV$AutoShowPanelAutoShowPanel$SWAG  -V?XM%-V?XM%Material ListMaterial List +N⩊ih~ (XFҦV"P! S $hKnPSVmS $hKnPSVm"RenderAttributes"RenderAttributes HEoq5v8 r@ -V?XM%S $hKnPSVm偢jD%~`8(XFҦV>g'JNjn*pFDBX@1@?׊;Jf|ڢWAG`^02eE{|@B???? G?ŋa@P<ZK=nʼZ`Ez]UO GFʠN=p0@7 }}Height4MBLt6Z`Ez]UO1釥GP>ap@P<4MBLt6Z`Ez]UO GFʠN=80p@6 }}WidthXxEbN5a8@`P<'XxEbN5ap 0<O[irH%}JZ`Ez]UOPN AnqH 0=[irH%}JK>Z`Ez]UO GFʠN=p 1 }}cCN!F)/Z`Ez]UO1釥GP>ap <OcCN!F)/Z`Ez]UOPN AnqH =cCN!F)/K>Z`Ez]UO GFʠN=p1 }}\5KZWDL&fZ`Ez]UO1釥GP>ap<O\5KZWDL&fZ`Ez]UOPN AnqH=\5KZWDL&fK>Z`Ez]UOtveDCE`"IWJd47m2O 4Transformx <ĠF姁J]D( WAGS(偢jD%~`8B0 ׊;Jf|ڢBY14W}@O{$XyX(XFҦV"-1OSM n"偢jD%~`8(XFҦV>g'JNjn*pFCAb@@T@?׊;Jf|ڢWAG<ĠF姁J]-1OSM n 럆L<_ї(܂dKu='Material Listx.;]kI 忞@"s"4W}@O{$Xy-V?XM% Pj-V?XM%) 6G%,Material List ManagerPj-V?XM%&zB}J?&zB}J?&Active material ID2Active material class IDPjs4W}@O{$xrSnpUJ!-SnpUJ!-Mat Chunk 0BDynamic material input connector |E8y8wPj-V?XM%SnpUJ!-&zB}J?܂dKu=Material ChunkB.;]kI 忞@"Ջ(K " "4W}@O{$x8wgYأC۲+?gYأC۲+?Material ChunkMaterial Chunk |E8yr^gYأC۲+?b=h0CRfD.Material Chunk Manager^gYأC۲+?8wxGi!EJGWM!EJGWMMaterial IndexMaterial Index^p{6~qK;2t&6~qK;2t&Active Info4Active and validity flags NOI/)[&^Ջ4W}@O{$B*(|wKGD*(|wKGD*Mat Item 0BDynamic material input connector<{^t1GLz(z1t1GLz(z1Mat Item 1BDynamic material input connectorP^!EJGWM6~qK;2t&NOI/)[&2/ChˢjCt1GLz(z1gYأC۲+?(|wKGD*܂dKu=tLW Material< .;]kI 忞@"9 8d0MP^(K 4W}@O{$BPRGψ"FRGψ"FLW Material Output material _[@.~$[ RGψ"F }R?DVmLWMaterial[ RGψ"FPqN9{ۡ-~qN9{ۡ-~$TransparentShader&Transparent shader `ގ@;ENig [ U  7-+Ahhv 7-+AhhvColorShaderColor shader U@M[ VM@[ p,< -THJ`,< -THJ`$ReflectanceShader&Reflectance shader =HG s k[  ~:T@hH~:T@hH&DisplacementShader(Displacement shader 01gH=-xe[ ҠvF K?ΧҠvF K?Χ&MaterialEditorFlag<Material Editor Geometry Flag[ 9 4W}@O{$< qN9{ۡ-~,< -THJ`RGψ"FҠvF K?Χ 7-+Ahhv~:T@hHJtP8N.d Color@{[f(@-L*;{[f(@-L*;LWColor_shader$Pure Color shader yᮍGM޴"U  '޽lL]>L'޽lL]>L NameShader name@8d4W}@O{$< @xz-*+O}Th8^z-*+O}Th8^colour0colour : Shader - Color -n,Njlpg@{[f(@-L*;'޽lL]>L plainz-*+O}Th8^-n,NjlpgLk0M4W}@O{$< w}tSM~ADm9R)tSM~ADm9R)ambient factor@ambient factor : Shader - ModelkPA{@?wA{@?wdiffuse factor@diffuse factor : Shader - Modelk)mPbG IeamPbG Ieaexponent4exponent : Shader - Modelk5xeM˩A 5xeM˩A  specular factorBspecular factor : Shader - Modelk` [ACcO[ACcO specular colourBspecular colour : Shader - Model -n,NjlpgkmPbG Iea@@A{@?wfff?tSM~ADm9R)[ACcO-n,Njlpg????'޽lL]>L phong5xeM˩A =r鷅wOq=0 7G5fDisplacementxeI˕XMӍJS9I˕XMӍJS9,LWDisplacement_shader2Pure Displacement shader yᮍGM޴" ' '޽lL]>LxeP^4W}@O{$< '޽lL]>L noneI˕XMӍJS9 EvmE|Kc\oTransparencyg fO*EI,SfO*EI,S,LWTransparency_shader2Pure Transparency shader yᮍGM޴"`'޽lL]>Lg 4W}@O{$< fO*EI,S'޽lL]>L none~wC쇀DD Solid <{.F_P#.F_P#Material Output material __W8E#(*n%⟀A}aJn%⟀A}aJDiffuseColorDiffuseColor -n,Njlpg<{0 >]zJ4 >]zJ4 (VertexColorStrength(VertexColorStrength<{H؛J.HE /*gJ.HE /*gShininessShininess<{v8VnZN:W p8VnZN:W p DiffuseStrength DiffuseStrength<{= ll-#Ez k^ll-#Ez k^"SpecularStrength"SpecularStrength<{K#uiL$K#uiL$AlphaTestAlphaTest :KrbSx<{,L?D},L?D}AlphaTestValueAlphaTestValue<{" 4W}@O{$BJ.HE /*g@@>]zJ4 n%⟀A}aJ-n,NjlpgW5f@(䐈  4W}@O{$XyVIQGіF͡T>W5f@(䐈bٸ*ćIC7???????? h* 6H?BJy'HNLjUb)R8{EE%D7[ZpߘHXO?89Ig"????tveDCE`"IWJqU F3fRh2Object Render Attributes@S $hKnPSVmP! L 8Ns2]8Ns2] Surface Opacity Surface Opacity@X0 ^mګA~Ksi[^mګA~Ksi[Points opacityPoints opacity@\(lrsGr(lrsGrPoints Size>Point Size in Point rendering.@u\Eh{5\Eh{5Points ColorLColor of points during the rendering. -n,Njlpg@hC"PbEGDߗr"PbEGDߗr0Ignore mesh point color0Ignore mesh point color @JuF?N dF?N d.Ignore mesh point size.Ignore mesh point size @k]*qBCx]*qBCxEdges opacityEdges opacity@(֣\J:I%7u\J:I%7uEdges ColorEdges Color -n,Njlpg@PaiA޲1rIK>XiA޲1rIK>X0Ignore mesh edges color0Ignore mesh edges color @( ,ot"AaY,ot"AaY$Show hidden lines`Do not use ZBuffer in point and wireframe modes @q^RI8ÿR^RI8ÿRShow backfaceslEnable two-sided rendering when Color mode is enabled @çwH5#VçwH5#V0Ignore layer attributesvDo not combine render attributes with layer defined values @xg4W}@O{%Xy^J@#QLxr-1OSM n#H`(XFҦV"W0@zdW0@zd%VersionVersion%ȅ8vDCxZȅ8vDCxZInvisibleInvisible flag @ F+2MGF+2MGCast shadows$Cast shadows flag @P I2GWM:).$I2GWM:).$ Receive shadows Receive shadows @[mBޖw pmBޖw pLayer index(Modeler layer index@8o[nfFo[nfF Overlay opacity Overlay opacity@zgGFohN)zgGFohN)Overlay ColorOverlay Color. -n,Njlpg@0vhD zʔvhD zʔ4Ignore mesh overlay color6Ignore mesh overlay color. @ fB #^fB #^$Transparency Mode@Quality of transparency solving :KrbSx@Py|$}mK;)|$}mK;) OverlayEnable*Enable color overlay  @ rg@*oHrg@*oH OverlayColor*Color of the overlay -n,Njlpg @!eLZE^N!eLZE^N OverlayStrengthJStrength (visibility) of the overlay @zgGFohN)I2GWM:).$ vhD zʔ]*qBCxS $hKnPSVmrg@*oHçwH5#V 4W}@O{fB #^:KrbSxv No Hidden FacesNo SortTriangle SortNo Sort\J:I%7u-n,Njlpg???\Eh{5-n,Njlpg????(XFҦV>g'JNjn*pFCk@ `@?F?N d ȅ8vDCxZ 8Ns2]?F+2MG "PbEGDߗr J@#QL>g'JNjn*pFCBb@ h@?(lrsGr?^mګA~Ksi[o[nfFW0@zdmBޖw p-1OSM n 럆L<_ї+ DefaultAdvanced GFʠN=0(@vG6 }}Color\J:I%7uZ`Ez]UO B>I(0h@vG5@\VV\J:I%7uZ`Ez]UO GFʠN=@(PvG8 }}Opacity]*qBCxZ`Ez]UON\q+nN-K^(@hPvGH?}}?]*qBCxZ`Ez]UO GFʠN=h@PvG@ }}Enable Obj ModeçwH5#VZ`Ez]UOͽ>fdN*5Ւh@PvG8 çwH5#VZ`Ez]UO GFʠN=h vG6 }}Color\Eh{5Z`Ez]UO B>I vG5H\VV\Eh{5Z`Ez]UO GFʠN=h 0vG8 }}Opacity^mګA~Ksi[Z`Ez]UON\q+nN-K^ 0vGHG}}?^mګA~Ksi[Z`Ez]UO GFʠN=h0@vG5 }}Size(lrsGrZ`Ez]UON\q+nN-K^0@vGHG}}?$@(lrsGrZ`Ez]UO GFʠN=( vG8 }}Opacity8Ns2]Z`Ez]UON\q+nN-K^(h vGH?}}?8Ns2]Z`Ez]UO GFʠN=hvG(}}SurfaceZ`Ez]UO GFʠN= h0vG&}}EdgesZ`Ez]UO GFʠN=hvG'}}PointsZ`Ez]UO GFʠN=Ph`vG1 }}fB #^Z`Ez]UOnevG4'hP`vGpfB #^VNo hidden faces No solving Triangle sortZ`Ez]UO GFʠN=G1 }}^RI8ÿRZ`Ez]UOͽ>fdN*5ՒhG8 ^RI8ÿRϱZ`Ez]UO GFʠN= G1 }},ot"AaYZ`Ez]UOͽ>fdN*5Ւh G8 ,ot"AaYZ`Ez]UO GFʠN= 0G1 }}ȅ8vDCxZZ`Ez]UOͽ>fdN*5Ւh 0G8 ȅ8vDCxZZ`Ez]UO GFʠN=0@G1 }}F+2MGZ`Ez]UOͽ>fdN*5Ւh0@G8 F+2MGZ`Ez]UO GFʠN=@PG1 }}I2GWM:).$Z`Ez]UOͽ>fdN*5Ւh@PG8 I2GWM:).$Z`Ez]UO GFʠN=P`G1 }}mBޖw pZ`Ez]UO1釥GP>aP`G<mBޖw pZ`Ez]UO,ot"AaY !eLZE^N|$}mK;)^RI8ÿR iA޲1rIK>X 48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ dNewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here owner = System.ThisOwner(); //copy object into flocking world obj = Node.FirstSelected(); obj = Node.Copy(obj, owner); //delete template Node.Delete(owner + "/template"); //rename object to template newobj = Node.Rename(obj, "template"); //connect transform wld to owner Node.ConnectTo(owner + "/Transform", "WldMatrix", newobj, "OwnerMatrix"); } NScript Object Package/jScript languageÜl4W}@O{(XFҦV>g'JNjn*pnC`@@P@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ LNewCommandF// April 12 2008 // Clinton Reese // // Execute // flocking behavior // based on work of Craig Reynolds // http://www.red3d.com/cwr/index.html // // 1. avoid collisions with neighbors and flock collision objects // 2. stay close to center of local neighbors // 3. follow same heading as local neighbors // 4. move towards the flockgoal object // 5. follow heading of entire flock // 6. steer to center of entire flock // // Called to execute the command function Execute(params) { var location = params.ConValue('location'); var goalS = params.ConValue('goalS'); var localRadius = params.ConValue('localRadius'); var personalSpace = params.ConValue('personalSpace'); var inertialS = params.ConValue('inertialS'); var grpCollS = params.ConValue('grpCollS'); var grpHeadS = params.ConValue('grpHeadS'); var grpCenterS = params.ConValue('grpCenterS'); var extCollS = params.ConValue('extCollS'); var localCenterS = params.ConValue('localCenterS'); // TODO: put your action code here owner = System.ThisOwner(); superowner = Node.Value(owner+"/globalData","globalOwnerOut"); scene = Space.CurrentScene(); theMatrix = System.CreateDO('Math Package/Matrix Float Data'); goalMatrix = System.CreateDO('Math Package/Matrix Float Data'); goalDir = System.CreateDO('Math Package/Point Data'); //flock goal location goalMatrix = Node.Value(scene + "/flockgoal","WldMatrix"); gX = goalMatrix.GetTransX(); gY = goalMatrix.GetTransY(); gZ = goalMatrix.GetTransZ(); myname = System.ThisName(); shortName = Node.ShortName(myname); //System.Trace(shortName); //note: shortname of AI same as short name of flock member //get current location theMatrix = Node.Value(superowner + "/flockGroup/" + shortName,"WldMatrix"); curX = theMatrix.GetTransX(); curY = theMatrix.GetTransY(); curZ = theMatrix.GetTransZ(); curVelocity = System.CreateDO('Math Package/Point Data');//current velocity vector centerGoal = System.CreateDO('Math Package/Point Data');//center of goal center2Goal = System.CreateDO('Math Package/Point Data');//vector to center goal myLoc = System.CreateDO('Math Package/Point Data');//location of this member otherLoc = System.CreateDO('Math Package/Point Data');//location of others newVel = System.CreateDO('Math Package/Point Data');//final velocity localCenter = System.CreateDO('Math Package/Point Data');//local center localCenterV = System.CreateDO('Math Package/Point Data');//local center vector localHeading = System.CreateDO('Math Package/Point Data');//local heading theVelocity = System.CreateDO('Math Package/Point Data');//local group heading myLoc.x = curX; myLoc.y = curY; myLoc.z = curZ; grpHead = System.CreateDO('Math Package/Point Data'); grpCenter = System.CreateDO('Math Package/Point Data'); grpAvoid = System.CreateDO('Math Package/Point Data'); curVelocity = Node.Value(myname,"velocity"); curVelocity.Normalize(); centerGoal = Node.Value(owner + "/globalData", "centerOut"); //vector member to center dist2center = myLoc.GetDistanceFrom(centerGoal); grpCenter.x = centerGoal.x - curX; grpCenter.y = centerGoal.y - curY; grpCenter.z = centerGoal.z - curZ; grpCenter.Normalize(); number = Node.Value(owner + "/globalData","numberOut"); //local center curFlockInd = 0; localCount = 0; localCenter.x = 0; localCenter.y = 0; localCenter.z = 0; localHeading.x = 0; localHeading.y = 0; localHeading.z = 0; dist2Lcenter = 1000;//default if no local neighbors do { thename = "flock" + curFlockInd; //dont include self in survey if(thename != shortName) { theMatrix = Node.Value(superowner + "/flockGroup/" + thename,"WldMatrix"); theVelocity = Node.Value(superowner + "/controlGroup/" + thename,"velocity"); otherLoc.x = theMatrix.GetTransX(); otherLoc.y = theMatrix.GetTransY(); otherLoc.z = theMatrix.GetTransZ(); dist = otherLoc.GetDistanceFrom(myLoc); if(dist < localRadius) { localCenter.Add(otherLoc); localHeading.Add(theVelocity); localCount++; } } curFlockInd = curFlockInd + 1; } while(curFlockInd < number && localCount < 6)//one for each direction x,y,z,-x,-y,-z if(localCount != 0) { localCenter.x = localCenter.x / localCount; localCenter.y = localCenter.y / localCount; localCenter.z = localCenter.z / localCount; localCenterV.x = localCenter.x - curX; localCenterV.y = localCenter.y - curY; localCenterV.z = localCenter.z - curZ; dist2Lcenter = localCenterV.GetLength(); localCenterV.Normalize(); localHeading.Normalize(); } //group heading grpHead = Node.Value(owner + "/globalData","avgVelocityOut"); grpHead.Normalize(); //goal object seeking goalDir.x = gX - curX; goalDir.y = gY - curY; goalDir.z = gZ - curZ; goalDir.Normalize(); //collision avoidance //find center of all who are too close and steer in opposite direction closeCount = 0;//no one too close colCenterX = 0; colCenterY = 0; colCenterZ = 0; for(i=0;i<number;i++) { thename = "flock" + i; //dont include self in survey if(thename != shortName) { theMatrix = Node.Value(superowner + "/flockGroup/" + thename,"WldMatrix"); otherLoc.x = theMatrix.GetTransX(); otherLoc.y = theMatrix.GetTransY(); otherLoc.z = theMatrix.GetTransZ(); dist = otherLoc.GetDistanceFrom(myLoc); if(dist < personalSpace) { colCenterX = colCenterX + otherLoc.x; colCenterY = colCenterY + otherLoc.y; colCenterZ = colCenterZ + otherLoc.z; closeCount++; } } } //external object collision check //only top level scene objects //check if has collision node inside //if so compare to bounding box for collision detection //once collision found can stop checking and just process it //get count of top scene objects var bbArray = System.CreateDO('Common Data Package/Number Array Data'); extColl = System.CreateDO('Math Package/Point Data');//external collision extCollCenter = System.CreateDO('Math Package/Point Data');//external collision scenecount = Node.SubObjectCount(scene); noCollFound = true; curSceneInd = 0; do { curObj = scene + "/"+ Node.SubObject(scene, curSceneInd); if(Node.Exists(curObj + "/flockCollision")) { //System.Trace("flock collision found"); //expand bounding box so no real intersection bbArray = Space.GetBoundingBox(curObj); xmin = bbArray.GetAt(0) - 0.5; xmax = bbArray.GetAt(1) + 0.5; ymin = bbArray.GetAt(2) - 0.5; ymax = bbArray.GetAt(3) + 0.5; zmin = bbArray.GetAt(4) - 0.5; zmax = bbArray.GetAt(5) + 0.5; if(curX <= xmax && curX >= xmin) { if(curY <= ymax && curY >= ymin) { if(curZ <= zmax && curZ >= zmin) { //collision found noCollFound = false; extCollCenter = Space.GetCenter(curObj, true); extColl.x = curX - extCollCenter.x ; extColl.y = curY - extCollCenter.y; extColl.z = curZ - extCollCenter.z; extColl.Normalize(); } } } } curSceneInd = curSceneInd + 1; } while(noCollFound && (curSceneInd < scenecount)); if(closeCount > 0) { colCenterX = colCenterX/closeCount; colCenterY = colCenterY/closeCount; colCenterZ = colCenterZ/closeCount; grpAvoid.x = curX - colCenterX; grpAvoid.y = curY - colCenterY; grpAvoid.z = curZ - colCenterZ; grpAvoid.Normalize(); newVel.x = grpCollS*grpAvoid.x + grpHeadS*grpHead.x + grpCenterS*grpCenter.x; newVel.y = grpCollS*grpAvoid.y + grpHeadS*grpHead.y + grpCenterS*grpCenter.y; newVel.z = grpCollS*grpAvoid.z + grpHeadS*grpHead.z + grpCenterS*grpCenter.z; } else { newVel.x = grpHeadS*grpHead.x + grpCenterS*grpCenter.x + goalS*goalDir.x ; newVel.y = grpHeadS*grpHead.y + grpCenterS*grpCenter.y + goalS*goalDir.y; newVel.z = grpHeadS*grpHead.z + grpCenterS*grpCenter.z + goalS*goalDir.z; } if(!noCollFound) { newVel.x = newVel.x + extCollS*extColl.x + 0.25*inertialS*curVelocity.x;//less inertia if external collision newVel.y = newVel.y + extCollS*extColl.y + 0.25*inertialS*curVelocity.y; newVel.z = newVel.z + extCollS*extColl.z + 0.25*inertialS*curVelocity.z; } else { newVel.x = newVel.x + inertialS*curVelocity.x; newVel.y = newVel.y + inertialS*curVelocity.y; newVel.z = newVel.z + inertialS*curVelocity.z; } if(localCount != 0) { newVel.x = newVel.x + localCenterS*localCenterV.x ; newVel.y = newVel.y + localCenterS*localCenterV.y; newVel.z = newVel.z + localCenterS*localCenterV.z; newVel.Add(localHeading); } newVel.Normalize(); speed = Node.Value(superowner + "/start","speed"); if(dist2Lcenter > localRadius*0.75) speed = speed*1.25;//temp speed increase to catchup with center of local group newVel.x = speed * newVel.x; newVel.y = speed * newVel.y; newVel.z = speed * newVel.z; params.ConValue("velocity") = newVel; } NScript Object Package/jScript languagetP 0Math Package/Point Datalocation uMF86F`OZ*G2ΌI(0Math Package/Point Datavelocity uMF86F`O1FJ׋number goalSgoal stengthQ@HnumberlocalRadius seeing distancegO}numberpersonalSpace:radius collision with othersE%I@k|numberinertialS$inertial strengtheT!@)v$numbergrpCollS2group collision strengthO*nU5-AXenumbergrpHeadS.group heading strengthbǸwLBkpnumbergrpCenterS0global heading strengthJm&C}krfnumberextCollS8external collision strengthMa.`#M}ܝ|2numberlocalCenterS,local center strengthxŴ|lH/&{4W}@O{xŴ|lH/&{?Z*G2ΌI((XFҦV>g'JNjn*pn@Db@ n@2|=Bynj|?z@Hoۙ>?Jm&C}krf?eT!@)v$@1FJ׋O*nU5-AXe@J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?Ma.`#M}ܝ|2@Q@H?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho܂dKu=template` .;]kI 忞@"w  $  4W}@O{$@X G?ŋX<tveDCE`"IWJZHXh=- p( v~<ĠF姁J]\h` 偢jD%~`8ZT -1OSM n"` ׊;Jf|ڢZ   p xΛ$1&KߊPV$ȶWAGT[irH%}J[irH%}J DepthMesh depth@S u~4MBLt64MBLt6 Height segments2Count of height segments [ cCN!F)/cCN!F)/HeightMesh height  ZK=nʼZK=nʼDepth segments0Count of depth segmentsp p \5KZWDL&f\5KZWDL&f WidthMesh width8 x9XxEbN5g'JNjn*pFD"CX@1@?[irH%}J?׊;Jf|ڢXxEbN5a@P<ZK=nʼZ`Ez]UO GFʠN=p0@7 }}Height4MBLt6Z`Ez]UO1釥GP>ap@P<4MBLt6Z`Ez]UO GFʠN=80p@6 }}WidthXxEbN5a8@`P<'XxEbN5ap 0<O[irH%}JZ`Ez]UOPN AnqH 0=[irH%}JK>Z`Ez]UO GFʠN=p 1 }}cCN!F)/Z`Ez]UO1釥GP>ap <OcCN!F)/Z`Ez]UOPN AnqH =cCN!F)/K>Z`Ez]UO GFʠN=p1 }}\5KZWDL&fZ`Ez]UO1釥GP>ap<O\5KZWDL&fZ`Ez]UOPN AnqH=\5KZWDL&fK>Z`Ez]UOtveDCE`"IWJ\5KZWDL&f?ZK=nʼ4MBLt6D47m2O TTransformh<ĠF姁J]Dv~Tp WAGȶp T偢jD%~`8B` p ׊;Jf|ڢB` w 4W}@O{$` &(XFҦV"H -1OSM n"偢jD%~`8(XFҦV>g'JNjn*pFCAb@@T@?׊;Jf|ڢWAG<ĠF姁J]-1OSM n 럆L<_ї(uHE flu Cube2 `tveDCE`"IWJB8 \5KZWDL&fp `@S [irH%}J` cCN!F)/[ ` XxEbN5g'JNjn*pFCBX@1@?[irH%}J?XxEbN5g'JNjn*pFB CX@1@?) 6G%Tk,Material List Manager -V?XM%) x &zB}J?  4W}@O{$H ( v;7I>EmBv;7I>EmBMat Chunk 0BDynamic material input connector |E8yr  x(XFҦV"-V?XM%v;7I>EmB&zB}J?(XFҦV>g'JNjn*pFB CX@>@?܂dKu=Material Chunkx.;]kI 忞@"@kw Pm 4W}@O{$H r gYأC۲+?( H P(XFҦV"(XFҦV>g'JNjn*pFBDCX@1@?gYأC۲+?b=h0CRf.Material Chunk ManagerH gYأC۲+?r  !EJGWMH d 6~qK;2t&H @k4W}@O{$xp& x aKsC@x aKsC@Mat Item 0BDynamic material input connectornH Jn NbMլeNbMլeMat Item 1BDynamic material input connectorSH (XFҦV"!EJGWM(XFҦV>g'JNjn*pFCDCX@>@?6~qK;2t&NOI/)[&|z@*GVgYأC۲+?x aKsC@NbMլe܂dKu=|LW Material8a.;]kI 忞@" P& J w 4W}@O{$x(XFҦV" -1OSM n"SRGψ"FJn  (XFҦV>g'JNjn*pFCDTCX@1@?RGψ"F-1OSM n 럆L<_ї( }R?DVmԽqLWMaterial RGψ"FSE qN9{ۡ-~*  F  7-+Ahhv0{ 8N ,< -THJ`@   ~:T@hH(  R ҠvF K?Χ 4W}@O{$8aqN9{ۡ-~,< -THJ`RGψ"FҠvF K?Χ 7-+Ahhv~:T@hHJtP8N.t Color0{{[f(@-L*;F  '޽lL]>L0{P& 4W}@O{$8a8  N)|*Oo}  N)|*Oo} colour0colour : Shader - Color -n,Njlpg0{{[f(@-L*;'޽lL]>L plain N)|*Oo} -n,NjlpgL@ J4W}@O{$8a0{2"BOt#/A2"BOt#/Aambient factor@ambient factor : Shader - Model@ h +ĞD.N>F+ĞD.N>Fdiffuse factor@diffuse factor : Shader - Model@  fJFNH-fJFNH-exponent4exponent : Shader - Model@ 7 FRk7 FRk specular factorBspecular factor : Shader - Model@ bI#FbI#F specular colourBspecular colour : Shader - Model -n,Njlpg@ +ĞD.N>Ffff?2"BOt#/A'޽lL]>L phongfJFNH-@@7 FRk=bI#F-n,Njlpg????r鷅wOq=0 7G5fhDisplacement( I˕XMӍJS9  @ '޽lL]>L(  4W}@O{$8a'޽lL]>L noneI˕XMӍJS9 EvmE|Kc\$Transparency* fO*EI,SE  '޽lL]>L* 4W}@O{$8afO*EI,S'޽lL]>L none~wC쇀D0 Solid n.F_P#.F_P#Material Output material __W8E#(p& ^n%⟀A}aJn'>]zJ4 n$J.HE /*gn# 8VnZN:W pnN ll-#Ez k^nh K#uiL$n5/ ,L?D}nP4W}@O{$xhl (XFҦV" J.HE /*g@@(XFҦV>g'JNjn*pFJDBb@ h@?>]zJ4 n%⟀A}aJ-n,NjlpgZ?X>8>?,L?D}.F_P#K#uiL$:KrbSxbDisabledEnabledAs OpaqueDisabledll-#Ez k^=8VnZN:W pfff?n':hF% I Editable shape h ~ÁM{ 9_[~ÁM{ 9_[$"Reference matrix `^02eE{|@$ & mG[ & mG[ $Local space `^02eE{|@$hFVIQGіF͡Tp( ׊;Jf|ڢBhgkWAGxAU<ĠF姁J]Dp( xN% 偢jD%~`8Bp( tveDCE`"IWJBX<^' /nkUCEHLj/nkUCEHLjSelection.Mesh selected elements >`g4RJLUDp( $ 4W}@O{$` ' (XFҦV" /nkUCEHLj偢jD%~`8(XFҦV>g'JNjn*pFBDCX@1@?VIQGіF͡T>W5f@(䐈ɶٸ*ćIC7]ዉ=ԥMT>䋉=ԥMT>䋉=D>]ዉ=D>LT>7>֥LT>7>D>^7>֥^7>D>8%>c?%>}l(=>}l(%>/޳>=>/޳>Z<>A`>F`>&>Z<>&> h* 6H?BJ           y'HN LjUb)R    !!"#$%%&#8{EE%D7[            ZpߘHXO 'Z*3&?4ȴ{H| 3͠K;?} @3ΠK;?g't0?7fPt0?8fPt0?7fP?8fP' K?' K?' K?' K?1î?eP?1Į?eP?1Į?eP?î?eP??% K??% K??% K??% K??гsR drR dгsR dPvR dԄ`o>Ԅ`n>Ԅ`o>Ԅ`p>喳v3>Y?G??Y?F?v3>Y?G?3>Y?G?Մ`?j>>o1Մ`?i>Մ`?j>>o1Մ`?k>>oq289Ig" ????@@?@@@@?@@???????????׊;Jf|ڢWAG~ÁM{ 9_[`^02eE{|@B???r/&z|ss?<ĠF姁J]tveDCE`"IWJ& mG[ `^02eE{|@B???|29jǾ?48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here owner = System.ThisOwner(); sel = Node.FirstSelected(); fc = Node.Copy(owner + "/fc",sel); Node.Rename(fc,"flockCollision"); } NScript Object Package/jScript languageD/4W}@O{(XFҦV>g'JNjn*pnCB`@@P@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho48@J g'JNjn*pnBC`@0@2|=Bynj|?z@Hoۙ>?ceZU@䑧r[җJs@ NewCommand// Execute // Called to execute the command function Execute(params) { // TODO: put your action code here //owner = System.ThisOwner(); sel = Node.FirstSelected(); Node.Delete(sel + "/flockCollision"); //Node.Copy(owner + "/flockCollision",sel); } NScript Object Package/jScript languagel 4W}@O{(XFҦV>g'JNjn*pnCrC`@@P@2|=Bynj|?z@Hoۙ>?J@#QL>g'JNjn*pnBB`@T@2|=Bynj|?z@Hoۙ>?-1OSM n 럆L<_ї˂ControlOˁ CRih[ Cq 8Activity.Run('%THIS_NAME%') StartZ`Ez]UOOˁ CRih[ 0 Cq:Activity.Stop('%THIS_NAME%') StopZ`Ez]UOMT^RwL~YYT>g'JNjn*pnCB`@0@2|=Bynj|?z@Hoۙ>?z@Ho܂dKu=fc0.;]kI 忞@#E 4W}@O{%@ (XFҦV"4W}@O{(XFҦV>g'JNjn*pF@ DCX@1@?.;]kI 忞@8ʯȥJH|o7 gH]kDwP@~`d8pM*#ͺOY~/tfѭ8Lwb"qF-