import java.applet.Applet; import java.awt.*; public class SpaceWave extends Applet implements Runnable{ Thread thread; Image offScreenImage; Graphics offScreenG; private int napTime; private int pauseTime; private int numStars; private double AmpMultiplier; private double Freq; private double Amp; private String FontName; private int FontSize; private int Middle; private Color bgColor; private int i; private int xPos; private String text[]; private Color textColor[]; private Star star[]; private Font font; private int strNum; private int Sleep; private int numStrings; private double theta; private boolean Sleeping; private boolean starsOn; private int charWidth; public void stop() { thread = null; } public void paint(Graphics g) { g.drawImage(offScreenImage, 0, 0, this); } private Color getColor(String s, Color color) { Color color1; if(s == null) color1 = color; else try { color1 = new Color(Integer.parseInt(s, 16)); } catch(NumberFormatException _ex) { color1 = color; } return color1; } public void destroy() { } public SpaceWave() { Sleep = -1; starsOn = true; } public void update(Graphics g) { char ac[] = new char[255]; offScreenG.setColor(bgColor); offScreenG.fillRect(0, 0, size().width, size().height); if(starsOn) { for(int j = 0; j < numStars; j++) star[j].Update(offScreenG); } offScreenG.setColor(textColor[strNum]); int i1 = xPos; int j1 = xPos; for(int k = 0; k < text[strNum].length(); k++) { j1 += charWidth + 1; if(j1 > 0 && j1 < size().width) { int l = (int)(Amp * Math.sin(((double)k + theta) / Freq) + (double)Middle); ac[0] = text[strNum].charAt(k); offScreenG.drawChars(ac, 0, 1, j1, l); } } paint(g); theta += 0.40000000000000002D; if(Sleeping) { Sleep--; if(Sleep < 1) { Sleeping = false; xPos -= 2; i1 -= 2; } } else { xPos -= 2; } if(!Sleeping && Math.abs((i1 + j1) / 2 - size().width / 2) < 2) { Sleep = pauseTime; Sleeping = true; } if(j1 < 0) { xPos = size().width; Sleeping = false; strNum++; if(strNum == numStrings) strNum = 0; } } public void start() { if(thread == null) { thread = new Thread(this); thread.start(); } } public void run() { while(thread != null) { repaint(); try { Thread.sleep(napTime); } catch(Exception _ex) { } } } public void init() { int j = 50; int k = 100; double d = 3D; double d1 = 3D; int l = 10; int i1 = 12; String s = "Courier"; bgColor = getColor(getParameter("bgcolor"), Color.black); setBackground(bgColor); if(getParameter("stars").equals("off")) starsOn = false; text = new String[15]; for(i = 0; i < 11; i++) text[i] = getParameter("text" + (i + 1)); if(text[0] == null) { text[0] = "SpaceWave was written by Bill Oatman"; numStrings = 1; } else { for(i = 0; i < 11; i++) if(text[i] != null) numStrings = i + 1; } textColor = new Color[15]; textColor[0] = new Color(0, 255, 0); textColor[1] = new Color(255, 0, 0); textColor[2] = new Color(0, 0, 255); textColor[3] = new Color(255, 0, 255); textColor[4] = new Color(0, 255, 255); textColor[5] = new Color(255, 255, 255); textColor[6] = new Color(128, 0, 0); textColor[7] = new Color(0, 0, 128); textColor[8] = new Color(0, 128, 0); textColor[9] = new Color(128, 128, 0); textColor[10] = new Color(0, 128, 128); try { Integer integer = new Integer(getParameter("naptime")); napTime = integer.intValue(); } catch(Exception _ex) { napTime = j; } try { Integer integer1 = new Integer(getParameter("pausetime")); pauseTime = integer1.intValue(); } catch(Exception _ex) { pauseTime = k; } try { Integer integer2 = new Integer(getParameter("numstars")); numStars = integer2.intValue(); } catch(Exception _ex) { numStars = l; } try { Integer integer3 = new Integer(getParameter("ampmultiplier")); AmpMultiplier = integer3.intValue(); } catch(Exception _ex) { AmpMultiplier = d; } try { Integer integer4 = new Integer(getParameter("frequency")); Freq = integer4.intValue(); } catch(Exception _ex) { Freq = d1; } try { Integer integer5 = new Integer(getParameter("fontsize")); FontSize = integer5.intValue(); } catch(Exception _ex) { FontSize = i1; } FontName = getParameter("fontname"); if(FontName == null) FontName = s; star = new Star[numStars]; for(i = 0; i < numStars; i++) star[i] = new Star(size().height, size().width); offScreenImage = createImage(size().width, size().height); offScreenG = offScreenImage.getGraphics(); offScreenG.setColor(bgColor); offScreenG.fillRect(0, 0, size().width, size().height); font = new Font(FontName, 1, FontSize); offScreenG.setFont(font); charWidth = offScreenG.getFontMetrics().charWidth('a'); xPos = size().width; Amp = (double)size().height / AmpMultiplier; Middle = size().height / 2 + 3; } }