001         package com.croftsoft.core.animation.sprite;
002    
003         import java.awt.Graphics2D;
004         import java.awt.Rectangle;
005         import java.awt.Shape;
006         import javax.swing.Icon;
007         import javax.swing.JComponent;
008    
009         import com.croftsoft.core.lang.NullArgumentException;
010         import com.croftsoft.core.animation.ComponentUpdater;
011         import com.croftsoft.core.animation.painter.NullComponentPainter;
012         import com.croftsoft.core.animation.updater.NullComponentUpdater;
013    
014         /*********************************************************************
015         * A Sprite implementation backed by an Icon.
016         *
017         * @version
018         *   2002-07-11
019         * @since
020         *   2002-03-06
021         * @author
022         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
023         *********************************************************************/
024    
025         public class  IconSprite
026           extends AbstractSprite
027         //////////////////////////////////////////////////////////////////////
028         //////////////////////////////////////////////////////////////////////
029         {
030    
031         private final Rectangle  paintBounds;
032    
033         //
034    
035         private Icon  icon;
036    
037         //////////////////////////////////////////////////////////////////////
038         // constructor methods
039         //////////////////////////////////////////////////////////////////////
040    
041         public  IconSprite (
042           double            x,
043           double            y,
044           double            z,
045           double            heading,
046           double            velocity,
047           ComponentUpdater  componentUpdater,
048           Icon              icon )
049         //////////////////////////////////////////////////////////////////////
050         {
051           super ( x, y, z, heading, velocity, componentUpdater,
052             NullComponentPainter.INSTANCE );
053    
054           paintBounds = new Rectangle ( );
055    
056           setX ( x );
057    
058           setY ( y );
059    
060           setIcon ( icon );
061         }
062    
063         public  IconSprite ( Icon  icon )
064         //////////////////////////////////////////////////////////////////////
065         {
066           this ( 0.0, 0.0, 0.0, 0.0, 0.0,
067             NullComponentUpdater.INSTANCE, icon );
068         }
069    
070         //////////////////////////////////////////////////////////////////////
071         // accessor methods
072         //////////////////////////////////////////////////////////////////////
073    
074         public Icon  getIcon ( ) { return icon; }
075    
076         public Shape  getCollisionShape ( )
077         //////////////////////////////////////////////////////////////////////
078         {
079           return paintBounds;
080         }
081    
082         public void  getCollisionBounds ( Rectangle  collisionBounds )
083         //////////////////////////////////////////////////////////////////////
084         {
085           collisionBounds.setBounds ( paintBounds );
086         }
087    
088         public void  getPaintBounds ( Rectangle  paintBounds )
089         //////////////////////////////////////////////////////////////////////
090         {
091           paintBounds.setBounds ( this.paintBounds );
092         }
093    
094         //////////////////////////////////////////////////////////////////////
095         // mutator methods
096         //////////////////////////////////////////////////////////////////////
097    
098         public void  setX ( double  x )
099         //////////////////////////////////////////////////////////////////////
100         {
101           super.setX ( x );
102    
103           paintBounds.x = ( int ) x;
104         }
105    
106         public void  setY ( double  y )
107         //////////////////////////////////////////////////////////////////////
108         {
109           super.setY ( y );
110    
111           paintBounds.y = ( int ) y;
112         }
113    
114         public void  setIcon ( Icon  icon )
115         //////////////////////////////////////////////////////////////////////
116         {
117           NullArgumentException.check ( this.icon = icon );
118    
119           paintBounds.width  = icon.getIconWidth  ( );
120    
121           paintBounds.height = icon.getIconHeight ( );
122         }
123    
124         //////////////////////////////////////////////////////////////////////
125         //////////////////////////////////////////////////////////////////////
126    
127         public void  paint (
128           JComponent  component,
129           Graphics2D  graphics )
130         //////////////////////////////////////////////////////////////////////
131         {
132           icon.paintIcon ( component, graphics, ( int ) x, ( int ) y );
133         }
134    
135         //////////////////////////////////////////////////////////////////////
136         //////////////////////////////////////////////////////////////////////
137         }