001         package com.croftsoft.core.animation.sprite;
002    
003         import java.awt.Graphics2D;
004         import java.awt.Rectangle;
005         import javax.swing.JComponent;
006    
007         import com.croftsoft.core.animation.ComponentPainter;
008         import com.croftsoft.core.animation.ComponentUpdater;
009         import com.croftsoft.core.animation.Sprite;
010         import com.croftsoft.core.animation.painter.NullComponentPainter;
011         import com.croftsoft.core.animation.updater.NullComponentUpdater;
012         import com.croftsoft.core.lang.NullArgumentException;
013    
014         /*********************************************************************
015         * An abstract Sprite implementation.
016         *
017         * @version
018         *   2003-07-12
019         * @since
020         *   2002-03-07
021         * @author
022         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
023         *********************************************************************/
024    
025         public abstract class  AbstractSprite
026           implements Sprite
027         //////////////////////////////////////////////////////////////////////
028         //////////////////////////////////////////////////////////////////////
029         {
030    
031         protected double            x;
032    
033         protected double            y;
034    
035         protected double            z;
036    
037         protected double            heading;
038    
039         protected double            velocity;
040    
041         protected ComponentUpdater  componentUpdater;
042    
043         protected ComponentPainter  componentPainter;
044    
045         //////////////////////////////////////////////////////////////////////
046         // constructor methods
047         //////////////////////////////////////////////////////////////////////
048    
049         public  AbstractSprite (
050           double            x,
051           double            y,
052           double            z,
053           double            heading,
054           double            velocity,
055           ComponentUpdater  componentUpdater,
056           ComponentPainter  componentPainter )
057         //////////////////////////////////////////////////////////////////////
058         {
059           this.x = x;
060    
061           this.y = y;
062    
063           this.z = z;
064    
065           this.heading  = heading;
066    
067           this.velocity = velocity;
068    
069           setComponentUpdater ( componentUpdater );
070    
071           setComponentPainter ( componentPainter );
072         }
073    
074         public  AbstractSprite ( )
075         //////////////////////////////////////////////////////////////////////
076         {
077           this ( 0.0, 0.0, 0.0, 0.0, 0.0, null, null );
078         }
079    
080         //////////////////////////////////////////////////////////////////////
081         // accessor methods
082         //////////////////////////////////////////////////////////////////////
083    
084         public double  getX        ( ) { return x;        }
085    
086         public double  getY        ( ) { return y;        }
087    
088         public double  getZ        ( ) { return z;        }
089    
090         public double  getHeading  ( ) { return heading;  }
091    
092         public double  getVelocity ( ) { return velocity; }
093    
094         public void  getCollisionBounds ( Rectangle  collisionBounds )
095         //////////////////////////////////////////////////////////////////////
096         {
097           collisionBounds.setBounds ( getCollisionShape ( ).getBounds ( ) );
098         }
099    
100         //////////////////////////////////////////////////////////////////////
101         // mutator methods
102         //////////////////////////////////////////////////////////////////////
103    
104         public void  setX ( double  x ) { this.x = x; }
105    
106         public void  setY ( double  y ) { this.y = y; }
107    
108         public void  setZ ( double  z ) { this.z = z; }
109    
110         public void  setHeading ( double  heading )
111         //////////////////////////////////////////////////////////////////////
112         {
113           this.heading = heading;
114         }
115    
116         public void  setVelocity ( double  velocity )
117         //////////////////////////////////////////////////////////////////////
118         {
119           this.velocity = velocity;
120         }
121    
122         //////////////////////////////////////////////////////////////////////
123         //////////////////////////////////////////////////////////////////////
124    
125         public void  setComponentUpdater (
126           ComponentUpdater  componentUpdater )
127         //////////////////////////////////////////////////////////////////////
128         {
129           if ( componentUpdater == null )
130           {
131             componentUpdater = NullComponentUpdater.INSTANCE;
132           }
133    
134           this.componentUpdater = componentUpdater;
135         }
136    
137         public void  setComponentPainter (
138           ComponentPainter  componentPainter )
139         //////////////////////////////////////////////////////////////////////
140         {
141           if ( componentPainter == null )
142           {
143             componentPainter = NullComponentPainter.INSTANCE;
144           }
145    
146           this.componentPainter = componentPainter;
147         }
148    
149         //////////////////////////////////////////////////////////////////////
150         // interface ComponentAnimator methods
151         //////////////////////////////////////////////////////////////////////
152    
153         public void  update ( JComponent  component )
154         //////////////////////////////////////////////////////////////////////
155         {
156           componentUpdater.update ( component );
157         }
158    
159         public void  paint (
160           JComponent  component,
161           Graphics2D  graphics )
162         //////////////////////////////////////////////////////////////////////
163         {
164           componentPainter.paint ( component, graphics );
165         }
166    
167         //////////////////////////////////////////////////////////////////////
168         //////////////////////////////////////////////////////////////////////
169         }