home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************
- *
- * File : pinwheel.js
- *
- * Created : 2000/06/17
- *
- * Author : Roy Whittle (Roy@Whittle.com) www.Roy.Whittle.com
- *
- * Purpose : To create a pinwheel firework that follows the cursor.
- *
- * Requires : xLayer.js - for layer creation, movement
- * : xMouse.js - to track the mouse x,y coordinates
- *
- * History
- * Date Version Description
- *
- * 2000-06-17 1.0 Initial version
- * 2000-10-15 1.1 Used xMouse for mouse tracking
- ***********************************************************************/
- var m = new xMouse();
-
- var oneDeg=(2*Math.PI)/360;
-
- /*** Pinwheel type 1 ***/
- var Radius = 5;
- var NumStars=32;
- var NumSteps=16;
- var StepAngle=(25)*oneDeg;
-
- /*** Pinwheel type 2 ***/
- //var Radius = 10;
- //var NumStars=16;
- //var NumSteps=8;
- //var StepAngle=(22.5)*oneDeg;
-
- /*** Pinwheel type 3 ***/
- //var Radius = 5;
- //var NumStars=16;
- //var NumSteps=16;
- //var StepAngle=(22.5)*oneDeg;
-
- /*** Pinwheel type 4 ***/
- //var Radius = 10;
- //var NumStars=32;
- //var NumSteps=16;
- //var StepAngle=(11.25)*oneDeg;
-
- var StarObject=new Array();
-
- var hexDigit=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
- function dec2hex(dec)
- {
- return(hexDigit[dec>>4]+hexDigit[dec&15]);
- }
- function hex2dec(hex)
- {
- return(parseInt(hex,16))
- }
-
- function CreateStar()
- {
-
- this.layer = new xLayer("X", 100, 100, 10);
- this.currAngle = 0;
- this.step = 0;
- this.x = 100;
- this.y = 100;
- return (this);
- }
-
- /*** Choose a random pinwheel configuration ***/
- function restart()
- {
- var num=Math.floor(Math.random()*4);
-
- for(i=0;i<NumStars;i++)
- StarObject[i].layer.hide();
-
- if(num==0){
- Radius = 5;
- NumStars=32;
- NumSteps=16;
- StepAngle=(25)*oneDeg;
- }
- else
- if(num==1){
- Radius = 10;
- NumStars=16;
- NumSteps=8;
- StepAngle=(22.5)*oneDeg;
- }
- else
- if(num==2){
- Radius = 5;
- NumStars=16;
- NumSteps=16;
- StepAngle=(22.5)*oneDeg;
- }
- else{
- Radius = 10;
- NumStars=32;
- NumSteps=16;
- StepAngle=(11.25)*oneDeg;
- }
-
-
- for(i=0 ; i<NumStars; i++)
- {
- var s=StarObject[i];
- s.currAngle = (StepAngle*i);
- s.step = (i%NumSteps);
- s.x=m.X;
- s.y=m.Y;
- }
-
- for(i=0;i<NumStars;i++)
- StarObject[i].layer.show();
-
- setTimeout("restart()", 10000);
- }
- function start()
- {
-
- for(i=0 ; i<NumStars; i++)
- {
- StarObject[i]=new CreateStar();
- StarObject[i].currAngle = (StepAngle*i);
- StarObject[i].step = (i%NumSteps);
- StarObject[i].layer.clip(0,0,2,2);
- StarObject[i].layer.setBgColor("red");
- }
-
- for(i=0 ; i<NumStars ; i++)
- StarObject[i].layer.show();
-
- /*** Remove this if you only 1 type of pinwheel ***/
- setTimeout("restart()", 10000);
-
- Rotate();
- }
-
- function changeColour(s)
- {
- var colour="";
-
- r2= Math.floor(Math.random()*2)*255;
- g2= Math.floor(Math.random()*2)*255;
- b2= Math.floor(Math.random()*2)*255;
-
- if(r2==0 && g2==0 && b2==0)
- r2=255;
-
- colour = "#" + dec2hex(r2) + dec2hex(g2) + dec2hex(b2);
- s.layer.setBgColor(colour);
-
- s.x=m.X;
- s.y=m.Y;
- }
- function Rotate()
- {
- var x;
- var y;
- for (i = 0 ; i < NumStars ; i++ ) {
- var s=StarObject[i];
-
- if(s.step==0)
- changeColour(s);
-
- var angle = s.currAngle;
- var rad = s.step*Radius + 10;
- x = s.x + rad*Math.cos(angle);
- y = s.y + rad*Math.sin(angle);
-
- s.layer.moveTo(x,y);
-
- s.step = (s.step+1)%NumSteps;
- }
-
- setTimeout("Rotate()", 30);
- }
-
- function handle_resize()
- {
- if(document.layers)
- start();
- }
-
- window.onresize=handle_resize;
- window.onload=start;
-