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 theTimer=null;
-
- 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);
-
- }
-
-
-
- function restart()
-
- {
-
- for(i=0;i<NumStars;i++)
-
- {
-
- StarObject[i].currAngle = (StepAngle*i);
-
- StarObject[i].step = (i%NumSteps);
-
- StarObject[i].x = m.X;
-
- StarObject[i].y = m.Y;
-
- StarObject[i].layer.moveTo(m.X, m.Y);
-
- StarObject[i].layer.show();
-
- }
-
- }
-
- /*** Choose a random pinwheel configuration ***/
-
- function next_random()
-
- {
-
- 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;
-
- }
-
-
-
- restart();
-
-
-
- theTimer=setTimeout("next_random()", 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 ***/
-
- theTimer=setTimeout("next_random()", 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;
-
-