001 package com.croftsoft.core.animation.animator;
002
003 import java.awt.*;
004 import javax.swing.*;
005
006 import com.croftsoft.core.lang.NullArgumentException;
007 import com.croftsoft.core.animation.ComponentAnimator;
008 import com.croftsoft.core.animation.painter.TilePainter;
009
010 /*********************************************************************
011 * Paints a sliding tile pattern.
012 *
013 * @version
014 * 2003-07-05
015 * @since
016 * 2002-02-20
017 * @author
018 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
019 *********************************************************************/
020
021 public final class TileAnimator
022 implements ComponentAnimator
023 //////////////////////////////////////////////////////////////////////
024 //////////////////////////////////////////////////////////////////////
025 {
026
027 private final TilePainter tilePainter;
028
029 private final int deltaX;
030
031 private final int deltaY;
032
033 //////////////////////////////////////////////////////////////////////
034 //////////////////////////////////////////////////////////////////////
035
036 /*********************************************************************
037 * Main constructor.
038 *********************************************************************/
039 public TileAnimator (
040 TilePainter tilePainter,
041 int deltaX,
042 int deltaY )
043 //////////////////////////////////////////////////////////////////////
044 {
045 NullArgumentException.check ( this.tilePainter = tilePainter );
046
047 this.deltaX = deltaX;
048
049 this.deltaY = deltaY;
050
051 if ( ( deltaX == 0 )
052 && ( deltaY == 0 ) )
053 {
054 throw new IllegalArgumentException ( "deltaX and deltaY both 0" );
055 }
056 }
057
058 /*********************************************************************
059 * Convenience constructor.
060 *********************************************************************/
061 public TileAnimator (
062 int offsetX,
063 int offsetY,
064 Icon icon,
065 Shape tileShape,
066 int deltaX,
067 int deltaY )
068 //////////////////////////////////////////////////////////////////////
069 {
070 this (
071 new TilePainter ( offsetX, offsetY, icon, tileShape ),
072 deltaX,
073 deltaY );
074 }
075
076 //////////////////////////////////////////////////////////////////////
077 //////////////////////////////////////////////////////////////////////
078
079 public void update ( JComponent component )
080 //////////////////////////////////////////////////////////////////////
081 {
082 int offsetX = tilePainter.getOffsetX ( );
083
084 int offsetY = tilePainter.getOffsetY ( );
085
086 int x = offsetX - deltaX;
087
088 int y = offsetY - deltaY;
089
090 int tileWidth = tilePainter.getTileWidth ( );
091
092 int tileHeight = tilePainter.getTileHeight ( );
093
094 int tilesWide = tilePainter.getTileColumns ( );
095
096 int tilesHigh = tilePainter.getTileRows ( );
097
098 if ( x < 0 )
099 {
100 x += ( tileWidth * tilesWide );
101 }
102 else if ( x >= tileWidth * tilesWide )
103 {
104 x -= ( tileWidth * tilesWide );
105 }
106
107 if ( y < 0 )
108 {
109 y += ( tilesHigh * tileHeight );
110 }
111 else if ( y >= tilesHigh * tileHeight )
112 {
113 y -= ( tilesHigh * tileHeight );
114 }
115
116 tilePainter.setOffsetX ( x );
117
118 tilePainter.setOffsetY ( y );
119
120 component.repaint ( );
121 }
122
123 public void paint (
124 JComponent component,
125 Graphics2D graphics )
126 //////////////////////////////////////////////////////////////////////
127 {
128 tilePainter.paint ( component, graphics );
129 }
130
131 //////////////////////////////////////////////////////////////////////
132 //////////////////////////////////////////////////////////////////////
133 }